等保三级整改加固之centos7系统

[TOC]

centos7系统

1.身份鉴别

  • 1.1 [高风险] 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换

参考:华为云-加固指导-账户口令阿里云-Linux等保2.0三级检查规则说明

#.1.账户口令安全符合要求
cp -p /etc/login.defs /bak.login.defs.`date +%Y%m%d%H%M%s`
sed -i "s/#PASS_WARN_AGE/PASS_WARN_AGE/" /etc/login.defs
sed -i "s/#PASS_MAX_DAYS/PASS_MAX_DAYS/" /etc/login.defs
sed -i "s/#PASS_MIN_LEN/PASS_MIN_LEN/" /etc/login.defs
sed -i "s/#PASS_MIN_DAYS/PASS_MIN_DAYS/" /etc/login.defs

sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 14/g' /etc/login.defs
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g' /etc/login.defs
sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN 8/g' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/g' /etc/login.defs
cat /etc/login.defs | grep "^PASS"

#.2.通过pam模块配置密码复杂度, system-auth 优先级高于 login.def
cp -p /etc/pam.d/system-auth /bak.system-auth.`date +%Y%m%d%H%M%s`
sed -i '/^auth/d' /etc/pam.d/system-auth
sed -i '/^account/d' /etc/pam.d/system-auth
sed -i '/^password/d' /etc/pam.d/system-auth

echo "auth        required      pam_env.so" >> /etc/pam.d/system-auth
echo "auth        required      pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=300" >> /etc/pam.d/system-auth
echo "auth        sufficient    pam_fprintd.so" >> /etc/pam.d/system-auth
echo "auth        sufficient    pam_unix.so nullok try_first_pass" >> /etc/pam.d/system-auth
echo "auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=300" >> /etc/pam.d/system-auth
echo "auth        sufficient    pam_faillock.so authsucc audit deny=3 even_deny_root unlock_time=300" >> /etc/pam.d/system-auth
echo "auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success" >> /etc/pam.d/system-auth
echo "auth        required      pam_deny.so" >> /etc/pam.d/system-auth
echo "account     required      pam_unix.so" >> /etc/pam.d/system-auth
echo "account     required      pam_faillock.so" >> /etc/pam.d/system-auth
echo "account     sufficient    pam_localuser.so" >> /etc/pam.d/system-auth
echo "account     sufficient    pam_succeed_if.so uid < 1000 quiet" >> /etc/pam.d/system-auth
echo "account     required      pam_permit.so" >> /etc/pam.d/system-auth
echo "password    requisite     pam_pwquality.so minlen=8 minclass=3 enforce_for_root try_first_pass local_users_only retry=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1" >> /etc/pam.d/system-auth
echo "password    required      pam_pwhistory.so use_authtok remember=5 enforce_for_root" >> /etc/pam.d/system-auth
echo "password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok" >> /etc/pam.d/system-auth
echo "password    required      pam_deny.so" >> /etc/pam.d/system-auth
cat /etc/pam.d/system-auth | egrep "(^auth|^account|^password)"
  • 1.2 [高风险] 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施
#.1.设置定时自动登出
cp -p /etc/profile /bak.profile.`date +%Y%m%d%H%M%s`
sed -i '/^TMOUT/d' /etc/profile
echo "TMOUT=499" >> /etc/profile
echo "export TMOUT" >> /etc/profile
source /etc/profile
export | grep TMOUT

#.2.设置远程SSH登录超时:15分钟
cp -p /etc/ssh/sshd_config /bak.sshd_config.`date +%Y%m%d%H%M%s`
sed -i "s/#ClientAliveInterval/ClientAliveInterval/" /etc/ssh/sshd_config
sed -i "s/#ClientAliveCountMax/ClientAliveCountMax/" /etc/ssh/sshd_config
sed -i 's/^ClientAliveInterval.*/ClientAliveInterval=60/g' /etc/ssh/sshd_config
sed -i 's/^ClientAliveCountMax.*/ClientAliveCountMax=15/g' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | egrep "(ClientAliveInterval|ClientAliveCountMax)"
systemctl restart sshd.service
  • 1.3 当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听
