什么是主机安全
说明:本次文档是根据某厂的主机合规分析报告内容进行整改的,整改后评分达到90分。本次试验环境为Centos6.7
账号管理
密码锁定策略
pam_tally2
和pam_faillock
PAM 模块都可以允许系统管理员锁定在指定次数内登录尝试失败的用户账户。并在尝试指定次数是进行锁定,防止暴力破解。
检查方法:
查看/etc/pam.d/system-auth
和/etc/pam.d/password-auth
是否包含下面选项auth required pam_tally2.so deny=3 onerr=fail no_magic_root unlock_time=180 even_deny_root root_unlock_time=10
# 首先对操作的目标文件进行备份:
[root@node01 ~]# cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
[root@node01 ~]# cp -a /etc/pam.d/password-auth /etc/pam.d/password-auth
修改方法:
修改/etc/pam.d/system-auth 文件和/etc/pam.d/password-auth 文件中的 auth 区段:
auth required pam_tally2.so deny=3 onerr=fail no_magic_root unlock_time=180 even_deny_root root_unlock_time=10
在指定的两个文件中的 account 区段中添加以下命令行:
account required pam_tally2.so
说明:
/etc/pam.d/login中配置只在本地文本终端上做限制;
/etc/pam.d/kde在配置时在kde图形界面调用时限制;
/etc/pam.d/sshd中配置时在通过ssh连接时做限制;
/etc/pam.d/system-auth中配置凡是调用 system-auth 文件的服务,都会生效。
- deny 指定最大认证错误次数,如果超出此次数,将执行后面的策略。如锁定N秒,如果后面没有其他策略指定时,默认永远锁定,除非手动解锁。
- lock_time 锁定时长,按秒为单位;
- unlock_time 指定认证被锁后,多长时间自动解锁用户;
- magic_root 如果用户uid=0(即root账户或相当于root的帐户)在帐户认证时调用该模块发现失败时,不计入统计;
- no_lock_time 不使用.fail_locktime项在/var/log/faillog 中记录用户 ---按英文直译不太明白,个人理解即不进行用户锁定;
- even_deny_root root用户在认证出错时,一样被锁定(该功能慎用,搞不好就要单用户时解锁了)
- root_unlock_time root用户在失败时,锁定多长时间。该选项一般是配合even_deny_root 一起使用的。
测试
[app@node01 ~]$ su - zk
Account locked due to 6 failed logins
Password:
[root@node01 ~]# pam_tally2 --user=zk
Login Failures Latest failure From
zk 6 03/27/17 20:29:51 pts/0
[root@node01 ~]#
可人工将计数器清零:
[root@node01 ~]# pam_tally2 --user=zk --reset
Login Failures Latest failure From
zk 0
[root@node01 ~]#
密码生存期
密码生存期是另一个系统管理员用来保护在机构中防止不良密码的技术。密码有效期的意思就是在指定时段后(通常为 90 天),会提示用户创建新密码。它的理论基础是如果强制用户周期性修改其密码,那么破解的密码对与入侵者来说只在有限的时间内有用。密码有效期的负面影响是用户可能需要写下这些密码。
# 首先对操作的目标文件进行备份:
[root@node01 ~]# cp -a /etc/login.defs /etc/login.defs_bak
主要是修改下面三行的内容:
[root@yum-server ~]# vim /etc/login.defs
...
PASS_MAX_DAYS 90 # 新建用户的密码最长使用天数不大于90天
PASS_MIN_DAYS 10 # 新建用户的密码最短使用天数为10天
PASS_WARN_AGE 7 # 新建用户的密码到期提前提醒天数为7天
密码复杂度
由于管理员给用户创建的密码暴露,所以管理员都是让用户自己修改密码,但还需要符合密码的强度,在这种场景下,管理员可能会强制用户定期更改密码,防止密码过期。
当用户需要更改密码时,为符合密码强度,可使用pam_cracklib.so 这个PAM模块来检测用户设置的密码是否符合要求。
[root@node01 ~]# vim /etc/pam.d/system-auth
# 于文件中找到如下内容:
password requisite pam_cracklib.so try_first_pass retry=3 type=
将上面的这行修改为下面的内容:
# 至少包含一个数字、一个小写字母、一个大写字母、一个特殊 字符,并且密码长度要大于等于8
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8
删除无关帐号
下面的系统自带的账号应该移除或锁定。这类用户的密码列不是用*
或者!!
开头的。
lp sync halt news uucp operator games gopher smmsp nfsnobody nobody
三类用户:
- 超级用户:拥有对系统的最高管理权限,缺省是root用户。
- 普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限。
- 虚拟用户:也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
如果上面的这些用户没有被删除或锁定,可选用如下的三种操作:
1、直接将用户移除掉
userdel username
2、若不想将上述用户移除,也可将其进行锁定
passwd -l username # 锁定用户,只有具备超级用户权限的使用者方可使用。
passwd –d username # 解锁用户,解锁后原有密码失效,登录设置新密码才能登录。
passwd -u username # 解锁用户后,原密码仍然有效。
3、还可修改用户的shell
为/bin/false
usermod -s /bin/false username
执行下面的指令将上述用户进行锁定:
for a in lp sync halt news uucp operator games gopher smmsp nfsnobody nobody;do passwd -l $a;done
口令重复次数限制
对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近五次(含五次)内已使用的口令。
[root@node01 ~]# vim /etc/pam.d/system-auth
# 找到这一行:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
将上面的这行密码控制语句改为:
# 只需于该行的末尾加上 remember=5 参数即可:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
注意:NIS系统无法生效,非NIS系统或NIS+系统能够生效。
禁止管理组之外的用户su为根用户
[root@node01 ~]# vim /etc/pam.d/su
# 于文件开头加入下面两行(有则修改,没有则新加)
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
注意:auth同sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开。
通常情况下,一般用户通过执行su -
命令,输入正确的根用户密码,就能登录成为根用户。但是,为了更进一步加强安全性,有必要创建一个管理员组,只允许该组的用户来执行su -
命令登录为根用户,而使得其他组的用户即使是执行了该指令、输入了正确的密码,也无法登录为根用户。这个组的名称通常为wheel
。
按照上面的方法修改后,普通用户无法登录为根用户:
[app@node01 ~]$ su -
Password:
su: incorrect password
若希望该普通用户能够登录为根用户,需要将其加入到wheel组中:
[root@node01 ~]# usermod -G wheel app
文件与目录权限
文件与目录缺省权限控制
首先要对操作的目标文件进行备份:
[root@node01 ~]# cp /etc/profile /etc/profile.bak
[root@node01 ~]# echo "umask 027" >> /etc/profile
[root@node01 ~]# source /etc/profile
配置用户最小授权
chmod 644 /etc/passwd
chmod 400 /etc/shadow
chmod 644 /etc/group
chmod 644 /etc/services
chmod 600 /etc/xinetd.conf
chmod 600 /etc/security
设置关键文件的属性
使用命令查看messages
文件是否只可追加不可修改:
[root@node01 ~]# lsattr /var/log/messages
-------------e- /var/log/messages
[root@node01 ~]# chattr +a /var/log/messages
[root@node01 ~]# lsattr /var/log/messages
-----a-------e- /var/log/messages
a即append,设定该参数后,只能向文件中添加数据,而不能删除。
如果一个用户以root的权限登录或者某个进程以root的权限运行,会保证messages文件不会被篡改,保证系统的相对安全。
日志安全
记录安全事件日志
[root@node01 ~]# mkdir -pv /var/adm/
[root@node01 ~]# touch /var/adm/messages
[root@node01 ~]# chmod 666 /var/adm/messages
[root@node01 ~]# echo '*.err;kern.debug;daemon.notice /var/adm/messages' >> /etc/rsyslog.conf
[root@node01 ~]# /etc/init.d/rsyslog restar
日志文件安全
对权限>640
的日志文件设定为640
的权限。
检测方法:
使用以下命令查看日志文件权限
[root@node01 ~]# LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#"|awk '{print $2}'|sed 's/^-//g'|grep '^\s*\/'`
[root@node01 ~]# ls -l $LOGDIR 2>/dev/null|grep -v "[r-][w-]-[r-]-----"|awk '{print $1" "$8" "$9}'
-rw-rw-rw- 11:01 /var/adm/messages
-rw-r--r-- 20:03 /var/log/boot.log
找到这些权限有问题的日志文件后,对其进行修改权限的操作:
[root@node01 ~]# chmod 640 /var/adm/messages
[root@node01 ~]# chmod 640 /var/log/boot.log
系统服务
限制root用户SSH远程登录
检测方法:
#检测配置文件` /etc/ssh/sshd_config`是否配置拒绝`root`用户通过`ssh`协议远程登录
[root@node01 ~]# grep -v "^[[space:]]*#" /etc/ssh/sshd_config | grep "PermitRootLogin no"
#执行以下命令查看ssh协议版本号是否为2
[root@node01 ~]# grep -v "^[[space:]]*#" /etc/ssh/sshd_config | egrep "^protocol\s*2|^Protocol\s*2"
修改方法:
编辑/etc/ssh/sshd_config
修改以下两个选项
Protocol 2
PermitRootLogin no
重启sshd服务
登陆超时时间设置
检测方法:
[root@node01 ~]# cat /etc/profile | grep -i TMOUT
#输出存在,切有时间限制及合规
修改方法:
如果/etc/profile
中有下面的两行则按需要进行修改,没有这两行则写入这两行:
[root@node01 ~]# echo "TMOUT=300" >> /etc/profile
[root@node01 ~]# echo "export TMOUT" >> /etc/profile
[root@node01 ~]# source /etc/profile
清除潜在危险文件
要求系统中不能有这三个文件:.rhosts
、.netrc
、hosts.equiv
。如果使用rlogin
进行远程登录,就会需要这三个文件。通常情况下是没有这三个文件的,因而该远程登录方法很少使用了。、
检测方法:
[root@node01 ~]# find / -maxdepth 3 -name .netrc 2>/dev/null|wc -l
[root@node01 ~]# find / -maxdepth 3 -name .rhosts 2>/dev/null|wc -l
[root@node01 ~]# find / -maxdepth 3 -name hosts.equiv 2>/dev/null|wc -l
修改方法:
需要删除.rhosts
、.netrc
、hosts.equiv
如无应用,删除以上文件
删除前需要备份
mv .rhosts .rhosts.bak
mv .netrc.netrc.bak
mv hosts.equiv hosts.equiv.bak
执行删除操作
配置NFS服务限制
检测方法:
1、查看系统是否存在如下NFS守护进程:
rpc.lockd rpc.nfsd rpc.statd rpc.mountd
2、查看NFS服务状态:
#chkconfig --list| grep nfs
3、查看是否对NFS服务访问做限制:
[root@node01 ~]# more /etc/hosts.allow
[root@node01 ~]# more /etc/hosts.deny
判断依据
1、不存在与NFS有关的服务进程
2、如果存在NFS守护进程,但/etc/hosts.allow
设置了允许访问NFS的远程地址且/etc/hosts.deny
设置了拒绝访问NFS的远程地址,二者满足其一即可。
修改方案:
1、杀掉如下NFS进程:rpc.lockd rpc.nfsd rpc.statd rpc.mountd
2、禁用NFS
[root@node01 ~]# chkconfig --level 235 nfs off
3、如需要NFS服务,设置限制能够访问NFS服务的IP范围
编辑/etc/hosts.allow
增加一行:
nfs:允许访问的IP
编辑/etc/hosts.deny
增加一行:
nfs:all
网络安全
禁止IP源路由
源路由是一种互联网协议机制,可许可IP数据包携带地址列表的信息,以此分辨数据包沿途经过的路由器。通过某一路径时,会出现一可选项,记录为中间路径。所列出的中间路径,即路径记录,可提供返回至源路由路径上的目的地。这就允许源路由可指定某一路径,无论是严格的还是松散的,可忽略路径列表上的一些或全部路由器。它可允许用户恶意重定向网络流量。因而,应禁用源路由。
[root@node01 ~]# /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
控制远程访问的IP地址
首先执行备份:
cp -p /etc/hosts.allow /etc/hosts.allow_bak
cp -p /etc/hosts.deny /etc/hosts.deny_bak
检查办法:
查看/etc/hosts.allow
/etc/hosts.deny
文件中是否设置IP范围限制
修改办法
echo "sshd:192.168.1.*:allow" >> /etc/hosts.allow
echo "all:all" >> /etc/hosts.deny # 拒绝一切远程访问配合文件 hosts.allow 使用。
禁止ICMP重定向
为何要关闭该功能,因为其会导致ICMP
重定向攻击,即利用ICMP
路由公告功能,攻击者使用该功能可改变攻击目标的路由配置(可造成主机的网络连接异常,被用于流量攻击等严重后果)。
检测方法:
#值为0则合规
[root@node01 ~]# sysctl -n net.ipv4.conf.all.accept_redirects
修改办法:
[root@node01 ~]# echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.conf
[root@node01 ~]# sysctl -p
对root为ls、rm设置别名
[root@node01 ~]# vim ~/.bashrc
# 这两行有则修改,没有则新加:
alias ls='ls -aol'
alias rm='rm -i'
Update bash
确认bash的版本:
[root@node01 ~]# bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
....
可直接使用Yum
进行升级,但并不是最新的版本,若要升级到最新的版本,请进行编译安装升级。
[root@node01 ~]# cd tools/bash-4.4
[root@node01 bash-4.4]# ./configure
make && make install
zk01.jpg
网友评论