Linux安全加固
作者:MappleZF
版本:1.0.0
简介:当时因运维工作所需,基于CentOS 7 进行部分内容的整理。
文章目录
-
- Linux安全加固
-
- 一、账户和口令管理
- 二、文件权限
- 三、日志管理
- 四、系统服务
-
- 4.1 限制root用户SSH远程登陆
- 4.2 限制Telnet远程登陆
- 4.3 修改SNMP的默认Community
- 4.4 禁止root用户登录FTP
- 4.5 禁止存在心血漏洞
- 4.6 设置登陆超时时间
- 4.7 禁用Core Dump状态
- 4.8 配置NFS服务限制
- 4.9 禁止ICMP重定向
- 4.10 禁止wheel组之外的用户su为root
- 4.11 打开syncookie缓解syn flood攻击
- 4.12 禁止存在bash安全漏洞
- 4.13 禁用ICMP timestamp(13和14)的ICMP报文
- 4.14 禁用Time Exceeded 的ICMP报文
- 4.15 禁用ICMP协议
一、账户和口令管理
1.1 口令锁定策略
1.1.1 设置system-auth
[root@kvm-100:/etc/pam.d]# vim system-auth
在#%PAM-1.0下面的一行追加内容:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=180 even_deny_root root_unlock_time=180
account required pam_tally2.so
PS即:三次登陆(如sudo)等操作,密码错误,即锁定账户,解锁时间是180秒。(root用户也一样)
1.1.2 设置password-auth
[root@kvm-100:/etc/pam.d]# vim password-auth
在#%PAM-1.0下面的一行追加内容:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=180 even_deny_root root_unlock_time=180
account required pam_tally2.so
补充解析:
查询语句
pam_tally2 -u <username>
解锁用户语句
pam_tally2 -u <username> -r --reset
[root@kvm-100:/etc/pam.d]# pam_tally2 -u root
Login Failures Latest failure From
root 3 12/14/20 15:23:36 192.168.7.156
[root@kvm-100:/etc/pam.d]# pam_tally2 -u root -r --reset
Login Failures Latest failure From
root 0
1.2 口令生成期
1.2.1 设置login.defs
[root@kvm-100:/etc]# vim /etc/login.defs
修改 约在25-28行之间
PASS_MAX_DAYS 90
PASS_MIN_DAYS 10
PASS_MIN_LEN 12
PASS_WARN_AGE 7
PS即:新建用户的密码最长使用天数不大于90;新建用户的密码最短使用天数为10;新建用户的密码到期提前提醒天数为7;新建用户的密码最小长度12
1.3 口令复杂度
1.3.1 设置system-auth
设定新密码的复杂度
[root@kvm-100:/etc/pam.d]# vim system-auth
修改
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
参数含义:
difok 定义新密码中必须要有几个字符和旧密码不同
minlen 定义新密码的最小长度
ucredit 定义新密码中可以包含的大写字母的最大数目(-1代表最少1个)
lcredit 定义新密码中可以包含的小写字母的最大数目(-1代表最少1个)
dcredit 定义新密码中可以包含的数字的最大数目 (-1代表最少1个)
ocredit 定义新密码中可以包含的特殊字符的最大数目 (-1代表最少1个)
1.3.2 设置password-auth
设定新密码的复杂度
[root@kvm-100:/etc/pam.d]# vim password-auth
修改
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
1.4 删除无关账户
1.4.1 检测/etc/shadow文件
查看/etc/shadow文件,确认以下用户(lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody)的密码列字段是否以*或者!!开头:
egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/shadow|awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1":"}'
[root@kvm-100:/root]# egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/shadow|awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1":"}'
[root@kvm-100:/root]#
1.4.2 检测/etc/passwd文件
查看/etc/passwd文件确认以下用户(lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody)的shell域字段值是否为/bin/false
egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'
[root@kvm-100:/root]# egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'
lp:/sbin/nologin
sync:/bin/sync
halt:/sbin/halt
operator:/sbin/nologin
games:/sbin/nologin
nobody:/sbin/nologin
nfsnobody:/sbin/nologin
1.4.3 判定依据
判定依据
1、lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody用户不存在或/etc/shadow文件中对应密码字段以*或者!!开头
2、lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody用户不存在或者/etc/passwd文件中对应shell域为/bin/false
以上二者均满足则合规,否则不合规。
1.4.4 删除或修改无关用户shell域
加固参考方案:
参考配置操作
1、如果以下用户(lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody)没有被删除或锁定,可以使用如下命令对其进行操作:
(1)、删除用户:
#userdel username
(2)、锁定用户:
#passwd -l username #锁定用户,只有具备超级用户权限的使用者方可使用。
#passwd –d username #解锁用户,解锁后原有密码失效,登录设置新密码才能登录。
#passwd -u username #解锁用户后,原密码仍然有效。
(3)、修改用户shell域为/bin/false
#usermod -s /bin/false username #命令来更改相应用户的shell为/bin/false,其中[name]为要修改的具体用户名。
[root@kvm-100:/root]# usermod -s /bin/false lp && usermod -s /bin/false sync
[root@kvm-100:/root]# usermod -s /bin/false halt && usermod -s /bin/false operator
[root@kvm-100:/root]# usermod -s /bin/false games && usermod -s /bin/false nobody
[root@kvm-100:/root]# usermod -s /bin/false nfsnobody
[root@kvm-100:/root]# egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'
[root@kvm-100:/root]#
1.5 设置账户组
1.5.1 检测login.defs
查看系统中是否存在用户id>=GID_MIN且<=GID_MAX的用户:
grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '($1="GID_MIN") {print $2}'
grep -v ^# /etc/login.defs |grep "^GID_MAX"|awk '($1="GID_MAX") {print $2}'
UP_GIDMIN=`(grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '($1="GID_MIN") {print $2}')`
UP_GIDMAX=`(grep -v ^# /etc/login.defs |grep "^GID_MAX"|awk '($1="GID_MAX") {print $2}')`
egrep -v "oracle|sybase|postgres" /etc/passwd|a