#.1.启用sshd服务
yum install -y -q openssh-server > /dev/null
systemctl enable -q sshd; systemctl start -q sshd;
systemctl status sshd.service | grep Active
systemctl list-unit-files | grep "sshd.service"

#.2.禁用telnet服务
systemctl stop -q telnet.socket; systemctl disable -q telnet.socket;
systemctl status telnet.socket | grep Active
rpm -e telnet-server --nodeps
systemctl list-unit-files | grep "telnet.socket"
  • 1.4 [中风险] 应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现
#.可以考虑使用堡垒机进行机器的远程管理,并使用堡垒机上提供的多因子认证功能

2.访问控制

  • 2.1 应对登录的用户分配账户和权限
#.1.将非登录用户的Shell 设为 /sbin/nologin
usermod -s /sbin/nologin sync
usermod -s /sbin/nologin shutdown
usermod -s /sbin/nologin halt

#.2.查看当前账户情况
cat /etc/passwd | grep -v nologin
cat /etc/shadow
cat /etc/group

#.3.禁止远程所有用户无密码登录
if [ -f "/etc/hosts.equiv" ]; then cp -p /etc/hosts.equiv /bak.hosts.equiv.`date +%Y%m%d%H%M%s`; fi
if [ -f "/etc/hosts.equiv" ]; then rm -f /etc/hosts.equiv; fi

#.4.创建其他root权限账号之后,再限制root账户登录(确认 PermitRootLogin 为 no),否则有风险
# cp -p /etc/ssh/sshd_config /bak.sshd_config.`date +%Y%m%d%H%M%s`
# sed -i "s/#PermitRootLogin/PermitRootLogin/" /etc/ssh/sshd_config
# sed -i 's/^PermitRootLogin.*/PermitRootLogin no/g' /etc/ssh/sshd_config
# systemctl restart sshd.service
cat /etc/ssh/sshd_config | grep PermitRootLogin
  • 2.2 应重命名或删除默认账户,修改默认账户的默认口令
#.1.确认root账户是否禁用或重命名,或已修改成复杂口令
#.2.如果担心对于root账号的操作会造成不良影响,在设置三权分立的管理员账号后,将root账号仅作为账号管理使用应该也是可以的
  • 2.3 应及时删除或停用多余的、过期的账户,避免共享账户的存在
#.1.根据如下返回结果,确认并禁用不用的账号
cat /etc/passwd | grep -v nologin | grep -v "sync\|shutdown\|halt" | awk -F: '{print $1}'

#.2.检查是否存在空口令的账号
awk -F: '($2 == "") {print}' /etc/shadow
  • 2.4 [中风险] 应授予管理用户所需的最小权限,实现管理用户的权限分离
#.1.系统管理员:用于管理整个系统,但无审计管理的权限,不可威胁到root用户。注:将root作为系统管理员应该也是可以的
cat /etc/passwd | grep system_admin || useradd system_admin -g root -d /home/system_admin -s /bin/bash
echo 'tB3Ru2udZ2n4x_bd' | passwd system_admin --stdin
cat /etc/sudoers | grep system_admin || echo "system_admin ALL=NOPASSWD:ALL" >> /etc/sudoers

#.2.安全管理员:负责各类安全策略的制定与落实
cat /etc/group | grep security_admin || groupadd security_admin
cat /etc/passwd | grep security_admin || useradd security_admin -g security_admin -d /home/security_admin -s /bin/bash
echo 'MA6RuouuZZn4x_Hd' | passwd security_admin --stdin

#.3.审计管理员:负责对系统审计方面的管理
cat /etc/group | grep audit_admin || groupadd audit_admin
cat /etc/passwd | grep audit_admin || useradd audit_admin -g audit_admin -d /home/audit_admin -s /bin/bash
echo 'cf_rB1NKCzbaQuPH' | passwd audit_admin --stdin
  • 2.5 应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访间规则
#.通常不用处理
  • 2.6 访间控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级
#.通常不用处理
  • 2.7 [低风险] 应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问
#.建议启用SELinux(centos7默认enabled),可能会影响到一些应用程序或者服务,比如 rabbitmq则需要禁用selinux
#.考虑到此控制项为 低风险,不建议改动

3.安全审计

  • 3.1 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计
