本文章针对于等级保护主机三级整改建议,仅作为参考使用
一·身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
我们使用以下命令进入login.defs这个文件,然后修改25-28行,其中PASS_MAX_DAYS代表密码最大有效期,PASS_MIN_DAYS代表密码最短天数,PASS_MIN_LEN代表密码最小长度;一般设置密码有效期在90天内,长度最小为8位;
密码复杂度则需要进入到pwquality.conf文件去修改其中minlen 代表密码最小长度;minclass代表密码包含字符类型最小数量,通常包括大写字母、小写字母、数字和特殊字符;minrepeat代表密码中的字符重复可以使用次数,maxrepeat代表字符中不能连续超过多少次,maxclassrepeat代表密码中的字符类型不能连续重复超过4次。(参考图2)
vim /etc/login.defs //密码最小长度,密码最大最小使用期限文件
vim /etc/security/pwquality.conf //密码复杂度文件
图1(login.defs文件)
图2(pwquality.conf文件)
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
这一项我们需要注意,非法登录包括本地非法登录和ssh远程非法登录
(1)本地限制非法登录
进入到system-auth文件,在auth required pam_faillock.so上面插入一行auth required pam_tally2.so deny=3 unlock_time=30 even_deny_root root_unlock_time=300;deny=3
: 表示在达到 3 次登录失败后,将阻止用户的登录。unlock_time=30
: 如果用户被锁定,将在 30 秒后自动解锁。even_deny_root
: 表示即使是 root 用户,也会受到失败次数的限制;root_unlock_time=300
: 如果 root 用户被锁定,将在 300 秒(5 分钟)后自动解锁。这是 root 用户被锁定时的解锁时间。
vim /etc/pam.d/system-auth //进入到限制非法登录文件
auth required pam_tally2.so deny=3 unlock_time=30 even_deny_root root_unlock_time=30
auth required pam_faillock.so
图3(system-auth文件)
(2)ssh远程非法登录限制
在sshd文件中写入下面一行代码进行限制
vim /etc/pam.d/sshd //进入到限制ssh非法登录文件
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300
//设置最大登录尝试次数为 3 次,以及解锁时间(unlock_time)为 300 秒,即 5 分钟。even_deny_root 表示对 root 用户也适用这个规则。
sudo systemctl restart sshd //重启使配置生效
图4(sshd文件)
(3)本地连接超时退出
进入到/etc/profile然后设置超时退出时间为600秒
vim /etc/profile //设置登录
export TMOUT=600 //设置登录超时退出时间为600秒
图5(profile文件)
(4)ssh设置登录超时时间
vim /etc/ssh/sshd_config //进入到ssh配置文件
ClientAliveInterval 600
ClientAliveCountMax 3 //添加这两行;ClientAliveInterval 设置为600秒(10分钟),ClientAliveCountMax 设置为3,表示最多允许3次检查。
图6(sshd_config文件)
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听
此项若不符合,只需将使用的不安全协议换成安全的,一般情况下linux使用的是ssh远程管理,都会符合。
yum install openssh-server //安装ssh服务
systemctl start sshd //启动ssh服务
systemctl enable sshd //设置ssh开机自启
d) 应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别, 且其中一种鉴别技术至少应使用密码技术来实现。
采用动态口令,数字证书,生物技术,指纹,ukey等两种以上的鉴别技术进行验证,其中一项需包含密码技术。
二·访问控制
a)应对登录的用户分配账户和权限;
进入到ssh配置文件找到PermitRootLogin no这个字段然后将他的注释去掉即可生效。
注意:如果服务器只有root用户或者其他用户也限制了访问控制权限,请慎重使用,以免root默认账户无法登录。
vim /etc/ssh/sshd_config //进入ssh配置文件
PermitRootLogin no //这将禁止root远程登录
图7(sshd_config文件)
b)应重命名或删除默认账户,修改默认账户的默认口令;
如果用户为默认root,那么口令需要为强口令
passwd username //修改用户的口令
c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
userdel username //删除一个用户
userdel -r username //删除用户的同时删除其主目录和邮件目录
groupdel usergroup //删除用户的组
注意:请谨慎使用userdel,groupdel命令,以免误删,影响业务
d)应授予管理用户所需的最小权限,实现管理用户的权限分离;
1. 创建用户和组:
为安全管理员、系统管理员和审计管理员创建不同的用户和组。
sudo groupadd security_admins
sudo groupadd system_admins
sudo groupadd audit_admins
sudo useradd -m -G security_admins security_admin_user
sudo useradd -m -G system_admins system_admin_user
sudo useradd -m -G audit_admins audit_admin_user
2. 配置 sudo 权限:
使用 visudo 编辑 sudoers 文件,为不同的用户组配置 sudo 权限。
sudo visudo
添加或修改行,例如:
%security_admins ALL=(ALL) /sbin/secure_command
%system_admins ALL=(ALL) /sbin/system_command
%audit_admins ALL=(ALL) /sbin/audit_command
3. 配置 SELinux 策略:
使用 semanage 命令配置 SELinux 策略。
# 例如,给 security_admin_user 用户分配 security_admin_r 角色
sudo semanage user -m -R "staff_r system_r security_admin_r" security_admin_user
4. 配置文件权限:
根据角色和职责,配置文件和目录的权限。
# 例如,给 /etc/secure_config 文件配置适当的权限
sudo chown security_admin_user:security_admins /etc/secure_config
sudo chmod 640 /etc/secure_config
e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;
询问系统管理员, 核查是否由指定授权人对操作系统的访问控制权限进行配置
核查账户权限配置, 了解是否依据安全策略配置各账户的访问规则
f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;
使用普通用户访问一些超级管理员才能访问的文件,正常情况应该是被拒绝或者文件不能编辑;可以查看以下的文件分析访问控制的颗粒度。
vim /etc/shadow #使用普通用户进入shadow文件
ls – 1 /etc
ls – 1 /tmp
ls – 1 /etc/passwd
ls – 1 /etc/shadow
ls – 1 /etc/security/passwd
ls – 1 /etc/security/login.cfg
ls – 1 /etc/security/user
图8
g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
1. 理解 SELinux 安全上下文:
在 SELinux 中,安全上下文是由用户、角色、类型和级别组成的字符串。了解如何解读和理解安全上下文对于正确配置 SELinux 策略非常重要。
2. 标记重要主体和客体的安全上下文:
标记主体的安全上下文:
使用 chcon 命令为进程或用户设置安全上下文。
chcon -u user_u -r system_r -t target_type /path/to/subject
例如:
chcon -u user_u -r system_r -t httpd_t /usr/sbin/httpd
标记客体的安全上下文:
chcon -t target_type /path/to/object
例如:
chcon -t important_file_t /var/important_file
3. 配置 SELinux 策略:
定义新类型:
如果没有现成的安全上下文类型适合你的需求,你可以使用 semanage 命令定义新类型。
semanage fcontext -a -t custom_type /path/to/object
为主体和客体分配类型:
使用 semanage 或 seinfo 分配类型给主体和客体。
4. 控制访问:
使用 allow 或 neverallow 来配置 SELinux 策略,以确保只有具有特定安全上下文的主体才能访问带有安全标记的资源。
allow subject_type target_type:object_class { permissions };
例如:
allow httpd_t important_file_t:file { read getattr open };
这允许 httpd_t 类型的进程读取、获取属性和打开 important_file_t 类型的文件。
5. 验证和调试:
在进行实际应用之前,验证和调试 SELinux 策略。使用 audit2allow 来查看和生成 SELinux 规则,以确保它们满足你的安全需求。
audit2allow -a
6. 重启服务或进程:
在修改 SELinux 策略后,可能需要重新启动服务或进程以使更改生效。
systemctl restart httpd
这些步骤提供了一个基本框架,具体的 SELinux 配置可能会因系统和需求而异。在应用更改之前,请在测试环境中仔细评估并验证 SELinux 策略。
三·安全审计
a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
默认情况centos7会开启rsyslog
systemctl status rsyslog #查看审计是否开启,开启应该是active(running状态)
systemctl start rsyslog #开启审计进程
systemctl status auditd #查看审计守护进程是否开启
ps -ef | grep auditd #查看审计守护进程是否开启
auditctl -s #查看audit模块是否开启(第一行的enbale1代表开启0代表关闭)
打开审计规则配置文件:
vim /etc/audit/audit.rules
在文件中添加适当的审计规则。以下是一个示例,用于监控每个用户的登录事件和命令执行:
# 监控每个用户的登录事件
-w /var/log/secure -p wa -k login
# 监控每个用户执行的命令
-a exit,always -F arch=b64 -S execve -k cmd_exec
-w: 监控文件或目录。
/var/log/secure: 被监控的文件,这里是登录事件的日志文件。
-p wa: 设置监控规则的权限(写入和属性更改)。
-k login: 为此规则定义的键值标签。
图9(rsyslog状态)
图10(auditd审计守护进程)
b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;
tail -20/var/log/audit/audit.log #查看最近20行的日志包含消息
c) 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
1·查看审计文件权限
ls -l /var/log/audit #查看审计文件权限
ls -l /var/log #查看目录权限
#文件可以有读取权限,但不允许有写入权限。
2·日志保存足够180天
vim /etc/logrotate.conf #进入日志配置文件
/var/log/syslog {
rotate 180
maxage 180
#rotate 180: 保留 180 个旧日志文件;maxage 180: 删除旧于 180 天的日志文件。
}
3·日志备份
建议手动或者使用rsyslog的方式进行备份到其他服务器
d) 应对审计进程进行保护,防止未经授权的中断。
使用普通用户无法关闭审计进程,审计进程需要root关闭
图11
四·入侵防范
a)应遵循最小安装的原则,仅安装需要的组件和应用程序;
此项不符合仅需将不需要的组件删除即可
rpm -e package_name #卸载指定的包
yum remove package_name #卸载指定的包(使用yum的方式)
b) 应关闭不需要的系统服务、默认共享和高危端口;
此项不符合仅需将高危服务关闭即可
systemctl stop server_name #关闭一个服务
c) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;
vim /etc/ssh/sshd_config #进入ssh配置文件
AllowUsers username@allowed_ip #找到或添加此项(username: 替换为你系统上的实际用户名。
allowed_ip: 替换为允许连接的 IP 地址。)
AllowUsers john@192.168.1.100 #只允许用户john从IP地址 192.168.1.100进行SSH连接
systemctl restart sshd #重启使配置生效
d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;
不适用
e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;
使用安全厂商的工具定期扫描,发现漏洞后及时修复(漏扫工具的特征库及时升级)。
f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。
建议安装安全软件或者在网络节点处部署网络安全产品(防病毒库及时升级)。
五·恶意代码防范
a)应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。
部署安全防毒软件(ClamAV;Sophos Anti-Virus for Linux等),及时升级病毒库,并查看是否能有效阻断。
六·可信验证
a)可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证, 并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证 结果形成审计记录送至安全管理中心。
需要部署具有可信的设备(可暂不考虑)
七·数据完整性
a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;
如此项不符合将传输协议换成ssh协议,linux一般使用ssh为符合
b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。
建议使用国家密码局认证的算法如:SM3,SM9,SM4等算法。
$1$ 表示 MD5、$5$ 表示 SHA-256、$6$ 表示 SHA-512、$2a$ 和 $2y$表示Blowfish算法。
八、数据保密性
a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;
如此项不符合将传输协议换成ssh协议,linux一般使用ssh为符合
b) 应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。
建议使用国家密码局认证的算法如:SM3,SM9,SM4等算法。
九·数据备份恢复
a)应提供重要数据的本地数据备份与恢复功能;
使用 tar 命令进行备份和恢复:
sudo tar -czvf backup.tar.gz /path/to/data
backup.tar.gz 是你的备份文件名。
/path/to/data 是要备份的数据路径。
恢复:
sudo tar -xzvf backup.tar.gz -C /path/to/restore
backup.tar.gz 是你的备份文件名。
/path/to/restore 是要恢复数据的路径。
b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
#安装依赖工具:
sudo yum install inotify-tools rsync
#创建备份脚本(backup.sh):
source_path="/path/to/source"
destination_sftp="user@remote_server:/path/to/backup"
inotifywait -m -r -e close_write --format "%w%f" "$source_path" | while read file
do
rsync -av --relative -e "ssh -p 22" "$file" "$destination_sftp"
done
#source_path 是要备份的源目录。
#destination_sftp 是远程 SFTP 服务器地址,包括用户名、远程服务器地址、备份目标路径。
#保存并设置脚本执行权限:
chmod +x backup.sh
运行备份脚本:
./backup.sh
#这将启动 inotifywait 监控源目录,并在文件写入完成后触发 rsync 通过 SFTP 上传到远程服务器。
crontab -e
*/5 * * * * rsync -avz --delete --progress /本地目录/ 用户名@远程服务器IP:/远程目录/
#这个例子表示每 5 分钟执行一次备份任务。您可以根据需要调整时间间隔。
c)应提供重要数据处理系统的热冗余,保证系统的高可用性。
建议采用双机部署当一台服务器down机时另一台可以保证系统的连续运行
十·剩余信息保护
a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;
如果此项不符合那么将记住账户名密码的选项取消,重新登录时需要输入账户名密码
b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。
应核查相关配置信息或系统设计文档,敏感数据所在的存储空间被释放或重新分配给其他用户前是否得到完全清除。
十一、个人信息保护
a) 应仅采集和保存业务必需的用户个人信息;
1、应核查采集的用户个人信息是否是业务应用必须的;
2、应核查是否制定了相关用户个人信息保护的管理制度和流程。
b) 应禁止未授权访问和非法使用用户个人信息;
1、应核查是否采用技术措施限制对用户个人信息的访问和使用;
2、应核查是否制定了有关用户个人信息保护的管理制度和流程;