全网最全安全加固指南之linux系统加固
Linux系统安全加固
系统用户
账号分类:
超级管理员 uid=0,
系统默认用户 系统程序使用,从不登录
新建普通用户 uid大于500
/etc/password
/etc/shadow
liunx用户管理
#添加用户
useradd <用户名>
#删除用户
userdel [-r][-f] <用户名>
#锁定/解锁用户
passwd -l <用户名>
passwd -u <用户名>
#用户属性
usermod -L <用户名>锁定用户
usermod -U <用户名>解锁用户
#查看当前用户
id
解析文件权限
执行ls -l .. .. 命令查看
输出命令包括7个字段
权限与归属
- 访问权限
读取:允许查看内容-read
写入:允许修改内容-write
可执行:允许运行和切换-excute
- 归属关系
所有者:拥有此文件/目录的用户-user
所属者:拥有此文件/目录的组-group
其他用户:除所有者、所属组以外的用户-other
所有用户:以上三类归属称-all
文件系统安全
查看权限:
ls -l
修改权限:
chmod 777 test
chown 123:123 test
chgrp root test
设置合理的初始文件权限
UMASK命令:
umask值为0022所对应的默认文件和文件夹创建的缺省权限分别为644和755
文件夹其权限规则为:777-022=755
文件其权限规则为: 777-111-022=644(因为文件默认没有执行权限)
修改UMASK值:
1、直接在命令行下umask xxx (重启后消失)
2、修改/etc/profile中设定的umask值
linux提权漏洞
由于Linux 内核的内存子系统在处理 Copy-on-Write 时出现竞争条件(漏洞),导致私有的只读内存映射被破坏、获取读写权限后低权限用户可以进一步提权。
1.检查是否有内核升级包:yum check-update |grep kernel
2.升级内核:yum update kernel
3.确认下新版本的内核或 initrd/initramfs 是否有xen-vbd和virtio_blk驱动:
#lsinitrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img |grep -i -E 'xen-blkfront|virtio_blk' -rwxr--r-- 1 root root 23448 Nov 4 16:21 lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/drivers/block/virtio_blk.ko -rwxr--r-- 1 root root 54888 Nov 4 16:21 lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/drivers/block/xen-blkfront.ko
如果没有,则需要给initrd/initramfs安装驱动,然后执行第三步后重启。
锁定系统中多余的自建帐号
执行命令
cat /etc/passwd
cat /etc/shadow
查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户如:bin, sys,
adm,uucp,lp, nuucp,hpdb, www, daemon等可根据需要锁定登陆。
加固方法:
使用命令passwd -l <用户名>锁定不必要的账号。
使用命令passwd -u <用户名>解锁需要恢复的账号。
检查shadow中空口令帐号
检查方法:
awk -F ":" '($2=="!"){print $1}' /etc/shadow
加固方法:
#锁定不必要的账户
passwd -l <用户名>
#解锁需要恢复的账户
passwd -u <用户名>
#为用户设置密码
passwd <用户名>
设置系统密码策略
执行命令
cat /etc/login.defs|grep PASS #查看密码策略设置
加固方法:
vi /etc/login.defs修改配置文件
PASS_MAX_DAYS 90 #用户的密码最长使用天数
PASS_MIN_DAYS 0 #两次修改密码的最小时间间隔
PASS_MIN_LEN 7 #密码的最小长度
PASS_WARN_AGE 9 #密码过期前多少天开始提示
禁用root之外的超级用户
检测方法:
#检查用户ID为0的用户
awk -F ":" '($3=="0"){print $1}' /etc/passwd
加固方法:
#锁定用户
passwd -l <用户名>
限制能够su为root的用户
#查看是否有auth required /lib/security/pam_wheel.so这样的配置条目
cat /etc/pam.d/su
加固方法
在头部添加:
auth required /lib/security/pam_wheel.so group=wheel
这样,只有wheel组的用户可以su到root
#将test用户加入到wheel组
usermod -G10 test
重要文件加上不可改变属性
#把重要文件加上不可改变属性
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/gshadow
chattr +i /etc/group
chattr +i /etc/inetd.conf
chattr +i /etc/httpd.conf
ssh安全
禁止root用户进行远程登录
检查方法:
#是否为no
cat /etc/ssh/sshd_config | grep PermitRootLogin
加固方法
vi /etc/ssh/sshd_config
PermitRootLogin no
更改服务端口
vi /etc/ssh/ssh_config
Port 2222 更改ssh端口
屏蔽SSH登录banner信息
检查方法:
#查看文件中是否存在banner字段,或banner字段为NONE
cat /etc/ssh/sshd_config
#查看文件内容,该处内容作为banner信息显示给登录用户
cat /etc/motd
加固方法:
vim /etc/ssh/sshd_config
添加:
banner NONE
#vim /etc/motd
删除全部内容或更新成自己想要添加的内容
仅允许SSH协议版本2
有两个SSH协议版本,仅使用SSH协议版本2会更安全。
SSH协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。
编辑/etc/ssh/sshd_config文件并查找下面这样的行:
Protocol 2,1
修改为
Protocol 2
防止误使用Ctrl+Alt+Del重启系统
检查方法:
查看输出行是否被注释
cat /etc/inittab |grep ctrlaltdel
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
加固方法:
vim /etc/inittab
在行开否添加注释符号“#”
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
设置账户锁定登录失败锁定次数锁定时间
检查方法:
cat /etc/pam.d/system-auth|grep auth
查看有无auth required pam_tally.so
条目的设置
加固方法:
#设置为密码连续错误6次,锁定时间300秒
vi /etc/pam.d/system-auth
auth required pam_tally.so oneer=filad deny=6 unlock_time=300
解锁用户:faillog -u <用户名> -r
修改账户TMOUT值,设置自动注销时间
检查方法:
#查看有无TMOUT的设置
cat /etc/profile|grep TMOUT
加固方法:
vim /etc/profile
增加
TMOUT=600
无操作600秒后自动退出
设置BASH保留历史命令的条目
检查方法:
cat /etc/profile | grep HISTSIZE
HISTSIZE=1000
加固方法:
vim /etc/profile
修改
HISTSIZE=5
即保留最新执行的5条命令
用户注销时删除命令记录
检查方法:
查看/etc/skel/.bash_logout
文件,增加如下行
rm -f $HOME/.bash_history
这样,系统中的所有用户注销时都会删除其命令记录,如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history文件增加相同的一行即可。
设置系统日志策略配置文件
日志的主要用途是系统审计、监测追踪和分析统计。
为了保证 Linux 系统正常运行、准确解决遇到的各种各样的系统问题,认真地读取日志文件是管理员的一项非常重要的任务。
UNIX/ Linux采用了syslog工具来实现此功能,如果配置正确的话,所有在主机上发生的事情都会被记录下来,不管是好的还是坏的。
CentOS6起/etc/syslog.conf不再有!而是/etc/rsyslog.conf代替!
检查方法:
ps -aef | grep syslog #确定syslog服务是否启用
cat /etc/rsyslog.conf #查看syslogd的配置,并确认日志文件日否存在
#系统日志 (默认)
/var/log/messages
#cron日志 (默认)
/var/log/cron
#安全日志 (默认)
/var/log/secure
阻止系统响应任何从外部/内部来的ping请求
加固方法:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
其他客户端就不能ping通你的服务器了。