#.1.安装并确认审计进程正常运行
yum install -y -q rsyslog audit > /dev/null
systemctl enable -q rsyslog; systemctl start -q rsyslog;
systemctl enable -q auditd; systemctl start -q auditd;
systemctl status rsyslog.service | grep Active
systemctl status auditd.service | grep Active
  • 3.2 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息
#.1.审计记录通过auditd产生,符合格式要求
tail -n10 /var/log/audit/audit.log
tail -n10 /var/log/messages
  • 3.3 [高风险] 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等
#.1.保证系统时钟与北京时间保持一致
yum install -y -q ntp ntpdate > /dev/null
if [ -f "/usr/sbin/ntpdate" ]; then /usr/sbin/ntpdate -u ntp.aliyun.com; fi
timedatectl set-timezone Asia/Shanghai
/usr/bin/ls -l /etc/localtime

#.2.确认日志保存六个月
cp -p /etc/logrotate.conf /bak.logrotate.conf.`date +%Y%m%d%H%M%s`
sed -i "s/#weekly/weekly/" /etc/logrotate.conf
sed -i "s/#rotate/rotate/" /etc/logrotate.conf
sed -i 's/^weekly/monthly/g' /etc/logrotate.conf
cat /etc/logrotate.conf | grep "^monthly" || echo "monthly" >> /etc/logrotate.conf
sed -i 's/^rotate.*/rotate=6/g' /etc/logrotate.conf
cat /etc/logrotate.conf | egrep "(^weekly|^monthly|^rotate)"

#.3.若日志保存在本机,建议定期备份
cp /var/log/messages /bak.messages.`date +%Y%m%d%H%M%s`
cp /var/log/secure /bak.secure.`date +%Y%m%d%H%M%s`
cp /var/log/audit/audit.log /bak.audit.log.`date +%Y%m%d%H%M%s`
  • 3.4 应对审计进程进行保护,防止未经授权的中断
#.在设置审计管理员账号后,确保只有审计管理员才有能力终止审计进程(auditd和rsyslog)

4.入侵防范

  • 4.1 应遵循最小安装的原则,仅安装需要的组件和应用程序
#.1.此项检查主观性强,建议自行进行排查,确保服务器上未安装与所提供服务无关的程序和组件
yum list installed

#.2.安装必要的服务
yum install -y -q ntp ntpdate zip unzip net-tools dos2unix > /dev/null
yum install -y -q audit chrony dmidecode psacct > /dev/null
rpm -qa | egrep "(^audit|^chrony|^dmidecode|^psacct)"

#.3.启用必要的服务
systemctl enable -q sshd; systemctl start -q sshd;
systemctl enable -q auditd; systemctl start -q auditd;
systemctl enable -q ntpd; systemctl start -q ntpd;
systemctl enable -q chronyd; systemctl start -q chronyd;
systemctl list-unit-files | egrep "(^sshd.service|^auditd.service|^ntpd.service|^chronyd.service)"
  • 4.2 应关闭不需要的系统服务、默认共享和高危端口
#.1.关闭不必要的服务
systemctl mask -q bluetooth.target;
systemctl mask -q telnet.socket;
systemctl stop -q xinetd; systemctl disable -q xinetd;
systemctl stop -q snmpd; systemctl disable -q snmpd;
systemctl list-unit-files | egrep "(^bluetooth.target|^telnet.socket|^xinetd.service|^snmpd.service)"

#.2.查看已安装的服务
chkconfig --list
systemctl list-unit-files | grep enabled

#.3.确认未安装或已关闭samba服务
systemctl stop smb
systemctl disable smb
num=`rpm -qa | grep samba`; for i in $num; do rpm -e $i --nodeps; done
netstat -lnpt | grep smbd

#.4.查看已监听的端口
netstat -lnpt
  • 4.3 [中风险] 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制
#.1.访谈网络防火墙、堡垒机有无限制,建议对通过ssh接入的终端地址进行限制,只配置跳板机/堡垒机的IP即可

#.2.查看本机防火墙
iptables -nL

#.3.查看ssh远程登录服务器的白名单
cat /etc/hosts.allow

#.4.查看ssh远程登录服务器的黑名单
cat /etc/hosts.deny
  • 4.4 [不适用] 应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求
  • 4.5 应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞
