目录
1.2.5 已开启登录连接超时功能,超时时间大于等于 10 分钟
3.2.1 用户审计记录应包含日期、时间、类型、主体标识、客体标识和结果
4.1.3 不存在 Telnet 或 HTTP 明文传输方式
1.身份鉴别合规项检测
准备
安装一个 PAM 模块来启用 cracklib 支持,这可以提供额外的密码检查功能。
在 Debian,Ubuntu 或者 Linux Mint 使用命令:
sudo apt install libpam-cracklib
这个模块在 CentOS,Fedora 或者 RHEL 默认安装了。所以在这些系统上就没有必要安装了。
1.1 用户登录身份标识鉴别策略
1.1.1 root 权限用户检测
1.根据检测结果,删除不合规的 root 权限账户,命令如下:
删除该用户,命令如下:
userdel 用户名
rm -rf /home/用户名 (可选,表示删除该用户的主目录)
2.检查配置/etc/passwd 中,是否包含用户标识号相同的帐号,用户标识号位置如下:
以第一行为例,从左至右,依次为:
帐号名:口令:用户标识号:组标识号:注释性描述:主目录:登录 shell
1.1.2 最长使用周期小于等于 90 天
命令: sudo vi /etc/login.defs
修改密码期限:
修改 PASS_MAX_DAYS 字段值为 90
1.1.3 最短更换周期大于等于 2 天
命令: sudo vi /etc/login.defs
修改 PASS_MIN_DAYS 字段值为 2
1.1.4 距失效提示天数大于等于 5 天
命令: sudo vi /etc/login.defs
修改 PASS_WARN_AGE 字段值为 5
1.1.5 最新的密码不能是前 5 次使用过的密码
Centos、RHEL、Oracle Linux 系统下修改如下文件:
sudo vi /etc/pam.d/system-auth
在以下 password pam_unix.so 选项的末尾添加 remember=5
Debian、Ubuntu、RHEL、Suse 系统下修改如下文件:
sudo vi /etc/pam.d/common-password
在以下 password pam_unix.so 选项的末尾添加 remember=5
1.1.6 空口令账户
检测出有空口令账户,做以下处理:
1. 删除该用户,命令如下:
userdel 用户名
rm -rf /home/用户名 (可选,表示删除该用户的主目录)
2. 给该用户设置密码
passwd 用户名
1.1.7 弱口令账户
如果检测出有弱口令账户,建议设置符合密码复杂度要求(密码不能和用户名相同,且至
少包含大写字母、小写字母、数字、特殊字符中的三种)的密码,命令如下:
passwd 用户名
1.1.8 密码复杂性要求
在 Fedora、Centos、RHEL、Oracle Linux 使用命令:
sudo vi /etc/pam.d/system-auth
添加如下选项内容:
Debian、Ubuntu、RHEL、Suse 系统下修改如下文件:
sudo vi /etc/pam.d/common-password
添加如下选项内容:
1.1.9 Wheel 组检测
检查文件/etc/group 中,wheel 后面是否有用户名:
cat /etc/group
如果有,将其修改成与上述划线部分相同。
1.1.10 相同 ID 用户检测
检查配置/etc/passwd 中,是否包含用户标识号相同的帐号,用户标识号位置如下:
以第一行为例,从左至右,依次为:
帐号名:口令:用户标识号:组标识号:注释性描述:主目录:登录 shell
修改标识号相同的账号 foo 为唯一标识
usermod -u 2005 foo #该命令将 foo 账号修改为 2005
1.2 登录失败处理策略
1.2.1 普通用户触发锁定次数小于等于 5 次
1.2.2 普通用户锁定时间大于等于 10 分钟
1.2.3 root 用户触发锁定次数小于等于 5 次
1.2.4 root 用户触发锁定时间大于等于 10 分钟
1. 修改如下配置文件:
/etc/pam.d/sshd (远程 ssh)
/etc/pam.d/login (终端)
2.添加如下行:
auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root=5
root_unlock_time=600
各参数解释:
even_deny_root:root 用户连续错误登录的最大次数,超过最大次数,则锁定该用户
deny:普通用户连续错误登录的最大次数,超过最大次数,则锁定该用户
unlock_time:设定普通用户锁定后,多少时间后解锁,单位是秒
root_unlock_time:设定 root 用户锁定后,多少时间后解锁,单位是秒
配置示例:
1.2.5 已开启登录连接超时功能,超时时间大于等于 10 分钟
在/etc/profile 文件中添加 TMOUT 变量,设置连接超时时间(单位为秒),示例如下:
sudo vi /etc/profile
修改 TMOUT 值为超时时间 600
1.3 远程管理策略
1.3.1 使用协议版本大于等于 2
配置说明
执行如下命令,
1. 修改配置文件
sudo vi /etc/ssh/sshd_config
修改 Protocol 字段为 2
2.重启 sshd 生效,重启命令如下:
CentOS、RedHat 系列: systemctl restart sshd
Ubuntu 系列: service sshd restart
1.3.2 使用端口不为 22
配置说明
执行如下命令,
修改配置文件
sudo vi /etc/ssh/sshd_config
修改 Port 字段为非 22 的值
1.3.3 最大失败尝试登录次数小于等于 5 次
配置说明
执行如下命令,
修改配置文件 sudo vi /etc/ssh/sshd_config
最大失败尝试登录次数小于等于 5
重启 sshd 生效,重启命令如下:
CentOS、RedHat 系列: systemctl restart sshd
Ubuntu 系列: service sshd restart
1.3.4 禁止 root 登录
执行如下命令,
修改配置文件
sudo vi /etc/ssh/sshd_config
修改 PermitRootLogin 的值为 no
注:no 表示禁止 root 登录,yes 表示允许 root 登录(禁止 root 登录时,如果仍有 ssh 登录需求,可使用其他账户登录,若无其他账号,则应当在禁止 root 前新建账号)。
1.3.5 开启 RSA 认证登录
配置说明
执行如下命令,
修改配置文件 sudo vi /etc/ssh/sshd_config
修改 RSAAuthentication 字段为 yes
重启 sshd 生效,重启命令如下:
CentOS、RedHat 系列: systemctl restart sshd
Ubuntu 系列: service sshd restart
1.3.6 开启公钥验证登录
配置说明
执行如下命令,
修改配置文件
sudo vi /etc/ssh/sshd_config
修改 PubkeyAuthentication 字段为 yes
重启 sshd 生效,重启命令如下:
CentOS、RedHat 系列: systemctl restart sshd
Ubuntu 系列: service sshd restart
1.3.7 设置允许登录用户
修改方法有两种:在 ssh 配置文件中设置,或在 pam.d 配置中设置(任选一种即可)
1. 在 ssh 配置文件中设置(默认不配置的情况下,是允许所有用户登录.):
sudo vi /etc/ssh/sshd_config
在 AllowUsers 后指定允许登录的用户
1. 或者在 pam.d 的 sshd 配置中设置
sudo vi /etc/pam.d/sshd
添加以下内容:
auth required pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail
(这里在/etc/sshusers 文件中指定允许用户,也可以更换为其他文件)
然后在指定文件中设置登录用户(这里是/etc/sshusers 文件)
重启 sshd 生效,重启命令如下:
CentOS、RedHat 系列: systemctl restart sshd
Ubuntu 系列: service sshd restart
2.访问控制合规项检测
2.1 默认账户检测
2.1.1 系统默认账户已被重命名或禁用
1. 删除账户:
userdel 用户名
rm -rf /home/用户名 (可选,表示删除该用户的主目录)
2. 重命名账户:
usermod -l 修改后的用户名 要修改的用户名
2.2 非默认账户检测
2.2.1 超过半年未登录账户检测
根据检测结果,将对应的用户删除。
userdel 用户名
rm -rf /home/用户名 (可选,表示删除该用户的主目录)
2.3 安全信息标记访问控制
2.3.1 开启对敏感数据和操作权限进行标记
建议终端安装 selinux,且/etc/selinux/config 配置文件中有 SELINUX=enforcing 项。
sudo vi /etc/selinux/config
或者安装 apparmor,确保其处于运行状态。
systemctl status apparmor
3.安全审计合规项检测
3.1 用户行为及安全事件审计
3.1.1 开启日志守护进程
建议安装 rsyslog 日志服务(低版本 linux 系统使用 syslog 也可以),以记录主机的应用日志。
检测 rsyslog 运行状态,操作命令如下:
1. CentOS、RedHat 系列操作如下:
systemctl status rsylog 查看状态
systemctl stop rsyslog 停止
systemctl start rsyslog 启动
启动成功后状态:
查看进程有没有启动:
2、Ubuntu 系列操作如下:
service rsylog status 查看状态
service rsyslog stop 停止
service rsyslog start 启动
启动成功后状态:
查看进程有没有启动:
3.1.2 开启审计日志服务
3.1.3 开启应用日志服务
建议安装 auditd 审计日志服务,以记录主机的审计日志。
检测 auditd 运行状态,操作命令如下:
1、CentOS、RedHat 系列操作如下:
systemctl status auditd 查看状态
systemctl stop auditd 停止
systemctl start auditd 启动
启动成功后状态:
查看进程有没有启动:
ps -ef | grep auditd
2、Ubuntu 系列操作如下:
service auditd status 查看状态
service auditd stop 停止
service auditd start 启动
启动成功后状态:
查看进程有没有启动:
ps -ef | grep auditd
3.2 审计内容检查
3.2.1 用户审计记录应包含日期、时间、类型、主体标识、客体标识和结果
检查/etc/rsyslog.conf 中的安全日志写入配置:(若使用的是 syslog,则检查/etc/syslog.conf,
检查内容一致)
sudo vi /etc/rsyslog.conf
配置中应包含 auth.* /xxx/xxx(此处为日志文件路径)
或者 authpriv.* /xxx/xxx(此处为日志文件路径)
审计日志写入开关:
检查/etc/audit/auditd.conf 中,log_format 选项应设置为 RAW。
如果有 write_logs 选项,应设置为 yes(老版本的 auditd 没有这一选项)。
sudo vi /etc/audit/auditd.conf
3.3 审计记录备份保护
3.3.1 主机日志记录是否超过半年
及时更新在/var/log/secure 下的安全日志和/var/log/audit 下的审计日志,删除其中超过半年以上的历史记录。
3.3.2 主机日志是否有备份
rsyslog 在/etc/rsyslog.conf 的底部添加日志服务器配置:*.* @x.x.x.x,"*.*"表示所有日志,可以将"*.*"替换为实际需要的日志信息。如:kern.* ; mail.* 等等;x.x.x.x 为实际的 IP 或域名
(如果是 syslog 则修改/etc/syslog.conf,修改方法相同)
sudo vi /etc/rsyslog.conf
备份所有日志:(x.x.x.x 为指定的日志服务器地址)
或备份部分指定日志:(下方示例为内核日志)
4.入侵防范合规项检测
4.1 非必须系统服务检测
4.1.1 Linux 默认共享检测
Linux 不存在默认共享,默认符合。
4.1.2 ftp 服务已禁用
关闭系统中的 vsftp 服务,并关闭其他在 21 端口监听的服务。
关闭 vsftp 服务:
systemctl stop vsftpd
检查 vsftpd 状态:systemctl status vsftpd
检测有无其他进程在监听 ftp 端口:
lsof -i:ftp
4.1.3 不存在 Telnet 或 HTTP 明文传输方式
配置说明
关闭主机上的 telnet 和 http 服务。
1.关闭 telnet 服务
sudo vi /etc/services,注释 23 号端口(telnet)
2.关闭 http 服务
sudo vi /etc/services,注释 80 号端口(http)
4.1.4 开启 X 项存在风险的服务
根据检测出的高危服务项(如"postfix"、"cups"、"rpcbind"等),卸载主机上的对应服务
卸载方法如下:
linux 通过 yum 安装的服务都可以通过 yum erase 命令卸载
假设现在需要卸载 httpd
首先停止 httpd 服务:
service httpd stop
查看 httpd 安装的包名:
yum list | grep httpd
会展示出很多依赖包,只取第一个,我这边是 httpd.x86_64
卸载命令:
yum erase httpd.x86_64
4.2 开放的高危端口检测
4.2.1 linux 没有高危端口,默认符合
Linux 高危端口默认符合
4.3 终端网络管理限制(满足任意一项即合规)
4.3.1 hosts 已配置 ssh 接入限制
4.3.2 iptables 已配置 ssh 接入限制
两种修改方法,满足一项即可:
方法一:在/etc/hosts.allow 中是否配置仅需要登录的 IP 或 IP 段:如
sshd:10.10.10.*:allow (只允许 10.10.10.*网段接入访问)
且/etc/hosts.deny 中配置 sshd:all:deny,则符合。
sudo vi /etc/hosts.allow
sudo vi /etc/hosts.deny
方法二:在 iptables 是否配置 ssh 接入限制,如
iptables -A INPUT -s 192.168.6.0/24 -p tcp --dport 22(这里指定主机的 ssh 端口) -j ACCEPT
(该命令限制 192.168.6.0/24 网段接入 22 端口)
使用 sudo iptables -L 来查看已有的 ssh 接入限制
4.4 入侵行为检测
4.4.1 开启防火墙
三种修改方式,满足一种即可:
方法一:iptables(各 Linux 系统共有)
1. 删除现有规则
iptables -F
iptables --flush
警告:当前命令执行后,会放开屏蔽的端口
2. 设置默认链策略
默认的 iptables 策略是 ACCEPT。将此更改为如下所示。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
当将 INPUT 和 OUTPUT 默认策略作为 DROP 时,对于每一个防火墙规则要求都应该定义两条规则,即一个 INPUT 和一个 OUTPUT。如果信任内部用户,则可以忽略上面 OUTPUT 的设置。默认情况下,不要丢弃所有 OUTPUT的数据包。在这种情况下,对于每一个防火墙规则的要求,你只需要定义一个规则。即定义规则传入,因为传出是接受所有数据包。
3. 阻止一个特定的 IP 地址在我们做其他规则前,如果你想阻止一个特定的 IP 地址,你应该先做如下所示。当您在日志文件中找到特定的 IP 地址时发现一些奇怪的活动,并希望在进一步研究时暂时阻止该 IP地址,这将很有帮助。
BLOCK_THIS_IP='192.168.1.108' iptables -A INPUT -s '$BLOCK_THIS_IP' -j DROP
你也可以使用下面的一种规则。
iptables -A INPUT -i eth0 -s '$BLOCK_THIS_IP' -j DROP //规则禁止这个IP地址对我们服务器eth0网卡的所有连接
iptables -A INPUT -i eth0 -p tcp -s '$BLOCK_THIS_IP' -j DROP //规则只禁止这个IP地址对我们服务器eth0网卡的tcp协议的连接
方法二:配置 ufw:(Ubuntu)
安装:sudo apt-get install ufw
启用:sudo ufw enable
禁用:sudo ufw disable
查看状态:sudo ufw status
方法三:配置:firewalld(CentOS)
查看状态
systemctl status firewalld.service
启动防火墙
systemctl start firewalld.service
关闭防火墙
systemctl stop firewalld.service
重新启动防火墙
systemctl restart firewalld.service
5.安装杀毒软件
ClamAV 是一个开源 (GPLv2) 防病毒工具包,它提供了许多实用程序,包括灵活且可扩展的多线程守护程序、命令行扫描程序、用于自动更新病毒库的高级工具。该软件包的核心是一个以共享库形式提供的反病毒引擎。
Centos系统安装方法如下:
#先在测试环境中将病毒库更新好,然后下载(默认病毒库位置在:/var/lib/clamav/)
https://blog.youkuaiyun.com/qq_29768197/article/details/129814622
#安装病毒库及杀毒软件
tar -zxvf /tmp/clamav.tar.gz -C /tmp/
mkdir /usr/local/share/clamav -p
cp /tmp/clamav/* /usr/local/share/clamav
rpm -ivh /tmp/clamav-1.2.1.linux.x86_64.rpm --nodeps --force
#扫描杀毒测试
clamscan -r -i /tmp -l /var/log/clamav.log