基线检查和安全加固是安全服务中重要的部分,招聘要求以及面试提问中出现的频率也比较高,虽然现在部分企业使用工具进行基线检查并加固,但是如果企业只有一两台服务器需要进行基线加固的话,使用工具就没有必要了,所以学习手工基线加固还是十分有必要的。本文对Linux基线加固进行实操讲解,使用的是CentOS 7系统,相关内容需要根据企业实际情况做相应的更改!
一、身份鉴别
1.1、配置口令复杂度(必须实施)
在/etc/pam.d/system-auth文件中配置:
password requisite pam_cracklib.so difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=1
-
password requisite pam_cracklib.so:这表示当用户更改密码时,需要使用pam_cracklib模块来检查密码的强度。如果密码不满足pam_cracklib的要求,密码更改将被拒绝
-
difok=3:这个参数指定密码中必须有至少3个字符与旧密码不同。这是为了防止用户通过只更改一两个字符来绕过密码更改的要求
-
minlen=8:这表示密码的最小长度必须是8个字符
-
ucredit=-1:这个参数指定密码中必须包含至少一个大写字母。-1表示至少需要一个大写字母,如果设置为0,则不强制要求大写字母
-
lcredit=-1:这个参数指定密码中必须包含至少一个小写字母。-1表示至少需要一个小写字母,如果设置为0,则不强制要求小写字母
-
dcredit=1:这个参数指定密码中必须包含至少一个数字。1表示至少需要一个数字,如果设置为0,则不强制要求数字
总的来说就是设置密码至少8位,包含1位大字母、1位小写字母、1位数字:
1.2、配置口令认证失败锁定次数(必须实施)
在/etc/pam.d/system-auth文件中配置:
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
-
auth required pam_tally.so:这表示当用户尝试认证时,需要使用pam_tally模块来跟踪失败的登录尝试。如果用户连续多次登录失败,该模块将锁定账户
-
onerr=fail:这个参数指定如果pam_tally模块失败(例如,因为账户被锁定),则认证过程将立即失败,不会尝试其他认证模块
-
deny=10:这个参数指定在账户被锁定之前允许的最大失败登录尝试次数,如果用户连续10次登录失败,账户将被锁定
-
unlock_time=300:这个参数指定账户锁定的时间长度(以秒为单位),如果账户被锁定,它将在300秒(即5分钟)后自动解锁
1.3、配置口令生存期(必须实施)
在/etc/login.defs文件中配置:
PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
1.4、配置使用SSH方式远程访问(必须实施)
使用service sshd status命令查看SSH服务状态:
使用service telnetd status命令查看telnetd状态(要关闭该服务或者不安装该服务),我没有安装该服务所以查询不到该服务:
1.5、配置历史口令使用策略(建议实施)
在/etc/pam.d/system-auth文件中配置:
password sufficient pam_unix.so ............ remember=5 #直接在对应的行后面添加remember=5
二、访问控制
2.1、禁用共享账户(必须实施)
使用cat /etc/passwd命令查看所用的用户信息,与管理员确认是否存在共享账户
2.2、锁定无关账户(必须实施)
方式一:使用 vim /etc/passwd命令,将需要锁定的无关账户的shell域后面添加nologin
方式二:使用passwd -l username命令锁定无关账户,使用passwd -d username解锁账户,同时被解锁的账户需要重新设置密码,比较麻烦,推荐使用方式一
一般情况下,需要锁定的账户有:lp、nuucp、hpdb、sync、adm
像我这里只有sync需要设置,其它默认为nologin:
2.3、清除UID为0的非root账户(必须实施)
因为UID为0的任何用户都拥有系统的最高特权,所以需要保证只有root用户的UID为0
使用awk -F: '($3==0){print $1}' /etc/passwd查看UID为0的用户有哪些:
2.4、设置umask值(必须实施)
使用以下命令查看umask的值是否存在且为027,如果不是就修改为027
-
cat /etc/profile | grep "umask"
-
cat /etc/csh.login | grep "umask"
-
cat /etc/csh.cshrc | grep "umask"
-
cat /etc/bashrc | grep "umask"
我这里只展示修改/etc/csh.login文件,这个文件中没有设置umask值:
2.5、配置重要目录与文件的权限(建议实施)
对于重要目录,使用ls -l 文件路径命令进行权限设置的检查,使用chmod -R 750 文件路径命令进行权限配置,保证只有root可以读、写、执行这个文件或者目录,重要的目录或文件包括:
-
/etc/
-
/etc/rc.d/init.d/
-
/tmp
-
/etc/inetd.conf
-
/etc/passwd
-
/etc/shadow
-
/etc/group
-
/etc/security
-
/etc/services
-
/etc/rc*.d
2.6、控制未授权的SUID/SGID(建议实施)
使用命令find / -perm /4000或者find / -perm /2000查找系统中是否存在SUID/SGID权限配置不当的文件或文件夹,如果存在需要进行修改或者禁止,及时避免可能存在的后门程序:
如果存在可疑的文件或者文件夹SUID/SGID权限,可以使用chmod u-s 文件/文件夹路径或者chmod g-s 文件/文件夹路径命令删除
2.7、控制任何人都有写权限的目录(建议实施)
使用命令find / -type d -perm -002查找任何人都拥有写权限的目录,并且需要严格控制这些目录:
2.8、控制任何人都有写权限的文件(建议实施)
使用命令find / -type f -perm -002查找任何人都拥有写权限的文件,并且需要严格控制这些文件:
2.9、删除没有属主的文件(建议实施)
使用find / -nouser命令查询没有属主的文件,如果存在没有属主的文件则将其删除:
2.10、控制异常或隐含文件(建议实施)
使用find / -name "..*"或者find / -name "...*"等命令对异常和隐含文件进行检查,禁用或者删除这些文件:
同时需要注意“.xx“和”.mail“这样的文件名
2.11、禁止Ctrl+Alt+Del(建议实施)
先使用systemctl status ctrl-alt-del.target命令检查是否禁用:
如果不是,先使用systemctl edit ctrl-alt-del.target命令创建一个覆盖文件来重写ctrl-alt-del.target的行为,此时会打开一个编辑器,然后在打开的编辑器中添加以下内容来禁用重启行为:
-
[Unit]
-
Description=Disable Ctrl+Alt+Del Reboot
-
ExecStart=
保存并关闭文件,然后使用systemctl daemon-reload命令重新加载systemd的配置,此时就可以禁用Ctrl+Alt+Del重启功能了
三、安全审计
3.1、配置rsyslog.conf(必须实施)
使用more /etc/rsyslog.conf命令查看是否配置了以下项:
-
kern.warning;*.err;authpriv.nonet@loghost
-
*.info;mail.none;authpriv.none;cron.nonet@loghost
-
*.emergt@loghost
-
local7.*t@loghost
以上配置是用于将日志消息发送到远程日志服务器(loghost)的配置,如果没有配置则需要进行配置,最好配置专门的日志服务器,当然我这里是没有配置的
3.2、配置认证日志(必须实施)
使用more /etc/rsyslog.conf命令查看authpriv参数,看看其是否对所有的登录事件进行了记录:
3.3、配置使用NTP(必须实施)
为了保证日志记录时间的准确性,需要配置NTP服务器,并与NTP服务器时间同步,首先使用ps -ef | grep "ntpd"命令查看NTP进程是否启动(我这里没有安装NTP服务,所以需要使用yum install ntp命令进行安装)如果没有启动则需要使用vim /etc/ntp.conf命令进行查看并编辑NTP服务配置文件:
配置完成后,使用systemctl enable ntpd命令将NTP服务设置为开机自启动,然后使用systemctl start ntpd命令启动NTP服务
3.4、配置安全日志(必须实施)
使用cat /etc/rsyslog.conf | grep "authpriv"命令查看是否配置了安全日志:
四、入侵防范
4.1、关闭不需要的服务(必须实施)
使用who -r命令查看当前的init级别,如果是命令行级别应该是3,然后使用systemctl list-unit-files --type=service --state=enabled命令查看开启的服务,查看哪些服务是不需要的,使用systemctl stop 服务名称来关闭对应的服务,然后还需要使用systemctl is-enabled 服务名称命令来检查对应不必要的服务是不是设置了开机自启动,如果是则需要使用systemctl disable 服务名称命令来关闭开机自启动:
-
如果输出为enabled,表示该服务被设置为开机自启动
-
如果输出为disabled,表示该服务未被设置为开机自启动
-
如果输出为enabled-runtime,表示该服务被临时启用,仅在当前会话有效,不会影响下次启动
五、资源控制
5.1、配置登录超时(必须实施)
使用vim /etc/profile命令修改配置文件,在文件末尾添加export TMOUT=180保存并退出,表示设置登录超时时间为3分钟:
5.2、配置增强被远程访问的安全性(必须实施)
使用find / -name .netrc以及find / -name .rhosts命令检查系统中是否存在.netrc以及.rhosts文件,如果存在则将其删除:
5.3、限制root账户远程登录(按需实施)
使用vim /etc/ssh/sshd_config命令编辑远程连接配置文件,将#PermitRootLogin yes修改为PermitRootLogin no,表示禁止root账户远程登录,修改完成后保存并退出,然后使用systemctl restart sshd命令重启ssh服务:
六、其它
6.1、关闭系统core dump状态(建议实施)
检查/etc/security/limits.conf文件中是否存在以下行,如果不存在则添加:
-
* soft core 0
-
* hard core 0
七、总结
Linux的基线加固内容到这里就结束了,相比Windows的基线加固来说内容少了一些,但是操作的复杂度还是比较大的,毕竟需要编辑各种配置文件,当然如果熟悉的话做起来也是相当快的!文章编写不易,希望大家多多支持!
原文始发于微信公众号(德斯克安全小课堂):Linux基线加固:Linux基线检查及安全加固手工实操
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论