#.1.预测评会对服务器进行扫描,如果扫描发现高危漏洞,后续需要及时修复,查看补丁:
rpm -qa | grep patch
  • 4.6 [高风险] 应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警
#.建议安装开源的入侵检测软件,例如免费的Snort即可

5.恶意代码防范

  • 5.1 [高风险] 应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断
#.建议安装诸如ClamAV之类的杀毒软件

6.可信验证

  • 6.1 [中风险] 可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证
#.翻译过来就是:购买可信硬件并部署

7.数据完整性

  • 7.1 应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等
#.1.确认已启动sshd服务
ps -ef | grep -v grep | grep sshd

#.2.确认已禁用telnet服务
ps -ef | grep -v grep | grep telnet
  • 7.2 [中风险] 应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重 要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等
#.访谈并核查是否安装第三方主机防护软件

8.数据保密性

  • 8.1 应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据 和重要个人信息等
#.使用SSH保证重要数据在传输过程中的保密性
  • 8.2 应采用密码技术保证重要数据在存储过程中的保密性,包括但不限千鉴别数据、重要业务数据 和重要个人信息等
#.1.查看 /etc/login.defs,确认已配置 SHA512算法
cat /etc/login.defs | grep ENCRYPT

#.2.查看 /etc/pam.d/system-auth,确认已配置 SHA512算法
cat /etc/pam.d/system-auth | grep "password" | grep "pam_unix.so"

#.3.查看 /etc/libuser.conf,确认已配置 SHA512算法
cp -p /etc/libuser.conf /bak.libuser.conf.`date +%Y%m%d%H%M%s`
sed -i 's/^crypt_style.*/crypt_style=sha512/g' /etc/libuser.conf
cat /etc/libuser.conf | grep crypt_style

9.数据备份恢复

  • 9.1 [中风险] 应提供重要数据的本地数据备份与恢复功能
#.1.建议在每次更改中间件的配置文件之前,对配置文件进行备份
#.2.定期进行备份文件的恢复测试,并留存相关记录,补一份也可以
  • 9.2 应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地
  • 9.3 应提供重要数据处理系统的热冗余,保证系统的高可用性
#.建议对中间件配置集群、心跳检测、负载均衡等

10.剩余信息保护

  • 10.1 应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除
  • 10.2 [高风险] 应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除
#.1.建议在/etc/bashrc中设置HISTSIZE为0,禁止记录使用过的历史命令
cp -p /etc/bashrc /bak.bashrc.`date +%Y%m%d%H%M%s`
sed -i "s/#HISTSIZE/HISTSIZE/" /etc/bashrc
sed -i 's/^HISTSIZE.*/HISTSIZE=0/g' /etc/bashrc
source /etc/bashrc
export | grep HISTSIZE

#.2.如果profile有设置也要修改
cp -p /etc/profile /bak.profile.`date +%Y%m%d%H%M%s`
sed -i "s/#HISTSIZE/HISTSIZE/" /etc/profile
sed -i 's/^HISTSIZE.*/HISTSIZE=0/g' /etc/profile
source /etc/profile
export | grep HISTSIZE

基线检查整改参考

  • 启用开机启动
chmod +x /etc/rc.d/rc.local
systemctl enable -q rc-local.service
systemctl start -q rc-local
systemctl status rc-local | grep Active
  • 禁用selinux及防火墙
#.1.禁用selinux
cp -p /etc/selinux/config /bak.selinux.config.`date +%Y%m%d%H%M%s`
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

#.2.禁用firewalld
/usr/sbin/iptables -F
systemctl stop -q firewalld; systemctl disable -q firewalld;
systemctl status firewalld | grep Active
  • 启用ip-forward
#.1.启用ip-forward
cp -p /etc/sysctl.conf /bak.sysctl.conf.`date +%Y%m%d%H%M%s`
sed -i 's/^net.ipv4.ip_forward.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
cat /etc/sysctl.conf | grep "^net.ipv4.ip_forward" > /dev/null || echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
/sbin/sysctl -p /etc/sysctl.conf > /dev/null
/sbin/sysctl -a | grep "net.ipv4.ip_forward"
Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2024-12-31 15:36:03

results matching ""

    No results matching ""