Linux操作系统安全加固
掌握的加固点:
-
用户系统检查
-
口令策略检测
-
日志审计检查
-
系统服务检查
-
访问控制检查
2.1.1用户系统检查
#系统内核版本检查
-
判断依据:无
-
检查方式:通过命令
uname -a
查看系统内核,或者cat /etc/os-release
,或者cat /etc/centos-release
查看系统发行版本
#检查口令为空的账户
-
判断依据:存在就是不符合
-
知识预热:特殊的shell
a. /bin/false:将用户的shell设置为/bin/false 用户会无法登陆,并且不会有任何提示 passwd文件中设置
b. /sbin/nologin:nologin会礼貌回复用户一句话,然后给你拒绝登录
-
检查方式:命令
cat /etc/passwd
,cat /etc/shadow
查看密码栏为空的账户 -
加固方式:删除密码为空的账户,或者给该账户添加密码。
-
userdel <username> 删除用户
-
passwd <username> 用户设置密码
-
passwd文件中可以设置a b操作
shadow可以查看用户的密码,如果用户名后面有*
则代表该用户是无法被登录的,如果用户后面有!!
则代表这个用户是没有密码的
查看命令:
1 [root@localhost ~]# awk -F":" '{if ($7!="/sbin/nologin" && $7!="/bin/false") print $1}' /etc/passwd > passwd 2 # 输出在passwd文件下,可以被用作登录的用户 3 4 [root@localhost ~]# awk -F":" '{if ($2=="!!") print $1}' /etc/shadow > shadow 5 # 列出 shadow 文件下密码为空的账户,在 shadow 文件中 "!!" 表示密码为空,"*" 表示账户被锁定 6 7 [root@localhost ~]# grep -f passwd shadow 8 oracle 9 # 比较输出的 passwd 和 shadow 结果,若存在同时命中的账户则不符合检查要求
#检查UID与Root相同的账户
-
判断依据:存在即不合理
-
知识预热:若UID为0则该账户与Root一样的权限
-
检查方式:命令
cat /etc/passwd
查看第三位数字为0的账户 -
加固方式:修改恶意账户的UID并删除恶意账户
检查命令
awk -F ":" '{if ($3==0 && $1!='root') print$0}' /etc/passwd 判断,passwd中第三块内容为0,但用户不是root的有哪些 #普通用户添加root权限 echo "guest:x:0:0::/:/bin/sh" >> /etc/passwd #若要删除UID=0的用户则将UID修改成正常用户的UID
#检查core dump是否开启
-
判断依据:开启即合理,关闭则不合理
-
知识预热:内存镜像
-
当程序运行过程中崩溃异常终止,操作系统会将程序当前的内存状态记录下来,保存在一个文件当中,这种行为叫做core dumo核心存储。
-
core dump 是内存快照,除了内存信息之外,有些关键的程序运行状态也会同时dump下来,例如寄存器信息、内存管理信息、其他处理器和操作系统状态信息
-
-
检查方式:命令
cat /etc/security/limits.conf
查看-
solt core 0
-
hard core 0
-
是否存在,必须二者同时存在
-
-
加固方式:添加或者修改配置文件
#检查硬盘使用情况
-
判断依据:大于80%不符合
-
检查方式:命令df -h查看硬盘使用率
-
加固方式:对硬盘实施扩容或者删除部分不重要资源
#检查History历史命令条数设置
-
判断依据:建议值为200
-
检查方式:命令cat /etc/profile 查看HISTSIZE=的值
-
加固方式:修改profile配置文件中HISTSIZE的值,建议修改为200
-
vi /etc/Profile
-
HISTSIZE = 200
-
#检查系统当前umask值
-
判断依据:值022符合
-
知识预热:
-
umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限补码,二chmod设置的是文件权限码
-
系统管理员必须设置一个合理的umask值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限
-
-
检查方式:命令
umask
输出当前umask的值 -
加固方式:通过
umask
命令修改值为022
umask 022 即可修改umask的值
2.1.2口令策略检查
#检查密码最小长度
-
判断依据:最小长度为8
-
检查方式:查看
cat /etc/login.defs
查看PASS_MIN_LEN的值。login.defs是用户账号限制文件,但是里面的策略对ROOT无效 -
加固方式:修改login.defs配置文件,修改密码最小长度值,建议修改为10
-
vi /etc/login.defs
-
PASS_MIN_LEN 10
-
#检查密码过期时间
-
判断依据:值大于90不符合
-
检查方式:命令
cat /etc/login.defs
查看PASS_MAX_DAYS的值 -
加固方式:修改login.defs配置文件,建议修改为90
vi /etc/login.defs
PASS_MAX_DAYS 90
#检查密码认证失败次数
-
判断依据:值大于5不符合
-
知识预热:默认情况下在 pam.d/login及 /pamd.d/sshd 文件中不含有认证失败次数
-
检查方式:命令cat /etc/pam.d/sshd , cat /etc/pam.d/login查看
-
auth required pam_tally2.so deny=5 lock_time=300 even_deny_root root_unlock_time=300
-
#检查密码复杂度
-
判断依据:值未配置不符合
-
知识预热:默认情况下没有密码复杂度
-
检查方式:命令cat /etc/pam.d/system-auth查看
-
password requisite pam_cracklib.so retry= difok= minlen= ucredit=-1 lcredit=-3 dcredit=-3 dictpath=/usr/share/cracklib/pw_dict值是否配置
-
-
加固方式:在pam.d/login配置文件中添加以上字段
retry= 尝试次数
difok= 新密码和旧密码最少不同字符数量
minlen= 最小密码长度
ucredit=-1 最少大写字母1个
lcredit=-3 最少小写字母3个
dcredit=-3最少数字3个
dictpath=/usr/share/cracklib/pw_dict 字典位置
#检查密码过期告警天数
-
判断依据:值小于3不符合
-
检查方式:命令cat /etc/login.defs查看PASS_WARN_AGE的值
-
加固方式:修改login.defs配置文件中,PASS_WARN_AGE字段,建议值为3
-
vim /etc/login.defs
-
PASS_WARN_AGE 3
-
2.1.3日志审计检查
#检查是否开启日志审计功能
-
判断依据:存在则符合
-
检查方式:命令 ps -ef 查看是否存在syslogd服务
-
加固方式:通过systemctl命令打开日志审计功能 systemctl start rsyslog
#检查是否开启审计功能
-
判断依据:存在则符合
-
检查方式:命令ps -ef 查看是否存在auditd服务
-
加固方式:通过systemctl命令打开审计服务,systemctl start auditd
#检查是否对登录进行记录
-
判断依据:存在则符合
-
检查方式:wtmp该日志文件永久记录每个用户登录、注销及系统启动、停机事件、需要使用last命令查看
-
检查方式:命令last -f /var/log/wtmp 查看是否有返回结果
2.1.4检查系统服务
#检查是否启动talk服务
-
判断依据:存在即不合理
-
知识预热:Linux不重要的服务,用于同一网络下用户之间的交流,存在就会有风险
-
检查方式:ps -ef | grep talk查看服务以及ntalk服务
-
加固方式:K掉它,并禁止自动启动
-
kill -9 <PID>
-
systemctl disable <talk service name>
-
#是否启用sendmail服务
判断依据:存在即不合理
检查方式:命令ps -ef | grep sendmail查看服务
加固方式:k掉sendmail服务,禁止开机自启
#是否启用FTP服务
-
判断:存在不合理
-
检查:ps -ef | grep ftp
-
加固:k掉,禁止自启动
#是否启用TELNET服务
-
判断:存在不合理
-
检查:ps -ef | grep telnet
-
加固:k掉,禁止自启动
2.1.5访问控制检查
#检查系统登陆和SSH登陆超时时间
-
判断依据:存在即符合
-
知识预热:默认情况下在profile中没有配置相关timeout参数
-
检查方式:命令cat /etc/profile查看 export TMOUT=的值
-
加固方式:在profile中追加:export TMOUT的值,建议设置100
-
vim /etc/profile
-
export TMOUT=100
-
#检查SSH协议是否使用SSH2
-
判断依据:存在即合理
-
知识预热:
-
检查方式:命令cat /etc/ssh/sshd_config,cat /etc/ssh2/ssh2d_config查看Protocol 2配置
-
加固方式:将ssh的协议类型改为ssh2,若不存配置则追加字段刀sshd_config配置文件中
-
vim /etc/ssh/sshd_config
-
Protocol 2
-
#检查是否允许root账户远程连接SSH
-
判断依据:值为no则符合
-
知识预热:
-
检查方式:命令 cat /etc/ssh/sshd_config , cat /etc/ssh2/ssh2d_config查看PermitRootLogin的值
-
加固方式:修改PermitRootLogin的值为no,若不存则追加字段刀sshd_config配置文件下即可
-
vim /etc/ssh/sshd_config
-
PermitRootLogin no
-
#检查是否允许所有IP访问主机
-
判断依据:值为ALL或者没配置 则不符合
-
知识预热:
-
检查方式:命令cat /etc/hosts.allow查看sshd:的值
-
加固方式:在hosts.allow配置文件中追加允许访问的ip地址
-
ssh允许单个ip地址:sshd:192.168.222.1
-
ssh允许ip段:sshd:192.168.222.
-
#检查是否拒绝所有ip访问主机
-
判断依据:值ALL符合
-
知识预热:
-
检查方式:命令 cat /etc/hosts.deny查看sshd:的值
-
加固方式:在hosts.deny中追加sshd:ALL
-
关于拒绝所有主机会不会造成业务问题,答案是不会。因为deny和前面的allow存在先后关系,它会先允许allow文件中的ip地址通过,然后再拒绝除allow文件外的ip
-