├── reports └── .gitkeep ├── baseline ├── version.md ├── 1_初始部署 │ ├── list.md │ ├── 1.2_软件 │ │ ├── 1.2.24_避免启用DHCP服务.md │ │ ├── 1.2.21_避免启用DNS服务.md │ │ ├── 1.2.11_禁止安装打印服务.md │ │ ├── 1.2.22_避免启用NFS服务.md │ │ ├── 1.2.23_避免启用RPC服务.md │ │ ├── 1.2.5_禁止安装python2.md │ │ ├── 1.2.18_避免安装X Window系统.md │ │ ├── 1.2.20_避免安装samba服务.md │ │ ├── 1.2.13_禁止安装NIS客户端.md │ │ ├── 1.2.12_禁止安装NIS服务端.md │ │ ├── 1.2.3_禁止安装telnet客户端.md │ │ ├── 1.2.7_禁止启用debug-shell服务.md │ │ ├── 1.2.1_禁止安装FTP客户端.md │ │ ├── 1.2.10_禁止安装LDAP服务.md │ │ ├── 1.2.14_禁止安装LDAP客户端.md │ │ ├── 1.2.19_避免安装HTTP服务.md │ │ ├── 1.2.4_禁止安装不安全的SNMP协议版本.md │ │ ├── 1.2.2_禁止安装TFTP客户端.md │ │ ├── 1.2.8_禁止安装rsync服务.md │ │ ├── 1.2.9_禁止安装avahi服务.md │ │ ├── 1.2.16_禁止安装调测类工具.md │ │ └── 1.2.15_禁止安装网络嗅探类工具.md │ └── 1.1_文件系统 │ │ ├── 1.1.13_确保删除文件不必要的SUID和SGID位.md │ │ ├── 1.1.4_确保全局可写目录已设置sticky位.md │ │ ├── 1.1.10_确保无可执行文件的分区以noexec方式挂载.md │ │ ├── 1.1.17_避免使用USB存储.md │ │ ├── 1.1.11_确保可移动设备分区以noexec、nodev方式挂载.md │ │ ├── 1.1.8_确保无需修改的分区以只读方式挂载.md │ │ ├── 1.1.3_禁止存在隐藏的可执行文件.md │ │ ├── 1.1.1_禁止存在无属主或属组的文件或目录.md │ │ ├── 1.1.6_禁止存在全局可写的文件.md │ │ ├── 1.1.19_确保LD_LIBRARY_PATH变量定义正确.md │ │ ├── 1.1.18_应当分区管理硬盘数据.md │ │ ├── 1.1.2_禁止存在空链接文件.md │ │ └── 1.1.20_确保用户PATH变量被严格定义.md ├── 4_日志审计 │ ├── list.md │ ├── 4.2_Rsyslog │ │ ├── 4.2.3_确保cron服务日志已记录.md │ │ ├── 4.2.2_确保系统认证相关事件日志已记录.md │ │ ├── 4.2.6_确保rsyslog转储journald日志已配置.md │ │ ├── 4.2.4_应当正确配置rsyslog默认文件权限.md │ │ ├── 4.2.1_确保rsyslog服务已启用.md │ │ └── 4.2.8_应当配置远程日志服务器.md │ └── 4.1_Audit │ │ ├── 4.1.11_确保日志大小限制配置正确.md │ │ ├── 4.1.3_应当配置登录审计规则.md │ │ ├── 4.1.10_避免使用auditctl设置Auditd规则.md │ │ ├── 4.1.16_应当配置SELinux审计规则.md │ │ ├── 4.1.1_确保auditd审计已启用.md │ │ ├── 4.1.13_应当配置sudoers审计规则.md │ │ ├── 4.1.14_应当配置会话审计规则.md │ │ ├── 4.1.7_应当配置管理员特权操作审计规则.md │ │ ├── 4.1.4_应当配置账号信息修改审计规则.md │ │ ├── 4.1.2_确保审计日志rotate已启用.md │ │ └── 4.1.21_应当配置文件系统挂载审计规则.md ├── list.md ├── 3_运行和服务 │ ├── list.md │ ├── 3.5_内核 │ │ ├── 3.5.25_应当开启内核模块签名.md │ │ ├── 3.5.2_确保dmesg访问权限配置正确.md │ │ ├── 3.5.1_确保内核ASLR已启用.md │ │ ├── 3.5.26_禁止开启kexec功能.md │ │ ├── 3.5.27_确保内核触发错误后直接退出.md │ │ ├── 3.5.9_应当忽略所有ICMP请求.md │ │ ├── 3.5.17_确保TIME_WAIT TCP协议等待时间已配置.md │ │ ├── 3.5.24_应当开启BPF加固功能.md │ │ ├── 3.5.3_确保正确配置内核参数kptr_restrict.md │ │ ├── 3.5.16_避免开启tcp_timestamps.md │ │ ├── 3.5.18_应当正确配置SYN_RECV状态队列数量.md │ │ ├── 3.5.21_禁止使用SysRq键.md │ │ ├── 3.5.14_确保TCP-SYN cookie保护已启用.md │ │ ├── 3.5.6_禁止系统响应ICMP广播报文.md │ │ ├── 3.5.10_确保丢弃伪造的ICMP报文,不记录日志.md │ │ ├── 3.5.23_应当启用seccomp.md │ │ ├── 3.5.15_应当记录仿冒、源路由以及重定向报文日志.md │ │ ├── 3.5.19_禁止使用ARP代理.md │ │ ├── 3.5.4_确保内核SMAP已启用.md │ │ ├── 3.5.5_确保内核SMEP已启用.md │ │ ├── 3.5.8_禁止转发ICMP重定向报文.md │ │ └── 3.5.11_确保反向地址过滤已启用.md │ ├── 3.3_SSH │ │ ├── 3.3.14_禁止使用X11 Forwarding.md │ │ ├── 3.3.15_应当正确配置MaxAuthTries.md │ │ ├── 3.3.16_禁止使用PermitUserEnvironment.md │ │ ├── 3.3.17_应当正确配置LoginGraceTime.md │ │ ├── 3.3.5_确保PAM认证使能.md │ │ ├── 3.3.1_确保SSH服务版本配置正确.md │ │ ├── 3.3.10_应当正确配置SSH服务日志级别.md │ │ ├── 3.3.19_禁止SSH服务预设置known_hosts.md │ │ ├── 3.3.11_应当正确配置SSH服务接口.md │ │ ├── 3.3.12_应当正确配置SSH并发未认证连接数.md │ │ ├── 3.3.18_禁止SSH服务预设置authorized_keys.md │ │ ├── 3.3.20_禁止SSH服务配置弃用的选项.md │ │ ├── 3.3.13_应当正确配置单个SSH连接允许的并发会话数.md │ │ ├── 3.3.9_确保禁用root用户通过SSH登录.md │ │ ├── 3.3.4_确保用户认证密钥算法配置正确.md │ │ ├── 3.3.6_确保SSH服务MACs算法配置正确.md │ │ ├── 3.3.8_禁止SSH服务配置加密算法覆盖策略.md │ │ ├── 3.3.3_确保SSH密钥交换算法配置正确.md │ │ ├── 3.3.21_确保禁用SSH的TCP转发功能.md │ │ ├── 3.3.7_确保SSH服务密码算法配置正确.md │ │ └── 3.3.22_应当正确配置认证黑白名单.md │ ├── 3.1_网络 │ │ └── 3.1.2_避免使用无线网络.md │ ├── 3.4_定时任务 │ │ ├── 3.4.2_确保cron守护进程正常启用.md │ │ └── 3.4.1_确保crontab执行的脚本非属主用户不可写.md │ └── 3.2_防火墙 │ │ ├── 3.2.3_应当确保网络接口绑定正确区域.md │ │ ├── 3.2.2_应当配置正确的默认区域.md │ │ ├── 3.2.11_应当启用nftables服务.md │ │ ├── 3.2.14_应当正确配置nftables input策略.md │ │ ├── 3.2.15_应当正确配置nftables output策略.md │ │ └── 3.2.1_应当启用firewalld服务.md └── 2_安全访问 │ ├── list.md │ ├── 2.2_口令 │ ├── 2.2.8_禁止空口令登录.md │ ├── 2.2.11_确保账号在首次登录时强制修改口令.md │ ├── 2.2.10_确保单用户模式已设置口令保护.md │ └── 2.2.3_确保用户修改自身口令时需验证旧口令.md │ ├── 2.1_账户 │ ├── 2.1.9_确保账号名唯一.md │ ├── 2.1.11_确保组名唯一.md │ ├── 2.1.8_确保UID唯一.md │ ├── 2.1.10_确保GID唯一.md │ ├── 2.1.14_避免Home目录下存在.netrc文件.md │ ├── 2.1.13_避免Home目录下存在.forward文件.md │ ├── 2.1.2_禁止存在不使用的账号.md │ ├── 2.1.12_应当正确设置账号有效期.md │ ├── 2.1.4_禁止存在UID为0的非root账号.md │ ├── 2.1.7_确保_etc_passwd中的组都存在.md │ └── 2.1.6_确保账号拥有自己的Home目录.md │ ├── 2.4_访问控制 │ ├── 2.4.4_确保su受限使用.md │ ├── 2.4.8_确保su命令继承用户环境变量不会引入提权.md │ ├── 2.4.10_避免使用标签为unconfined_service_t的程序.md │ ├── 2.4.6_确保sudoers不能配置低权限用户可写的脚本.md │ ├── 2.4.5_确保普通用户通过sudo运行特权程序.md │ ├── 2.4.2_应当启用enforce模式.md │ ├── 2.4.1_限制历史命令记录数量.md │ ├── 2.4.7_确保普通用户不能借助pkexec配置提权root.md │ └── 2.4.3_应当正确配置SELinux策略.md │ ├── 2.6_数据安全 │ ├── 2.6.1_应当启用haveged服务.md │ └── 2.6.2_应当设置全局加解密策略配置不低于DEFAULT.md │ └── 2.3_身份认证 │ ├── 2.3.2_确保会话超时时间设置正确.md │ ├── 2.3.4_应当正确配置Banner路径.md │ └── 2.3.3_确保Warning Banners包含合理的信息.md ├── scripts ├── fixes │ ├── 1 │ │ └── 1.2 │ │ │ ├── 1.2.1.sh │ │ │ ├── 1.2.2.sh │ │ │ ├── 1.2.4.sh │ │ │ ├── 1.2.9.sh │ │ │ ├── 1.2.11.sh │ │ │ ├── 1.2.3.sh │ │ │ ├── 1.2.5.sh │ │ │ ├── 1.2.21.sh │ │ │ ├── 1.2.24.sh │ │ │ ├── 1.2.23.sh │ │ │ ├── 1.2.8.sh │ │ │ ├── 1.2.12.sh │ │ │ ├── 1.2.22.sh │ │ │ ├── 1.2.10.sh │ │ │ ├── 1.2.13.sh │ │ │ ├── 1.2.7.sh │ │ │ └── 1.2.14.sh │ ├── 2 │ │ └── 2.1 │ │ │ ├── 2.1.12.sh │ │ │ └── 2.1.14.sh │ ├── 3 │ │ ├── 3.2 │ │ │ ├── 3.2.2.sh │ │ │ ├── 3.2.4.sh │ │ │ ├── 3.2.5.sh │ │ │ ├── 3.2.6.sh │ │ │ ├── 3.2.7.sh │ │ │ ├── 3.2.8.sh │ │ │ ├── 3.2.9.sh │ │ │ ├── 3.2.10.sh │ │ │ ├── 3.2.11.sh │ │ │ ├── 3.2.12.sh │ │ │ ├── 3.2.13.sh │ │ │ ├── 3.2.14.sh │ │ │ ├── 3.2.15.sh │ │ │ └── 3.2.16.sh │ │ ├── 3.4 │ │ │ ├── 3.4.1.sh │ │ │ ├── 3.4.2.sh │ │ │ └── 3.4.3.sh │ │ ├── 3.5 │ │ │ ├── 3.5.1.sh │ │ │ ├── 3.5.2.sh │ │ │ ├── 3.5.3.sh │ │ │ ├── 3.5.4.sh │ │ │ ├── 3.5.5.sh │ │ │ ├── 3.5.6.sh │ │ │ ├── 3.5.7.sh │ │ │ ├── 3.5.8.sh │ │ │ ├── 3.5.9.sh │ │ │ ├── 3.5.10.sh │ │ │ ├── 3.5.11.sh │ │ │ ├── 3.5.12.sh │ │ │ ├── 3.5.13.sh │ │ │ ├── 3.5.14.sh │ │ │ ├── 3.5.15.sh │ │ │ ├── 3.5.16.sh │ │ │ ├── 3.5.17.sh │ │ │ ├── 3.5.18.sh │ │ │ ├── 3.5.19.sh │ │ │ ├── 3.5.20.sh │ │ │ ├── 3.5.21.sh │ │ │ ├── 3.5.22.sh │ │ │ └── 3.5.23.sh │ │ ├── 3.6 │ │ │ ├── 3.6.1.sh │ │ │ └── 3.6.2.sh │ │ └── 3.3 │ │ │ ├── 3.3.11.sh │ │ │ ├── 3.3.12.sh │ │ │ ├── 3.3.13.sh │ │ │ ├── 3.3.14.sh │ │ │ ├── 3.3.15.sh │ │ │ ├── 3.3.16.sh │ │ │ ├── 3.3.17.sh │ │ │ ├── 3.3.18.sh │ │ │ ├── 3.3.19.sh │ │ │ ├── 3.3.20.sh │ │ │ ├── 3.3.21.sh │ │ │ └── 3.3.22.sh │ └── 4 │ │ ├── 4.1 │ │ ├── 4.1.4.sh │ │ ├── 4.1.5.sh │ │ ├── 4.1.6.sh │ │ ├── 4.1.7.sh │ │ ├── 4.1.8.sh │ │ ├── 4.1.9.sh │ │ ├── 4.1.10.sh │ │ ├── 4.1.11.sh │ │ ├── 4.1.12.sh │ │ ├── 4.1.13.sh │ │ ├── 4.1.14.sh │ │ ├── 4.1.15.sh │ │ ├── 4.1.16.sh │ │ ├── 4.1.17.sh │ │ ├── 4.1.18.sh │ │ ├── 4.1.19.sh │ │ ├── 4.1.20.sh │ │ └── 4.1.21.sh │ │ └── 4.2 │ │ ├── 4.2.1.sh │ │ ├── 4.2.2.sh │ │ ├── 4.2.3.sh │ │ ├── 4.2.4.sh │ │ ├── 4.2.5.sh │ │ ├── 4.2.6.sh │ │ ├── 4.2.7.sh │ │ ├── 4.2.8.sh │ │ └── 4.2.9.sh └── checks │ ├── 1 │ ├── 1.2 │ │ ├── 1.2.2.sh │ │ ├── 1.2.3.sh │ │ ├── 1.2.4.sh │ │ ├── 1.2.5.sh │ │ ├── 1.2.7.sh │ │ ├── 1.2.12.sh │ │ ├── 1.2.13.sh │ │ ├── 1.2.23.sh │ │ ├── 1.2.24.sh │ │ ├── 1.2.1.sh │ │ ├── 1.2.10.sh │ │ ├── 1.2.9.sh │ │ ├── 1.2.19.sh │ │ ├── 1.2.11.sh │ │ ├── 1.2.21.sh │ │ ├── 1.2.14.sh │ │ ├── 1.2.18.sh │ │ ├── 1.2.22.sh │ │ └── 1.2.20.sh │ └── 1.1 │ │ ├── 1.1.6.sh │ │ ├── 1.1.5.sh │ │ └── 1.1.17.sh │ ├── 2 │ ├── 2.1 │ │ └── 2.1.8.sh │ └── 2.4 │ │ ├── 2.4.2.sh │ │ ├── 2.4.4.sh │ │ └── 2.4.10.sh │ ├── 3 │ └── 3.5 │ │ ├── 3.5.25.sh │ │ ├── 3.5.3.sh │ │ ├── 3.5.26.sh │ │ ├── 3.5.24.sh │ │ └── 3.5.27.sh │ └── 4 │ └── 4.2 │ └── 4.2.2.sh └── tools ├── run_fixes.sh └── run_restores.sh /reports/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /baseline/version.md: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.2.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.4.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.5.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.6.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.7.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.8.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.9.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.4/3.4.1.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.4/3.4.2.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.4/3.4.3.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.1.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.2.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.3.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.4.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.5.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.6.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.7.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.8.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.9.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.6/3.6.1.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.6/3.6.2.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.4.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.5.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.6.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.7.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.8.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.9.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.1.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.2.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.3.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.4.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.5.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.6.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.7.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.8.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.2/4.2.9.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/2/2.1/2.1.12.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/2/2.1/2.1.14.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.10.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.11.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.12.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.13.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.14.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.15.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.2/3.2.16.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.11.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.12.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.13.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.14.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.15.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.16.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.17.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.18.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.19.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.20.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.21.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.3/3.3.22.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.10.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.11.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.12.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.13.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.14.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.15.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.16.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.17.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.18.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.19.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.20.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.21.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.22.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/3/3.5/3.5.23.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.10.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.11.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.12.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.13.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.14.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.15.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.16.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.17.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.18.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.19.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.20.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/fixes/4/4.1/4.1.21.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /baseline/1_初始部署/list.md: -------------------------------------------------------------------------------- 1 | 1.1 文件系统 2 | 3 | 1.2 软件 -------------------------------------------------------------------------------- /baseline/4_日志审计/list.md: -------------------------------------------------------------------------------- 1 | 4.1 Audit 2 | 3 | 4.2 Rsyslog -------------------------------------------------------------------------------- /baseline/list.md: -------------------------------------------------------------------------------- 1 | 1 初始部署 2 | 3 | 2 安全访问 4 | 5 | 3 运行和服务 6 | 7 | 4 日志和审计 8 | 9 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/list.md: -------------------------------------------------------------------------------- 1 | 3.1 网络 2 | 3 | 3.2 防火墙 4 | 5 | 3.3 SSH 6 | 7 | 3.4 定时任务 8 | 9 | 3.5 内核 10 | 11 | -------------------------------------------------------------------------------- /baseline/2_安全访问/list.md: -------------------------------------------------------------------------------- 1 | 2.1 账户 2 | 3 | 2.2 口令 4 | 5 | 2.3 身份认证 6 | 7 | 2.4 访问控制 8 | 9 | 2.5 完整性 10 | 11 | 2.6 数据安全 12 | 13 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.24_避免启用DHCP服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.24 避免启用DHCP服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 动态主机配置协议(DHCP)是一项允许为机器动态分配IP地址的服务。 10 | 11 | 除非系统专门设置为充当DHCP Server,否则建议禁用该服务以减少潜在的攻击面。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查是否启动了服务,如果命令返回为disabled,则表示服务未启动: 20 | 21 | ```bash 22 | # systemctl is-enabled dhcpd 23 | disabled 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 对于已安装dhcpd组件的服务器,可以禁用dhcpd服务: 29 | 30 | ```bash 31 | # systemctl --now disable dhcpd 32 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.21_避免启用DNS服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.21 避免启用DNS服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 域名系统(DNS)是一种分层命名系统,它将名称映射到计算机、服务和其它联网资源的IP地址。 10 | 11 | 除非系统被专门指定用作DNS服务器,否则建议禁用DNS Server以减少潜在的攻击面。 12 | 13 | **规则影响:** 14 | 15 | 将无法作为域名服务器提供域名解析服务。 16 | 17 | **检查方法:** 18 | 19 | 检查是否启动了服务,如果命令返回为disable,则表示服务未启动: 20 | 21 | ```bash 22 | # systemctl is-enabled named 23 | disabled 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 对于已安装named组件的服务器,可以禁用named服务: 29 | 30 | ```bash 31 | # systemctl --now disable named 32 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.25_应当开启内核模块签名.md: -------------------------------------------------------------------------------- 1 | ### 3.5.25 应当启动内核模块签名 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 内核模块签名以一定格式在内核模块文件末尾添加签名信息,系统在加载内核模块时检查签名是否与内核中预设的公钥匹配。这样可以验证内核模块文件的真实性和完整性,防止系统加载未经认证的恶意内核模块。 10 | 11 | **规则影响:** 12 | 13 | 无法加载未签名的内核模块。 14 | 15 | **检查方法:** 16 | 17 | 通过检查启动参数检验是否开启内核模块签名,若有返回值则说明未开启,反之则说明开启。 18 | 19 | ```bash 20 | # cat /proc/cmdline | grep -i "module.sig_enforce" 21 | ``` 22 | 23 | **修复方法:** 24 | 25 | 若未开启内核模块签名,需要编辑grub.cfg文件,在启动参数中添加module.sig_enforce选项。 26 | 27 | ```bash 28 | # vim /boot/efi/EFI/openEuler/grub.cfg 29 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.11_禁止安装打印服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.11 禁止安装打印服务 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | CUPS(Common Unix Printing System,Unix通用打印系统),启用该服务的服务器为网络内其他设备提供打印服务。提供CUPS服务会占用系统资源,并扩大攻击面。如果业务场景不需要提供打印服务,则禁止安装打印服务。 10 | 11 | openEuler安装镜像中提供了CUPS相关的安装包,但默认未安装。 12 | 13 | **规则影响:** 14 | 15 | 依赖于CUPS服务的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 检查是否安装了CUPS软件,如果命令返回为空,则表示未安装: 20 | 21 | ```bash 22 | # rpm -qa cups 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 对于已安装CUPS组件的服务器,可以通过yum或dnf命令进行卸载: 28 | 29 | ```bash 30 | # yum remove cups 31 | ``` 32 | 或 33 | ```bash 34 | # dnf remove cups 35 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.2_口令/2.2.8_禁止空口令登录.md: -------------------------------------------------------------------------------- 1 | ### 2.2.8 禁止空口令登录 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 空口令登录是指在用户账号登录时,不输入口令的情况下也能成功登录系统。 10 | 11 | 若允许空口令登录,会增加空口令账号本身被攻击或被用来作为攻击账号的风险。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/ssh/sshd_config中是否配置了禁止空口令登录的字段: 20 | 21 | ```bash 22 | # grep ^PermitEmptyPasswords /etc/ssh/sshd_config | grep no 23 | PermitEmptyPasswords no 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 在/etc/ssh/sshd_config中配置禁止空口令登录,并重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | PermitEmptyPasswords no 33 | # systemctl restart sshd 34 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.2_口令/2.2.11_确保账号在首次登录时强制修改口令.md: -------------------------------------------------------------------------------- 1 | ### 2.2.11 确保账号在首次登录时强制修改口令 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 对于非用户本人设置的口令,如管理员重置的口令,如果在业务环境上没有被及时修改,极易引起低成本的攻击事件,所以要求用户在首次登录账号时强制修改口令。 10 | root口令除外。 11 | 12 | **规则影响:** 13 | 14 | 无 15 | 16 | **检查方法:** 17 | 18 | 检查/etc/shadow文件中指定账号的配置是否正确: 19 | 20 | ```bash 21 | # grep ^test: /etc/shadow 22 | test:!:0:0:90:7:35:: 23 | ``` 24 | 25 | 此处,以冒号“:”分割的第3个字段,如果是0,表示此账号对应口令已被强制设置为过期。 26 | 27 | **修复方法:** 28 | 29 | 管理员在重置账号口令后,通过如下命令可以将该口令立即过期,该账号下次登录时会被要求强制口令修改,此种方式过期的口令不受口令修改有效期(默认35天)的约束(test为举例的账号): 30 | 31 | ```bash 32 | # passwd -e test 33 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.22_避免启用NFS服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.22 避免启用NFS服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 网络文件系统 (NFS) 是 UNIX 环境中最早也是分布最广泛的文件系统之一。它为系统提供了通过网络挂载其他服务器的文件系统的能力。如果系统不导出NFS共享,建议禁用NFS以减少远程攻击面。 10 | 11 | **规则影响:** 12 | 13 | 禁用NFS会影响到系统上依赖NFS的服务和应用程序,以及现有的NFS挂载点。在禁用NFS之前,应确保了解系统上的使用情况,并考虑是否有替代方法来满足文件共享和数据访问的需求。 14 | 15 | **检查方法:** 16 | 17 | 检查是否启动了服务,如果命令返回为disable,则表示服务未启动: 18 | 19 | ```bash 20 | # systemctl is-enabled nfs-server 21 | disabled 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | 对于已安装nfs组件的服务器,可以禁用nfs-server服务: 27 | 28 | ```bash 29 | # systemctl --now disable nfs-server 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.23_避免启用RPC服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.23 避免启用RPC服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | rpcbind服务将远程过程调用(RPC)服务映射到它们侦听的端口。RPC进程在启动时通知rpcbind,注册它们正在侦听的端口以及它们期望服务的RPC程序编号。然后,客户端系统使用特定的RPC程序号联系服务器上的rpcbind。rpcbind服务将客户端重定向到正确的端口号,以便它可以与请求的服务进行通信。 10 | 11 | 如果系统不需要基于 rpc 的服务,建议禁用 rpcbind 以减少远程攻击面。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查是否启动了服务,如果命令返回为disabled,则表示服务未启动: 20 | 21 | ```bash 22 | # systemctl is-enabled rpcbind 23 | disabled 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 对于已安装rpcbind组件的服务器,可以禁用rpcbind服务: 29 | 30 | ```bash 31 | # systemctl --now disable rpcbind 32 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.5_禁止安装python2.md: -------------------------------------------------------------------------------- 1 | ### 1.2.5 禁止安装python2 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | python2 社区已经于2020年1月1日停止维护与改进。继续使用该软件容易扩大系统攻击面,增加系统漏洞和被攻击风险,所以禁止使用python2。若有使用python的诉求,建议使用主流版本以减小安全风险。 10 | 11 | openEuler安装镜像中不提供python2相关软件包。 12 | 13 | **规则影响:** 14 | 15 | 依赖于python2的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 可通过如下命令检查是否安装了python2软件,如果命令返回为空,则表示未安装: 20 | 21 | ```bash 22 | # rpm -qa | grep "python2-" 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 对于已安装python2组件的服务器,可以通过yum或dnf命令进行卸载: 28 | 29 | ```bash 30 | # yum remove python2 31 | ``` 32 | 或 33 | ```bash 34 | # dnf remove python2 35 | ``` 36 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.18_避免安装X Window系统.md: -------------------------------------------------------------------------------- 1 | ### 1.2.18 避免安装X Window系统 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | X Window在Linux系统中提供图形界面供用户登录和操作,通常情况下服务器场景无需图形界面,管理员通过命令行即可对服务器完成配置修改。X Window图形界面扩大了攻击面,不常用或相对小众的图形界面组件可能存在较多的软件缺陷,容易被攻击者利用,进而对系统进行破坏。另外,在无需图形界面的服务器上安装X Window组件,浪费了服务器资源,增加了维护成本 10 | 11 | **规则影响:** 12 | 13 | X Windows相关组件无法使用 14 | 15 | **检查方法:** 16 | 17 | 检查是否安装了X Window相关组件,如果命令返回为空,则表示未安装: 18 | 19 | ```bash 20 | # rpm -qa "xorg-x11" 21 | ``` 22 | 23 | **修复方法:** 24 | 25 | 对于已安装X Window组件的服务器,可以通过yum或dnf命令进行卸载: 26 | 27 | ```bash 28 | # yum remove 29 | 或 30 | # dnf remove 31 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.20_避免安装samba服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.20 避免安装samba服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | samba守护进程允许系统管理员配置Linux系统以与windows桌面共享文件系统和目录。samba将通过服务器信息块(SMB)协议公布文件系统和目录。Windows桌面用户将能够将这些目录和文件系统作为盘符挂载在系统上。 10 | 11 | **规则影响:** 12 | 13 | 与Windows系统进行文件共享或打印共享受限制。 14 | 15 | **检查方法:** 16 | 17 | 可通过如下命令检查是否安装了samba软件,如果命令返回“package samba is not installed”,表示未安装: 18 | 19 | ```bash 20 | # rpm -q "samba" 21 | package samba is not installed 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | 对于已经安装了samba软件的系统,可以通过yum或dnf命令进行卸载: 27 | 28 | ```bash 29 | # yum remove samba 30 | ``` 31 | 或 32 | ```bash 33 | # dnf remove samba 34 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.13_禁止安装NIS客户端.md: -------------------------------------------------------------------------------- 1 | ### 1.2.13 禁止安装NIS客户端 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | NIS(Network Information Service,网络信息服务),以客户端/服务器形式存在,客户端(ypbind)从服务器获取分发的配置信息。NIS服务本质上是一个不安全的服务,容易受到DOS、缓冲区溢出等攻击。如果业务不涉及NIS服务,禁止安装并使用NIS客户端。 10 | 11 | openEuler安装镜像中提供了ypbind安装包,但默认未安装。 12 | 13 | **规则影响:** 14 | 15 | 依赖于NIS服务的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 检查是否安装了ypbind软件,如果命令返回为空,则表示未安装: 20 | 21 | ```bash 22 | # rpm -qa | grep "ypbind" 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 对于已安装ypbind组件的服务器,可以通过yum或dnf命令进行卸载: 28 | 29 | ```bash 30 | # yum remove ypbind 31 | ``` 32 | 或 33 | ```bash 34 | # dnf remove ypbind 35 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.12_禁止安装NIS服务端.md: -------------------------------------------------------------------------------- 1 | ### 1.2.12 禁止安装NIS服务端 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | NIS(Network Information Service,网络信息服务),以客户端/服务器形式存在,客户端(ypbind)从服务器获取分发的配置信息。NIS服务本质上是一个不安全的服务,容易受到DOS、缓冲区溢出等攻击。如果业务不涉及NIS服务,禁止安装NIS服务端。 10 | 11 | openEuler安装镜像中提供了NIS服务端安装包(ypserv),但默认未安装。 12 | 13 | **规则影响:** 14 | 15 | 依赖于NIS服务的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 检查是否安装了ypserv软件,如果命令返回为空,则表示未安装: 20 | 21 | ```bash 22 | # rpm -qa | grep "ypserv" 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 对于已安装ypserv组件的服务器,可以通过yum或dnf命令进行卸载: 28 | 29 | ```bash 30 | # yum remove ypserv 31 | ``` 32 | 或 33 | ```bash 34 | # dnf remove ypserv 35 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.2_确保dmesg访问权限配置正确.md: -------------------------------------------------------------------------------- 1 | ### 3.5.2 确保dmesg访问权限配置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 限制访问 dmesg 信息权限,无特权的用户无法查看系统信息,从而可以避免任何人从系统信息获取敏感信息,进而对系统进行攻击的行为。仅允许具有 CAP_SYSLOG 能力的进程查看内核日志信息。从而控制关键信息的最小权限,保障系统更加安全。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 检查/etc/sysctl.conf文件中是否已经配置相关字段,“kernel.dmesg_restrict=1”表示已经设置dmesg的访问限制: 18 | 19 | ```bash 20 | # grep kernel.dmesg_restrict /etc/sysctl.conf 21 | kernel.dmesg_restrict=1 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | 打开/etc/sysctl.conf文件,设置kernel.dmesg_restrict为1: 27 | 28 | ```bash 29 | # vim /etc/sysctl.conf 30 | kernel.dmesg_restrict=1 31 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.3_禁止安装telnet客户端.md: -------------------------------------------------------------------------------- 1 | ### 1.2.3 禁止安装Telnet客户端 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | Telnet是一种应用层协议,常用于服务器的远程登录、操作控制、系统修改等;Telnet传输数据未被加密,用户名、口令、传输数据等容易被攻击者窃取,所以应禁止安装和使用Telnet客户端工具,可以使用基于ssh协议的客户端工具进行替代。 9 | 10 | **规则影响:** 11 | 12 | 依赖于Telnet服务的程序执行受限制。 13 | 14 | **检查方法:** 15 | 16 | 可通过如下命令检查是否安装了Telnet客户端软件,如果命令返回“package telnet is not installed”,表示未安装: 17 | 18 | ```bash 19 | # rpm -q "telnet" 20 | package telnet is not installed 21 | ``` 22 | 23 | **修复方法:** 24 | 25 | 对于已经安装了Telnet软件的系统,可以通过yum或dnf命令进行卸载: 26 | 27 | ```bash 28 | # yum remove telnet 29 | ``` 30 | 或 31 | ```bash 32 | # dnf remove telnet 33 | ``` 34 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.7_禁止启用debug-shell服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.7 禁止启用debug-shell服务 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | debug-shell 服务主要是用来定位系统引导过程中出现的问题,该服务随systemd安装而被安装。开启debug-shell服务后可以在系统启动过程中,systemd启动阶段按下ctrl + alt + F9,攻击者不需要认证直接进入root shell。该过程安全风险很高,攻击者可以通过篡改数据,执行非法程序等手段破坏系统。 10 | 11 | openEuler默认禁止启动debug-shell服务。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查是否启动了服务,如果命令返回为disable,则表示服务未启动: 20 | 21 | ```bash 22 | # systemctl is-enabled debug-shell 23 | disabled 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 对于已安装debug-shell组件的服务器,可以禁用debug-shell服务: 29 | 30 | ```bash 31 | # systemctl --now disable debug-shell 32 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.9_确保账号名唯一.md: -------------------------------------------------------------------------------- 1 | ### 2.1.9 确保账号名唯一 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 要求在/etc/passwd中涉及到的账号名唯一。如果/etc/passwd中的账号名重复,则实际只有/etc/passwd文件中第一个该账号的UID有效。 10 | 11 | 通常情况下使用useradd等命令添加用户账号,不会存在账号名重复问题,但如果管理员操作失误,直接修改/etc/passwd文件,则可能导致问题。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用如下命令进行检查,如果无返回输出,则表示所有账号名唯一,否则列出账号名和对应的复用次数,如test这个账号存在重复: 20 | 21 | ```bash 22 | # cat /etc/passwd | awk -F ":" '{a[$1]++}END{for(i in a){if(a[i]!=1){print i, a[i]}}}' 23 | test 2 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 分析账号名被重复使用的原因,然后手工删除/etc/passwd文件中出现问题的账号,并按需确定是否使用useradd命令重新添加正确的账号: 29 | 30 | ```bash 31 | # useradd test 32 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.1_禁止安装FTP客户端.md: -------------------------------------------------------------------------------- 1 | ### 1.2.1 禁止安装FTP客户端 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | FTP(File Transfer Protocol,文件传输协议),提供Linux服务器同其他服务器、桌面系统、终端设备之间的文件传输功能。FTP协议本身不支持加密传输,数据传输过程中容易被攻击者窃取,所以禁止安装FTP客户端,并使用FTP协议。未安装FTP客户端的设备,无法对外通过FTP协议进行传输,如业务需要进行文件传输,可以通过SFTP进行替代。 9 | 10 | **规则影响:** 11 | 12 | 未安装FTP客户端,将无法同FTP服务器进行协议连接。 13 | 14 | **检查方法:** 15 | 16 | 可通过如下命令检查是否安装了FTP软件,如果命令返回为"package ftp is not installed",表示未安装: 17 | 18 | ```bash 19 | # rpm -q "ftp" 20 | package ftp is not installed 21 | ``` 22 | 23 | **修复方法:** 24 | 25 | 对于已经安装了FTP软件的系统,可以通过yum或dnf命令进行卸载: 26 | 27 | ```bash 28 | # yum remove ftp 29 | ``` 30 | 或 31 | ```bash 32 | # dnf remove ftp 33 | ``` 34 | -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.11_确保组名唯一.md: -------------------------------------------------------------------------------- 1 | ### 2.1.11 确保组名唯一 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 要求在/etc/group中涉及到的用户组名唯一。如果/etc/group中的用户组名重复,则实际只有/etc/group文件中第一个该用户组的GID有效。 10 | 11 | 通常情况下使用useradd/groupadd等命令添加用户账号/用户组,不会存在用户组名重复问题,但如果管理员操作失误,直接修改/etc/group文件,则可能导致问题。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用如下命令进行检查,如果无返回输出,则表示所有用户组名唯一,否则列出组名和对应的复用次数,如test这个组名存在重复: 20 | 21 | ```bash 22 | # cat /etc/group | awk -F ":" '{a[$1]++}END{for(i in a){if(a[i]!=1){print i, a[i]}}}' 23 | test 2 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 分析用户组名被重复使用的原因,然后手工删除/etc/group文件中出现问题的用户组,并按需确定是否使用groupadd命令重新添加正确的组名: 29 | 30 | ```bash 31 | # groupadd test 32 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.14_禁止使用X11 Forwarding.md: -------------------------------------------------------------------------------- 1 | ### 3.3.14 禁止使用X11 Forwarding 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SSH的X11 Forwarding功能允许在本地主机上执行远程主机的GUI程序。启用X11 Forwarding功能,则扩大了攻击面,存在被X11服务器端其他用户攻击的可能。如果业务场景中不需要,则必须禁止该功能。 10 | 11 | openEuler默认关闭X11 Forwarding功能。 12 | 13 | **规则影响:** 14 | 15 | 依赖于X11 Forwarding的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置: 20 | 21 | ```bash 22 | # grep -i "^X11Forwarding" /etc/ssh/sshd_config 23 | X11Forwarding no 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,配置X11Forwarding字段,将该字段设置为no,重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | X11Forwarding no 33 | # systemctl restart sshd 34 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.15_应当正确配置MaxAuthTries.md: -------------------------------------------------------------------------------- 1 | ### 3.3.15 应当正确配置MaxAuthTries 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | MaxAuthTries值用于表示系统允许单次连接过程中,用户认证失败的次数,超过上限则自动断开连接。建议设置该值小于等于3。 10 | 11 | 如果该值配置比较大,则单次连接过程中客户端可以尝试多次认证失败,降低了攻击开销。如果该值未在配置文件中显式配置,系统默认为6。 12 | 13 | **规则影响:** 14 | 15 | 认证失败次数超过上限,自动断开连接。 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置,如果返回为空,表示未配置: 20 | 21 | ```bash 22 | # grep -i "^MaxAuthTries" /etc/ssh/sshd_config 23 | MaxAuthTries 3 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,配置MaxAuthTries字段,该字段后面配置的数字表示限制的尝试次数,重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | MaxAuthTries 3 33 | # systemctl restart sshd 34 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.16_禁止使用PermitUserEnvironment.md: -------------------------------------------------------------------------------- 1 | ### 3.3.16 禁止使用PermitUserEnvironment 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | PermitUserEnvironment允许用户设置SSH环境变量,该设置可能导致攻击者通过修改SSH环境变量进行相应攻击。 10 | 11 | 如果PermitUserEnvironment配置为yes,则攻击者可以通过修改SSH环境变量绕过安全机制,或者执行攻击代码。该配置必须关闭。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置: 20 | 21 | ```bash 22 | # grep -i "^PermitUserEnvironment" /etc/ssh/sshd_config 23 | PermitUserEnvironment no 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,配置PermitUserEnvironment字段为no,重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | PermitUserEnvironment no 33 | # systemctl restart sshd 34 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.8_确保UID唯一.md: -------------------------------------------------------------------------------- 1 | ### 2.1.8 确保UID唯一 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 要求在/etc/passwd中涉及到的用户账号UID唯一。Linux系统中根据UID来判断账号权限,如果多个账号使用同一个UID,则会导致这些账号拥有一样的权限,可以相互访问Home目录,以及各自创建的文件,导致越权以及信息泄露。 10 | 11 | 通常情况下使用useradd等命令添加用户账号,不会存在UID重复问题,但如果管理员操作失误,直接修改/etc/passwd文件,则可能导致问题。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用如下命令进行检查,如果无返回输出,则表示所有UID设置正确,且唯一,否则列出UID和对应的复用次数,如3003这个UID被两个账号使用: 20 | 21 | ```bash 22 | # cat /etc/passwd | awk -F ":" '{a[$3]++}END{for(i in a){if(a[i]!=1){print i, a[i]}}}' 23 | 3003 2 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 分析UID被重复使用的原因,然后删除出现问题的账号,并重新添加: 29 | 30 | ```bash 31 | # userdel -r test 32 | # useradd test 33 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.10_禁止安装LDAP服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.10 禁止安装LDAP服务 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | LDAP(Lightweight Directory Access Protocol,轻型目录访问协议)是一个轻量级的目录访问协议,提供访问控制和维护分布式的目录信息。系统提供LDAP服务会增加系统资源占用,且扩大了攻击面,如果用户业务场景不需要提供LDAP服务,则禁止安装LDAP服务。 10 | 11 | openEuler安装镜像中提供了openldap-servers安装包,但默认未安装。 12 | 13 | **规则影响:** 14 | 15 | 依赖于LDAP服务的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 检查是否安装了openldap-servers软件,如果命令返回为空,则表示未安装: 20 | 21 | ```bash 22 | # rpm -qa | grep "openldap-servers" 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 对于已安装openldap-servers组件的服务器,可以通过yum或dnf命令进行卸载: 28 | 29 | ```bash 30 | # yum remove openldap-servers 31 | ``` 32 | 或 33 | ```bash 34 | # dnf remove openldap-servers 35 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.14_禁止安装LDAP客户端.md: -------------------------------------------------------------------------------- 1 | ### 1.2.14 禁止安装LDAP客户端 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | LDAP(Lightweight Directory Access Protocol,轻型目录访问协议)是一个轻量级的目录访问协议,提供访问控制和维护分布式的目录信息。系统提供LDAP客户端会造成系统资源浪费,且扩大了攻击面。如果业务场景不需要使用LDAP服务,则禁止安装LDAP客户端。 10 | 11 | openEuler安装镜像中提供了openldap-clients安装包,但默认未安装。 12 | 13 | **规则影响:** 14 | 15 | 依赖于LDAP服务的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 检查是否安装了openldap-clients软件,如果命令返回为空,则表示未安装: 20 | 21 | ```bash 22 | # rpm -qa | grep "openldap-clients" 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 对于已安装openldap-clients组件的服务器,可以通过yum或dnf命令进行卸载: 28 | 29 | ```bash 30 | # yum remove openldap-clients 31 | ``` 32 | 或 33 | ```bash 34 | # dnf remove openldap-clients 35 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.10_确保GID唯一.md: -------------------------------------------------------------------------------- 1 | ### 2.1.10 确保GID唯一 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 要求在/etc/group中涉及到的用户组GID唯一。Linux系统中根据GID来判断用户组权限,如果多个用户组使用同一个GID,则会导致这些用户组拥有一样的权限,可以相互访问拥有组权限的目录,导致越权以及信息泄露。 10 | 11 | 通常情况下使用useradd/groupadd等命令添加用户账号/用户组,不会存在GID重复问题,但如果管理员操作失误,直接修改/etc/group文件,则可能导致问题。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用如下命令进行检查,如果无返回输出,则表示所有GID唯一,否则列出GID和对应的复用次数,如3003这个GID被两个用户组使用: 20 | 21 | ```bash 22 | # cat /etc/group | awk -F ":" '{a[$3]++}END{for(i in a){if(a[i]!=1){print i, a[i]}}}' 23 | 3003 2 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 分析GID被重复使用的原因,然后删除出现问题的用户组(注意,修复时需按照实际场景,先删除属于该用户组的用户账号): 29 | 30 | ```bash 31 | # groupdel test1 32 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.14_避免Home目录下存在.netrc文件.md: -------------------------------------------------------------------------------- 1 | ### 2.1.14 避免Home目录下存在.netrc文件 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | “.netrc”文件保存用于登录远端ftp服务器的口令,如无相关ftp场景,建议删除“.netrc”文件。“.netrc”文件中存储的口令是明文的,容易被攻击者窃取,从而导致ftp服务器敏感数据泄露,甚至服务器遭受攻击。 10 | 11 | **规则影响:** 12 | 13 | ftp服务器自动登录受限制 14 | 15 | **检查方法:** 16 | 17 | 使用如下脚本进行检查,如果无返回输出,则表示所有Home目录下无“.netrc”文件: 18 | 19 | ```bash 20 | #!/bin/bash 21 | 22 | grep -E -v '^(halt|sync|shutdown)' "/etc/passwd" | awk -F ":" '($7 != "/bin/false" && $7 != "/sbin/nologin") {print $6}' | while read home; 23 | do 24 | if [ -d "$home" ]; then 25 | find $home -name ".netrc" 26 | fi 27 | done 28 | ``` 29 | 30 | **修复方法:** 31 | 32 | 使用rm命令将检查方法找到“.netrc”文件删除。 -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.17_应当正确配置LoginGraceTime.md: -------------------------------------------------------------------------------- 1 | ### 3.3.17 应当正确配置LoginGraceTime 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | LoginGraceTime用于限制用户登录的时间,如果用户在LoginGraceTime限定的时间内没有完成登录动作,则自动断开连接。建议该值设置为小于或等于60秒。 10 | 11 | 如果该值设置过大,则攻击者可以利用大量未完成登录动作的连接来消耗服务器资源,从而导致正常管理员登录失败。如果该值未在配置文件中显式配置,系统默认为120秒。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置: 20 | 21 | ```bash 22 | # grep -i "^LoginGraceTime" /etc/ssh/sshd_config 23 | LoginGraceTime 60 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,配置LoginGraceTime的值,该字段后面配置的数字表示限制的时间,单位秒,配置后重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | LoginGraceTime 60 33 | # systemctl restart sshd 34 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.1_确保内核ASLR已启用.md: -------------------------------------------------------------------------------- 1 | ### 3.5.1 确保内核ASLR已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | ASLR通过每次将栈的起始位置、函数库和程序本身移至略微不同的位置,使得缓冲溢出攻击无法猜测正确的位置,导致攻击无法成功实施。linux内核中ASLR分为0,1,2三级通过/proc/sys/kernel/randomize_va_space文件配置查看,各级对应的效果: 10 | 11 | 0:不存在随机化,表示一切都将位于静态地址中 12 | 13 | 1:只有共享函数库、栈、mmap’ed 内存、VDSO以及堆是随机的 14 | 15 | 2:完全随机化。使用brk()进行的旧式内存配置也将是随机的 16 | 17 | 进程中栈的地址被随机化,降低缓冲溢出攻击的风险 18 | 19 | **规则影响:** 20 | 21 | 无 22 | 23 | **检查方法:** 24 | 25 | 输入以下命令并检查相应的命令返回是否为2: 26 | 27 | ```bash 28 | # cat /proc/sys/kernel/randomize_va_space 29 | 2 30 | ``` 31 | 32 | **修复方法:** 33 | 34 | 修改randomize_va_space值为2: 35 | 36 | ```bash 37 | # echo 2 > /proc/sys/kernel/randomize_va_space 38 | ``` 39 | -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.4_确保su受限使用.md: -------------------------------------------------------------------------------- 1 | ### 2.4.4 确保su受限使用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | su命令可以使一个普通用户拥有超级用户或其他用户的权限,它经常被用于从普通用户账号切换到系统root账号。su命令为用户变更身份提供了便捷的途径,但如果不加约束的使用su命令,会给系统带来潜在的风险。通过对用户使用su访问root账号的权限进行限制,仅对部分账号进行su使用授权,可以提高系统账号使用的安全性。 10 | 11 | openEuler默认仅允许wheel组中的普通用户具有su的使用权限。 12 | 13 | **规则影响:** 14 | 15 | 非wheel组用户无法使用su 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/pam.d/su中是否配置了非wheel组用户账号禁止使用su: 20 | 21 | ```bash 22 | # grep pam_wheel.so /etc/pam.d/su | grep required 23 | auth required pam_wheel.so use_uid 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/pam.d/su配置文件,配置非wheel组用户账号禁止使用su: 29 | 30 | ```bash 31 | # vim /etc/pam.d/su 32 | auth required pam_wheel.so use_uid 33 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.5_确保PAM认证使能.md: -------------------------------------------------------------------------------- 1 | ### 3.3.5 确保PAM认证使能 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | PAM(Pluggable Authentication Modules)是Linux平台上可插拔的认证模块,PAM提供了一系列的开源共享库文件(so),通过配置参数可以灵活控制相关认证过程。SSH通过配置PAM认证,可以基于Linux系统的用户认证管理模块完成SSH远程登录用户的认证授权和管理,相对比较方便和统一;否则SSH需要对认证过程进行管理,例如认证失败次数控制,账号是否锁定等,配置容易遗漏或无法达到PAM管理的效果。 10 | 11 | openEuler SSH默认使用PAM认证。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置: 20 | 21 | ```bash 22 | # grep -i "^UsePAM" /etc/ssh/sshd_config 23 | UsePAM yes 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,将UsePAM设置为yes,重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | UsePAM yes 33 | # systemctl restart sshd 34 | ``` 35 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.19_避免安装HTTP服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.19 避免安装HTTP服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | HTTP代表超文本协议(Hypertext Transfer Protocol,HTTP),是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。HTTP服务器允许客户端(通常是浏览器)通过HTTP协议请求网页、图像、文档等Web内容,并将这些内容传送给客户端。 10 | 11 | **规则影响:** 12 | 13 | 依赖于HTTP服务的程序执行受限制。 14 | 15 | **检查方法:** 16 | 17 | 可通过如下命令检查是否安装了httpd客户端软件,如果命令返回“package httpd is not installed”,表示未安装: 18 | 19 | ```bash 20 | # rpm -q "httpd" 21 | package httpd is not installed 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | 对于已经安装了httpd软件的系统,可以通过yum或dnf命令进行卸载: 27 | 28 | ```bash 29 | # yum remove httpd 30 | ``` 31 | 或 32 | ```bash 33 | # dnf remove httpd 34 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.13_避免Home目录下存在.forward文件.md: -------------------------------------------------------------------------------- 1 | ### 2.1.13 避免Home目录下存在.forward文件 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | “.forward”文件可以配置一个email地址,当用户收到邮件时,会自动转发到该地址。如无相关邮件转发场景,建议删除“.forward”文件。如果存在“.forward”文件,可能导致携带有敏感信息的用户邮件被自动转发到高风险的邮箱。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 使用如下脚本进行检查,如果无返回输出,则表示所有Home目录下无“.forward”文件: 18 | 19 | ```bash 20 | #!/bin/bash 21 | 22 | grep -E -v '^(halt|sync|shutdown)' "/etc/passwd" | awk -F ":" '($7 != "/bin/false" && $7 != "/sbin/nologin") {print $6}' | while read home; 23 | do 24 | if [ -d "$home" ]; then 25 | find $home -name ".forward" 26 | fi 27 | done 28 | ``` 29 | 30 | **修复方法:** 31 | 32 | 使用rm命令将检查方法找到“.forward”文件删除。 -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.1_网络/3.1.2_避免使用无线网络.md: -------------------------------------------------------------------------------- 1 | ### 3.1.2 避免使用无线网络 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 如果硬件设备包含WIFI等无线模块,且系统启用了WIFI,则服务器存在通过无线连接网络的可能,如果是不受控的连接,则一方面可能导致网络不稳定,另一方面增加了攻击面。 10 | 11 | 当不存在使用无线网络的场景,建议用户根据实际情况关闭无线网络功能。 12 | 13 | **规则影响:** 14 | 15 | 依赖于无线网络的程序运行受限制 16 | 17 | **检查方法:** 18 | 19 | 通过nmcli命令查看无线网络配置,如果WIFI和WWAN为enabled,表示已启用无线网络,例如: 20 | 21 | ```bash 22 | # nmcli radio all 23 | WIFI-HW WIFI WWAN-HW WWAN 24 | enabled enabled enabled enabled 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | 通过nmcli命令可永久关闭WIFI和WWAN,即使系统重启也依旧保持关闭状态: 30 | 31 | ```bash 32 | # nmcli radio all off 33 | # nmcli radio all 34 | WIFI-HW WIFI WWAN-HW WWAN 35 | enabled disabled enabled disabled 36 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.4_禁止安装不安全的SNMP协议版本.md: -------------------------------------------------------------------------------- 1 | ### 1.2.4 禁止安装不安全的SNMP协议版本 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 简单网络管理协议(SNMP,Simple Network Management Protocol),是专门设计用于在IP网络中管理网络节点的一种标准协议,该协议允许网元之间传递相关网络管理、控制数据。对于不需要SNMP的场景,如果安装了SNMP,则增加了系统资源消耗,并扩大了攻击面,特别是如果使用了SNMP v1.0协议,将导致攻击者可以轻易窃取、篡改、伪造SNMP报文,对各网元进行攻击。 10 | 11 | openEuler安装镜像中提供了net-snmp安装包,但默认未安装。 12 | 13 | **规则影响:** 14 | 15 | 依赖于SNMP服务的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 可通过如下命令检查是否安装了snmp软件,如果命令返回为空,则表示未安装: 20 | 21 | ```bash 22 | # rpm -qa | grep -E "net-snmp-[0-9]" 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 对于已安装snmp组件的服务器,可以通过yum或dnf命令进行卸载: 28 | 29 | ```bash 30 | # yum remove net-snmp 31 | ``` 32 | 或 33 | ```bash 34 | # dnf remove net-snmp 35 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.8_确保su命令继承用户环境变量不会引入提权.md: -------------------------------------------------------------------------------- 1 | ### 2.4.8 确保su命令继承用户环境变量不会引入提权 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | su命令可以使一个普通用户拥有超级用户或其他用户的权限,它经常被用于从普通用户账号切换到系统root账号。su命令为用户变更身份提供了便捷的途径,但如果不加约束的使用su命令,会给系统带来潜在的风险,su命令切换用户时不会自动为用户设置PATH。如果通过su切换用户后系统会自动初始化环境变量PATH,则可以有效防范由于继承环境变量PATH而导致的提权问题。 10 | 11 | openEuler默认设置su完成后,PATH会自动初始化。 12 | 13 | 14 | **规则影响:** 15 | 16 | 无 17 | 18 | **检查方法:** 19 | 20 | 检查/etc/login.defs中是否配置了自动初始化环境变量PATH,即ALWAYS_SET_PATH=yes: 21 | 22 | ```bash 23 | # cat /etc/login.defs | grep ALWAYS_SET_PATH=yes 24 | ALWAYS_SET_PATH=yes 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | 修改/etc/login.defs配置文件添加如下配置,使切换用户后系统会自动初始化环境变量PATH: 30 | 31 | ```bash 32 | # vim /etc/login.defs 33 | ALWAYS_SET_PATH=yes 34 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.6_数据安全/2.6.1_应当启用haveged服务.md: -------------------------------------------------------------------------------- 1 | ### 2.6.1 应当启用haveged服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | haveged服务提供了一个易用的、不可预测的随机数生成器,生成的随机数用于补充系统熵池,可解决某些情况下系统熵过低的问题。建议在有加解密或生成密钥需求的场景下(例如使用openssl和gnutls)都开启此服务。 10 | 11 | 如果haveged服务没有开启,需要生成强伪随机数的进程从/dev/random取值时,会因为取不到足够的值而陷入等待,直至取到新的随机字节后才返回。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查环境中haveged服务是否处于正常运行状态: 20 | 21 | ```bash 22 | # systemctl is-active haveged 23 | active 24 | ``` 25 | 26 | 如果显示处于active状态,说明haveged服务正在运行,反之如果显示处于inactive状态,说明服务未开启。 27 | 28 | **修复方法:** 29 | 30 | 开启haveged服务: 31 | 32 | ```bash 33 | # systemctl start haveged 34 | ``` 35 | 36 | 如果要将其设置为随系统启动,可以这样配置: 37 | 38 | ```bash 39 | # systemctl enable haveged.service 40 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.3_身份认证/2.3.2_确保会话超时时间设置正确.md: -------------------------------------------------------------------------------- 1 | ### 2.3.2 确保会话超时时间设置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 设置合理的会话超时时间可以降低因管理员人为原因而导致系统被攻击者攻击的风险。 10 | 11 | 考虑到社区版本在不同场景下的易用性,openEuler发行版默认不配置会话超时时间,请根据实际场景按需配置。 12 | 13 | **规则影响:** 14 | 15 | 会话超时时间设置过长,甚至永不超时,当管理员离开时没有退出登录,其他人员就可以直接在终端上以管理员权限进行操作。 16 | 如果设置过短,则频繁锁定,增加管理员输入口令次数,降低用户体验的同时,也容易引入安全风险,管理员周边人员有较多的机会可以窥探到输入的口令。 17 | 18 | **检查方法:** 19 | 20 | ```bash 21 | # grep "^export TMOUT" /etc/profile 22 | export TMOUT=300 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | - 修改/etc/profile文件TMOUT字段,根据业务场景修改为合理的值: 28 | 29 | ```bash 30 | # vim /etc/profile 31 | export TMOUT= 32 | ``` 33 | 34 | - 使用source命令使之生效: 35 | 36 | ```bash 37 | # source /etc/profile 38 | ``` 39 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.2_禁止安装TFTP客户端.md: -------------------------------------------------------------------------------- 1 | ### 1.2.2 禁止安装TFTP客户端 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | TFTP(Trivial File Transfer Protocol,简单文件传输协议),提供Linux服务器同其他服务器、桌面系统、终端设备之间的文件传输功能。TFTP协议本身不支持认证和加密机制,通信过程中容易被攻击者仿冒、篡改、以及窃取,所以禁止安装TFTP客户端和服务。未安装TFTP客户端和服务的设备,无法对外提供TFTP服务,也无法使用客户端同外界基于TFTP协议进行通信,如业务需要进行文件传输,可以通过SFTP服务进行替代。 9 | 10 | **规则影响:** 11 | 12 | 依赖于TFTP服务的程序执行受限制。 13 | 14 | **检查方法:** 15 | 16 | 可通过如下命令检查是否安装了TFTP软件,如果命令返回“package tftp is not installed”,表示未安装: 17 | 18 | ```bash 19 | # rpm -q "tftp" 20 | package tftp is not installed 21 | ``` 22 | 23 | **修复方法:** 24 | 25 | 对于已经安装了TFTP软件的系统,可以通过yum或dnf命令进行卸载: 26 | 27 | ```bash 28 | # yum remove tftp tftp-server 29 | ``` 30 | 或 31 | ```bash 32 | # dnf remove tftp tftp-server 33 | ``` 34 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.1_确保SSH服务版本配置正确.md: -------------------------------------------------------------------------------- 1 | ### 3.3.1 确保SSH服务版本配置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 如果使用SSH1,由于协议本身存在较多的未修复漏洞,且社区已不作为主流协议进行长期维护,容易使攻击者有机可乘,造成信息泄露、命令数据篡改等风险。 10 | 11 | openEuler默认继承的OpenSSH组件使用SSH协议进行远程控制或在服务器之间传递文件,支持SSH 1.3、1.5和2.0协议,其中1.x协议简称SSH1,由于安全原因不允许使用;2.0协议简称为SSH2,目前无安全问题,要求使用。SSH1同SSH2互不兼容,所以要求服务端在使用SSH2之后,客户端也必须使用SSH 2.0协议。 12 | 13 | 当前openEuler默认使用SSH2。 14 | 15 | **规则影响:** 16 | 17 | 无 18 | 19 | **检查方法:** 20 | 21 | 通过如下命令,查看返回是否为2: 22 | 23 | ```bash 24 | # grep "^Protocol" /etc/ssh/sshd_config 25 | Protocol 2 26 | ``` 27 | 28 | **修复方法:** 29 | 30 | 修改/etc/ssh/sshd_config文件,将Protocol字段后面的数字修改为2,重启sshd服务: 31 | 32 | ```bash 33 | # vim /etc/ssh/sshd_config 34 | Protocol 2 35 | # systemctl restart sshd 36 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.13_确保删除文件不必要的SUID和SGID位.md: -------------------------------------------------------------------------------- 1 | ### 1.1.13 确保删除文件不必要的SUID和SGID位 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 在Linux中,SUID(Set User ID)和 SGID(Set Group ID)是在UNIX和类UNIX操作系统中用于控制程序权限的特殊权限位,确保文件不包含不必要的SUID和SGID位非常重要,以提高系统的安全性。这些位允许文件在执行时以文件所有者或文件所属组的权限运行,可能会导致潜在的安全风险 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 可使用如下命令查找系统中的SUID和SGID文件,如果无返回,表示不存在该类文件: 18 | 19 | ``` 20 | # find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \; 21 | null 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | 找到SUID或SGID文件,需要审查这些文件并确定是否确实需要这些权限。通常,只有一些特定的系统工具或程序需要SUID或SGID权限,而绝大多数文件不需要。 27 | 28 | 如果确定某个文件不需要SUID或SGID权限,可以将其文件删除或移除文件的SUID和SGID位,执行命令行如下: 29 | 30 | ``` 31 | # rm -rf /path/to/file 32 | 或 33 | # chmod u-s,g-s /path/to/file 34 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.4_确保全局可写目录已设置sticky位.md: -------------------------------------------------------------------------------- 1 | ### 1.1.4 确保全局可写目录已设置sticky位 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | sticky位,又叫粘滞位,普通文件的粘滞位会被内核忽略。粘滞位被设置在目录的执行许可位置上,用t表示,设置了该位后,其它用户就不可以删除该目录下不属于他的文件和目录。但是子目录不继承该权限,要再设置才可使用。对于全局可写的目录,要求必须设置粘滞位。 10 | 11 | 如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用如下命令查找指定目录下有全局可写权限且未设置粘滞位的目录,返回为空表示未找到,举例中test目录为全局可写目录,但未设置粘滞位: 20 | 21 | ``` 22 | # find ./ -type d -perm -0002 -a ! -perm -1000 23 | ./test 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 使用chmod命令设置目录粘滞位,其中第一位“1”表示设置粘滞位,设置完成以后,可以通过ll命令查看是否已经设置成功,如下例子中,other用户的x位已经被设置为t: 29 | 30 | ``` 31 | # chmod 1777 test 32 | # ll -d test 33 | drwxrwxrwt. 2 root root 4096 Nov 4 14:31 test 34 | ``` 35 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.10_应当正确配置SSH服务日志级别.md: -------------------------------------------------------------------------------- 1 | ### 3.3.10 应当正确配置SSH服务日志级别 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SSH提供多种日志输出级别:QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2、DEBUG3。日志级别设置越高(例如QUIET、FATAL),打印的日志信息越少,有利于节约硬盘空间,但不利于管理员对SSH事件进行审计追溯;反之(例如DEBUG2、DEBUG3),日志打印量大,消耗硬盘空间多,记录的事件比较详细。 10 | 11 | openEuler默认设置为VERBOSE,建议根据实际场景设置合理的日志级别,不建议设置DEBUG及以下级别,容易导致日志量过多。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看日志级别配置,如下例中配置为VERBOSE: 20 | 21 | ```bash 22 | # grep -i "^LogLevel" /etc/ssh/sshd_config 23 | LogLevel VERBOSE 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,将LogLevel设置为相应的级别,重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | LogLevel VERBOSE 33 | # systemctl restart sshd 34 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.3_身份认证/2.3.4_应当正确配置Banner路径.md: -------------------------------------------------------------------------------- 1 | ### 2.3.4 应当正确配置Banner路径 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | Banner路径指向一个文件,文件中包含有用户登录SSH前在客户端给出的提示信息,用户可根据实际业务场景配置该文件中的内容。 10 | 11 | 如果不配置,则默认没有显示。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置,如果返回为空,表示未配置: 20 | 21 | ```bash 22 | # grep -i "^Banner" /etc/ssh/sshd_config 23 | Banner /etc/issue.net 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | * 修改/etc/ssh/sshd_config文件,配置Banner字段指向的文件,重启sshd服务: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | Banner /etc/issue.net 33 | # systemctl restart sshd 34 | ``` 35 | 36 | * 修改Banner指向文件中的内容: 37 | 38 | ```bash 39 | # vim /etc/issue.net 40 | Authorized users only. All activities may be monitored and reported. 41 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.19_禁止SSH服务预设置known_hosts.md: -------------------------------------------------------------------------------- 1 | ### 3.3.19 禁止SSH服务预设置known_hosts 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | known_hosts为主机已经访问过的计算机的公钥,用户成功登录其他计算机后会自动将公钥信息保存在$HOME/.ssh/known_hosts中。当下次访问相同计算机时会校验公钥,如果校验失败则拒绝建立连接。所以系统中不能预设置known_hosts。 10 | 11 | 当系统中预设known_hosts时: 12 | 13 | - 如果主机公钥正确,则在与目标主机建立连接的过程中不会发出警告,增加了安全风险。 14 | - 如果主机公钥错误,则无法建立连接到目标主机。 15 | 16 | openEuler默认不预设置known_hosts。 17 | 18 | **规则影响:** 19 | 20 | 无 21 | 22 | **检查方法:** 23 | 24 | 使用find命令查看配置,如果返回为空,表示未预设置known_hosts: 25 | 26 | ```bash 27 | # find /home/ /root/ -name known_hosts 28 | /home/test/.ssh/known_hosts 29 | /root/.ssh/known_hosts 30 | ``` 31 | 32 | **修复方法:** 33 | 34 | 删除被检测到的文件,如/root/.ssh/known_hosts文件: 35 | 36 | ```bash 37 | # rm /root/.ssh/known_hosts 38 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.3_身份认证/2.3.3_确保Warning Banners包含合理的信息.md: -------------------------------------------------------------------------------- 1 | ### 2.3.3 确保Warning Banners包含合理的信息 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | Warning Banners包含有系统登录界面添加的警告信息,为所有登录系统的用户标识出本系统的安全警告,安全警告可以根据业务场景包括系统所属的组织,登录行为所受到的监视或者记录,非授权登录或者入侵会受到的法律制裁等内容。不合适的安全警告信息,可能增加系统被攻击的风险,或触犯当地法律法规。 10 | 11 | Warning Banners不应将系统版本、应用服务器类型、功能等暴露给用户,避免攻击者获取到系统信息,实施攻击。除此之外,还需要正确配置文件所有权,否则未经授权的用户可能会使用不正确或误导性信息来修改文件。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | * 通过cat命令,查看/etc/motd、/etc/issue、/etc/issue.net三个文件中警告信息是否合理,是否存在系统版本、应用服务器类型、功能等信息; 20 | 21 | * 通过ll命令查看/etc/motd、/etc/issue、/etc/issue.net三个文件权限是否为644; 22 | 23 | **修复方法:** 24 | 25 | * 通过vim命令,修改/etc/motd、/etc/issue、/etc/issue.net三个文件中的告警信息; 26 | 27 | * 通过chmod命令修改/etc/motd、/etc/issue、/etc/issue.net三个文件的权限为644; -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.10_避免使用标签为unconfined_service_t的程序.md: -------------------------------------------------------------------------------- 1 | ### 2.4.10 避免使用标签为unconfined_service_t的程序 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SELinux设置unconfined_service_t标签的目的是使一些未配置SELinux策略的第三方服务进程不受约束地运行。默认情况下,systemd运行标签为bin_t或usr_t(一般位于/usr/bin、/opt等目录下)的第三方应用程序时,产生的进程标签为unconfined_service_t。 10 | 11 | 与其他高权限标签(如unconfined_t、initrc_t等)的区别是,unconfined_service_t只有极少的域转换规则,这意味着即使进程运行那些已经配置过SELinux策略的应用程序,新进程的标签也依然为unconfined_service_t,进程配置的SELinux策略也不会生效,如果被攻击会对系统造成较大的影响。 12 | 13 | **规则影响:** 14 | 15 | 标签为unconfined_service_t的程序运行受限制 16 | 17 | **检查方法:** 18 | 19 | 运行以下命令,若返回值为空,表示当前系统中没有标签为unconfined_service_t的进程: 20 | 21 | ```bash 22 | # ps -eZ | grep unconfined_service_t 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 为应用程序配置合理的SELinux策略,并添加域转换规则,使其被执行时转换到配置策略的进程标签。 -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.8_禁止安装rsync服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.8 禁止安装rsync服务 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | rsync服务可以用于在服务器之间或者服务器本地不同硬盘分区之间同步数据,但由于rsync使用不加密的传输协议,存在信息泄露的风险。若启用rsync服务,并且在不同服务器之间通过网络传输数据,则攻击者可以通过监听服务器端口或者路由器、交换机数据报文,窃取数据。 10 | 11 | openEuler安装镜像中提供了rsync安装包,要求在生产环境中不启动rsync服务。 12 | 13 | **规则影响:** 14 | 15 | 依赖于rsync服务的程序执行受限制。 16 | 17 | **检查方法:** 18 | 19 | 步骤1: 20 | 21 | 检查是否安装了rsync软件,如果命令返回为空,则表示未安装,符合规范要求,检查结束,否则继续执行步骤2。 22 | 23 | ```bash 24 | # rpm -qa | grep "rsync" 25 | ``` 26 | 27 | 步骤2: 28 | 29 | 安装了rsync软件时,检查rsync服务是否开启,disabled表示未启用服务,符合规范要求: 30 | 31 | ```bash 32 | # systemctl is-enabled rsyncd 33 | disabled 34 | ``` 35 | 36 | **修复方法:** 37 | 38 | 对于已安装rsync组件的服务器,可以禁用rsyncd服务: 39 | 40 | ```bash 41 | # systemctl --now disable rsyncd 42 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.2_Rsyslog/4.2.3_确保cron服务日志已记录.md: -------------------------------------------------------------------------------- 1 | ### 4.2.3 确保cron服务日志已记录 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | linux系统计划任务一般由cron来承担,由于cron可能会被黑客利用来加载恶意代码,因此需要全部记录cron的日志信息,以便跟踪系统异常状况。 10 | 11 | 不记录cron日志,当出现攻击者恶意操作时,将无法从日志信息中查看异常,进而无法跟踪系统异常状况。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/rsyslog.conf文件中是否已经配置相关字段: 20 | 21 | ```bash 22 | # grep /var/log/cron /etc/rsyslog.conf 23 | cron.* /var/log/cron 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/rsyslog.conf文件,添加cron相关配置字段: 29 | 30 | ```bash 31 | # vim /etc/rsyslog.conf 32 | cron.* /var/log/cron 33 | ``` 34 | 35 | 执行如下命令,重启服务,使配置生效 36 | 37 | ```bash 38 | # systemctl restart rsyslog.service 39 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.11_应当正确配置SSH服务接口.md: -------------------------------------------------------------------------------- 1 | ### 3.3.11 应当正确配置SSH服务接口 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 通常情况下服务器存在多个网卡多个IP地址,IP地址应该进行相关的规划,哪些用于业务,哪些用于管理,所以并不是每个IP地址都需要侦听SSH连接,可以通过配置限制只有指定IP地址才能进行SSH连接,减小攻击面。未配置的IP地址无法通过SSH连接到服务器。 10 | 11 | openEuler作为平台,无法确定现网场景,默认不配置。建议根据实际情况规划和配置。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 如果已经配置侦听的地址,通过grep命令可以查询对应的配置(为实际已配置的ip地址),返回打印为空表示未配置: 20 | 21 | ```bash 22 | # grep -i "^ListenAddress" /etc/ssh/sshd_config 23 | ListenAddress 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,在ListenAddress字段后设置相应的IP地址,如果有多个,可以设置多行,重启sshd服务,如: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | ListenAddress 33 | ListenAddress 34 | # systemctl restart sshd 35 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.10_确保无可执行文件的分区以noexec方式挂载.md: -------------------------------------------------------------------------------- 1 | ### 1.1.10 确保无可执行文件的分区以noexec方式挂载 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 数据盘只是用于保存系统运行过程中的数据,并不需要在数据盘上执行相关命令,对于这种情况,该硬盘或分区必须以noexec方式挂载,提高安全性,减少攻击面。 10 | 11 | **规则影响:** 12 | 13 | 硬盘或分区如果以noexec方式挂载,那么该挂载点目录下的可执行文件无法直接运行。 14 | 15 | **检查方法:** 16 | 17 | 通过mount命令查看指定挂载点目录是否以noexec方式挂载: 18 | 19 | ```bash 20 | # mount | grep "\/root\/noexec" | grep "noexec" 21 | /dev/vda on /root/noexec type ext4 (rw,noexec,relatime,seclabel) 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | ```bash 27 | # umount /root/noexec 28 | # mount -o noexec /dev/vda /root/noexec/ 29 | ``` 30 | 31 | * 如果硬盘或分区是通过/etc/fstab配置文件进行挂载的,那么通过修改该文件,为指定挂载点添加noexec挂载方式,如: 32 | 33 | ```bash 34 | # vim /etc/fstab 35 | /dev/vda /root/noexec ext4 noexec 0 0 36 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.26_禁止开启kexec功能.md: -------------------------------------------------------------------------------- 1 | ### 3.5.26 禁止开启kexec功能 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | kexec允许替换当前正在运行的内核,可能被攻击者利用加载恶意内核。若使用场景无内核升级需求,建议关闭kexec功能。 10 | 11 | **规则影响:** 12 | 13 | 无法使用kexec升级内核。 14 | 15 | **检查方法:** 16 | 17 | 检查/proc/sys/kernel/kexec_load_disabled文件的值,0表示启用kexec,1表示关闭kexec: 18 | 19 | ```bash 20 | # cat /proc/sys/kernel/kexec_load_disabled 21 | kernel.kexec_load_disabled=1 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | - 可以通过修改/proc/sys/kernel/kexec_load_disabled的值来临时关闭kexec: 27 | 28 | ```bash 29 | # echo 1 > /proc/sys/kernel/kexec_load_disabled 30 | ``` 31 | 32 | - 或者通过修改/etc/sysctl.conf文件使其永久生效: 33 | 34 | ```bash 35 | kernel.kexec_load_disabled=1 36 | ``` 37 | 38 | 然后启用该配置: 39 | 40 | ```bash 41 | # sysctl -p /etc/sysctl.conf 42 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.27_确保内核触发错误后直接退出.md: -------------------------------------------------------------------------------- 1 | ### 3.5.27 确保内核触发错误后直接退出 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 系统内核在发现一些非致命错误时会触发oops,如果在oops发生后内核仍然继续运行,可能会导致错误依然存在并影响内核的稳定性和可靠性。因此,建议设置使能panic_on_oops,在发生oops后直接panic退出而不是继续运行。 10 | 11 | **规则影响:** 12 | 13 | 内核触发oops后会直接panic,不会继续运行。 14 | 15 | **检查方法:** 16 | 17 | 检查/proc/sys/kernel/panic_on_oops文件的值,0表示关闭,1表示开启: 18 | 19 | ```bash 20 | # cat /proc/sys/kernel/panic_on_oops 21 | 1 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | - 可以通过修改/proc/sys/kernel/panic_on_oops的值来临时修改oops行为: 27 | 28 | ```bash 29 | # echo 1 > /proc/sys/kernel/panic_on_oops 30 | ``` 31 | 32 | - 或者通过修改/etc/sysctl.conf文件使其永久生效: 33 | 34 | ```bash 35 | kernel.panic_on_oops=1 36 | ``` 37 | 38 | 然后启用该配置: 39 | 40 | ```bash 41 | # sysctl -p /etc/sysctl.conf 42 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.12_应当正确配置SSH并发未认证连接数.md: -------------------------------------------------------------------------------- 1 | ### 3.3.12 应当正确配置SSH并发未认证连接数 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 攻击者在不知道口令的情况下,可以通过建立大量的未完成认证的并发连接来消耗系统资源。 10 | 11 | openEuler默认不配置,建议根据实际场景配置上限值。 12 | 13 | **规则影响:** 14 | 15 | 如果正在进行认证的连接数达到上限,则新连接将被直接拒绝。 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置,如果返回为空,表示未配置: 20 | 21 | ```bash 22 | # grep -i "^MaxStartups" /etc/ssh/sshd_config 23 | maxstartups 10:30:60 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,配置maxstartups字段。 29 | 30 | 配置值为用冒号分隔的3个字段,其中第一个字段和最后一个字段分别表示连接数下限和上限,中间字段表示丢弃连接的比例,如: 31 | ```bash 32 | # vim /etc/ssh/sshd_config 33 | maxstartups 10:30:60 34 | ``` 35 | 表示未完成认证的连接数达到10个以后,开始丢弃30%的连接申请,如果此时继续累积未完成认证的连接数达到60个,那么拒绝所有新增连接。 36 | 37 | 修改本配置需要重启sshd服务生效: 38 | ```bash 39 | # systemctl restart sshd 40 | ``` 41 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.18_禁止SSH服务预设置authorized_keys.md: -------------------------------------------------------------------------------- 1 | ### 3.3.18 禁止SSH服务预设置authorized_keys 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | authorized_keys为远程主机的公钥,用户可以将该公钥存放于主目录$HOME/.ssh/authorized_keys文件中,用于公钥认证便可以直接登录系统。如果系统中预设authorized_keys,并且服务端开启了公私钥认证的登录方式,攻击者便可以绕过认证直接登录到指定的系统中对其进行攻击。所以系统中不能预设置authorized_keys。 10 | 11 | openEuler默认不预设置authorized_keys。 12 | 注意,本规则仅对初始系统预设置进行约束,对于运行期间,按业务要求必须使用公钥认证的场景,可以例外。 13 | 14 | **规则影响:** 15 | 16 | 无 17 | 18 | **检查方法:** 19 | 20 | 使用find命令查看配置,如果返回为空,表示未预设置authorized_keys: 21 | 22 | ```bash 23 | # find /home/ /root/ -name authorized_keys 24 | /home/test/.ssh/authorized_keys 25 | /root/.ssh/authorized_keys 26 | ``` 27 | 28 | **修复方法:** 29 | 30 | 删除被检测到的预设置authorized_keys,如/root/.ssh/authorized_keys文件: 31 | 32 | ```bash 33 | # rm /root/.ssh/authorized_keys 34 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.6_确保sudoers不能配置低权限用户可写的脚本.md: -------------------------------------------------------------------------------- 1 | ### 2.4.6 确保sudoers不能配置低权限用户可写的脚本 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | sudo可以使设定的普通用户以root权限执行某些特定的程序,与之对应的配置文件为/etc/sudoers。管理员用户可以配置相应的规则使某些脚本或二进制文件以root的权限运行,所以sudo配置的脚本应该只有root可写,不能配置低权限用户可写的脚本,若配置了低权限用户可写的脚本则该用户可以通过修改该脚本实现提权操作。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 检查sudo配置文件/etc/sudoers,检查特权程序是否为低权限用户可写。 18 | 19 | ```bash 20 | # grep "(root)" /etc/sudoers 21 | test_sudo ALL=(root) /bin/xxx.sh 22 | # ll /bin/xxx.sh 23 | -rw-------. 1 root root 451 Mar 27 17:00 /bin/xxx.sh 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 例如一个/etc/sudoers配置文件中的脚本为低权限用户可写,则用户需要根据实际的业务场景进行修复: 29 | 30 | * 修复方法1 31 | 32 | 修改/etc/sudoers配置文件中的脚本的文件权限,去除掉低特权用户的可写权限以防止该用户实现提权操作。 33 | 34 | * 修复方法2 35 | 36 | 修改/etc/sudoers配置文件删除低权限用户可配置的脚本文件,防止低权限用户实现提权操作 -------------------------------------------------------------------------------- /tools/run_fixes.sh: -------------------------------------------------------------------------------- 1 | # ####################################################################################### 2 | # 3 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 4 | # SecureGuardian is licensed under the Mulan PSL v2. 5 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 6 | # You may obtain a copy of Mulan PSL v2 at: 7 | # http://license.coscl.org.cn/MulanPSL2 8 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 9 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 10 | # PURPOSE. 11 | # See the Mulan PSL v2 for more details. 12 | # Description: Security Baseline Check Script for run_fixes 13 | # 14 | # ####################################################################################### 15 | -------------------------------------------------------------------------------- /tools/run_restores.sh: -------------------------------------------------------------------------------- 1 | # ####################################################################################### 2 | # 3 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 4 | # SecureGuardian is licensed under the Mulan PSL v2. 5 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 6 | # You may obtain a copy of Mulan PSL v2 at: 7 | # http://license.coscl.org.cn/MulanPSL2 8 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 9 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 10 | # PURPOSE. 11 | # See the Mulan PSL v2 for more details. 12 | # Description: Security Baseline Check Script for run_restores 13 | # 14 | # ####################################################################################### 15 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.17_避免使用USB存储.md: -------------------------------------------------------------------------------- 1 | ### 1.1.17 避免使用USB存储 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | USB存储设备通常用于在服务器之间拷贝数据,但由于USB存储设备上的数据一般情况下无法通过技术手段保护,增加了被攻击的风险。如果USB设备上存在病毒、木马等攻击程序,将可能导致服务器被感染破坏,如果USB存储设备管理不善,将导致数据泄露。所以攻击者可以通过构造、破坏USB存储数据,再利用合法的管理人员在服务器上操作USB存储设备,达到攻击服务器、窃取数据的目的。建议根据实际场景,禁用USB存储。 10 | 11 | **规则影响:** 12 | 13 | 无法使用USB存储数据 14 | 15 | **检查方法:** 16 | 17 | 使用如下命令检查输出结果,如果输出“install /bin/true”,表示USB存储设备已经被禁止使用;如果输出“insmod /lib/modules/(kernel version)/kernel/drivers/usb/storage/usb-storage.ko.xz”,表示未被禁止,并列出ko所在目录: 18 | 19 | ```bash 20 | # modprobe -n -v usb-storage 21 | install /bin/true 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | 在/etc/modprobe.d/目录下,添加一个任意文件名的,并以.conf为后缀的配置文件,属主和属组均为root, 权限600,按照如下格式填入代码,即可禁用USB存储: 27 | 28 | ```bash 29 | # vim /etc/modprobe.d/test.conf 30 | install usb-storage /bin/true 31 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.11_确保可移动设备分区以noexec、nodev方式挂载.md: -------------------------------------------------------------------------------- 1 | ### 1.1.11 确保可移动设备分区以noexec、nodev方式挂载 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 可移动设备本身存在不确定性,来源、过往使用情况、运输过程等都无法保证绝对安全,因此可移动设备往往是病毒传播的主要宿主设备。所以针对可移动设备,要求必须以noexec、nodev方式挂载,提高安全性,减少攻击面。 10 | 11 | noexec可以防止可移动设备上文件被直接执行,如病毒文件,攻击脚本等; 12 | 13 | nodev可以防止可移动设备上不正确的设备文件链接到服务器真实设备,从而导致攻击行为; 14 | 15 | 常见的可移动设备如:CD/DVD/USB等。 16 | 17 | **规则影响:** 18 | 19 | 可移动设备如果以noexec方式挂载,那么该挂载点目录下的可执行文件无法直接运行。 20 | 21 | 22 | **检查方法:** 23 | 24 | 通过mount命令查看指定挂载点目录是否以noexec、nodev方式挂载,此处假设/dev/vda为可移动设备: 25 | 26 | ```bash 27 | # mount | grep "\/dev\/vda" 28 | /dev/vda on /root/noexecdir type ext4 (rw,nodev,noexec,relatime,seclabel) 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 卸载对应挂载点,重新以nodev、noexec方式挂载 34 | 35 | ```bash 36 | # umount /root/noexecdir 37 | # mount -o nodev,noexec /dev/vda /root/noexecdir 38 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.8_确保无需修改的分区以只读方式挂载.md: -------------------------------------------------------------------------------- 1 | ### 1.1.8 确保无需修改的分区以只读方式挂载 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 以只读方式挂载无需数据修改的文件系统,可以避免无意或恶意的数据篡改行为,减小攻击面。 10 | 11 | **规则影响:** 12 | 13 | 文件系统一旦以只读方式挂载,将无法对文件和目录进行创建、修改、删除动作,用户需要根据实际场景进行配置,操作系统运行必须的文件挂载可以忽略此项要求。 14 | 15 | **检查方法:** 16 | 17 | 通过mount命令查看挂载的文件系统是否符合要求,例如查看/root/readonly目录是否为只读挂载,可以使用如下命令,如果无返回数据,说明该目录未被挂载,或非只读挂载: 18 | 19 | ```bash 20 | # mount | grep "\/root\/readonly" | grep "\" 21 | /dev/vda on /root/readonly type ext4 (ro,relatime,seclabel) 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | * 卸载对应挂载点,重新以只读方式挂载: 27 | 28 | ```bash 29 | # umount /root/readonly 30 | # mount -o ro /dev/vda /root/readonly/ 31 | ``` 32 | 33 | * 如果硬盘或分区是通过/etc/fstab配置文件进行挂载的,那么通过修改该文件,为指定挂载点添加ro挂载方式,如: 34 | 35 | ```bash 36 | # vim /etc/fstab 37 | /dev/vda /root/readonly ext4 ro 0 0 38 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.11_确保日志大小限制配置正确.md: -------------------------------------------------------------------------------- 1 | ### 4.1.11 确保日志大小限制配置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | audit日志文件需要配置大小限制,达到限制后通过rotate机制,新建日志文件重新记录,可以防止单个文件过大问题,便于管理和追溯。配置上限过大,容易导致单个日志文件过大,不利于管理;配置上限过小,则容易导致过多的日志文件或者日志文件因rotate机制被频繁覆盖,不利于事后追溯。 10 | 11 | openEuler默认配置8MB,用户可根据实际场景修改配置。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用如下命令查看当前配置: 20 | 21 | ```bash 22 | # grep "^max_log_file" /etc/audit/auditd.conf 23 | max_log_file = 8 24 | max_log_file_action = ROTATE 25 | ``` 26 | **修复方法:** 27 | 28 | 修改/etc/audit/auditd.conf文件中max_log_file字段的值(单位是MB): 29 | 30 | ```bash 31 | # vim /etc/audit/auditd.conf 32 | max_log_file = 33 | ``` 34 | 35 | 重启auditd服务,使配置生效: 36 | 37 | ```bash 38 | # service auditd restart 39 | Stopping logging: [ OK ] 40 | Redirecting start to /bin/systemctl start auditd.service 41 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.9_禁止安装avahi服务.md: -------------------------------------------------------------------------------- 1 | ### 1.2.9 禁止安装avahi服务 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | avahi是一种零配置的网络实现,包括用于多播DNS/DNS-SD服务的自动发现及自动广播。例如,用户可以将服务器接入网络,并让avahi自动广播其上运行的网络服务,从而方便其他用户访问这些服务。通常并不需要自动发现或者自动广播业务,如果启用不必要的avahi服务,不仅浪费了系统资源,还扩大了攻击面,攻击者可以轻易获取服务器服务情况,并进行针对性的攻击。 10 | 11 | **规则影响:** 12 | 13 | 依赖于avahi服务的程序执行受限制。 14 | 15 | **检查方法:** 16 | 17 | 检查是否安装了avahi软件,如果命令返回为空,则表示未安装: 18 | 19 | ```bash 20 | # rpm -qa | grep "avahi" 21 | ``` 22 | 23 | 注意,由于其他组件依赖,系统默认安装有avahi-libs。同时,可以通过systemctl命令检查是否安装avahi服务(如下返回表示未启动,且未安装avahi服务): 24 | 25 | ```bash 26 | # systemctl is-enabled avahi-daemon 27 | Failed to get unit file state for avahi-daemon.service: No such file or directory 28 | ``` 29 | 30 | **修复方法:** 31 | 32 | 对于已安装avahi组件的服务器,可以通过yum或dnf命令进行卸载: 33 | 34 | ```bash 35 | # yum remove avahi 36 | ``` 37 | 或 38 | ```bash 39 | # dnf remove avahi 40 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.2_禁止存在不使用的账号.md: -------------------------------------------------------------------------------- 1 | ### 2.1.2 禁止存在不使用的账号 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 如果系统中存在业务无关的账号,容易被攻击者利用该账号进行攻击行为。系统应该只保留业务所必须的账号,其他用于安装部署、调试验证,以及问题定位等的账号都必须被删除。 10 | 11 | openEuler默认满足不存在不使用的账号。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | openEuler默认只保留系统运行必须的账号,根据自身业务场景确定是否存在业务无关账号,可以使用如下命令查找系统中所有账号: 20 | 21 | ```bash 22 | # cat /etc/passwd | awk -F ":" '{print $1}' 23 | ``` 24 | 25 | 按照以下步骤进行查询和判断: 26 | 27 | - 在未部署业务的平台上,使用上述命令获取所有账号信息; 28 | - 在完整部署业务的平台上,使用上述命令获取所有账号信息; 29 | - 对比两者返回结果,对差异部分进行分析,是否符合业务设计。 30 | 31 | **修复方法:** 32 | 33 | 如果存在业务无关账号,可通过如下步骤进行删除: 34 | 35 | - 查找所有该账号为属主的文件,并通过rm命令手工删除这些文件,如下(test为账号名,/home/test目录在删除账号时可通过参数自动删除,xxx表示需要被删除的文件或目录) 36 | 37 | ```bash 38 | # find / -user test 39 | # rm xxx -rf 40 | ``` 41 | 42 | - 删除账号,包括home目录 43 | 44 | ```bash 45 | # userdel -rf test 46 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.3_禁止存在隐藏的可执行文件.md: -------------------------------------------------------------------------------- 1 | ### 1.1.3 禁止存在隐藏的可执行文件 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 在linux系统中,以“.”为前缀的文件是隐藏文件(除了当前目录和上层目录的“.”、“..”),系统中不允许存在可执行的隐藏文件。 10 | 11 | .bashrc、.bash_profile、.bash_logout这三个文件是系统在创建用户账号后,账号登录/登出shell时的脚本文件,符合业界惯例,可不删除,其他隐藏的可执行文件必须删除,或去除可执行权限。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 通过find命令可以查找是否存在可执行的隐藏文件,如下命令是在根文件系统下全局查找,如果返回为空,则表示未找到任何可执行的隐藏文件,否则列出相应文件: 20 | 21 | ``` 22 | # find / -type f -name "\.*" -perm /+x 23 | /etc/skel/.bashrc 24 | /etc/skel/.bash_profile 25 | /etc/skel/.bash_logout 26 | ``` 27 | 28 | **修复方法:** 29 | 30 | 根据实际情况,有三种修改方式: 31 | 32 | - 使用rm命令删除隐藏的可执行文件 33 | 34 | ``` 35 | # rm .testfile 36 | ``` 37 | 38 | - 使用mv命令将隐藏文件修改为普通文件 39 | 40 | ``` 41 | # mv .testfile testfile 42 | ``` 43 | 44 | - 使用chmod命令去除可执行权限,例如: 45 | 46 | ``` 47 | # chmod 644 .testfile 48 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.20_禁止SSH服务配置弃用的选项.md: -------------------------------------------------------------------------------- 1 | ### 3.3.20 禁止SSH服务配置弃用的选项 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 目前SSH服务通讯协议主要分为第一代和第二代,不同版本的通讯协议SSH服务的配置项并不兼容,而且某些低版本的配置项在新版本中已经被废除了。SSH服务端配置文件存放在/etc/ssh/sshd_config中,当前配置选项均为SSH第二代通信协议的配置选项,如果强行配置旧版本的配置项,会导致SSH服务进行自检时报错,且配置项并不生效。所以应禁止配置已经弃用的SSH选项。 10 | 11 | openEuler默认不配置已经弃用的SSH选项。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用SSH服务自检命令进行检查如果返回为空表示未出现错误,反之则说明配置了不兼容的选项: 20 | 21 | ```bash 22 | # sshd -t 23 | /etc/ssh/sshd_config line 147: Deprecated option RSAAuthentication 24 | /etc/ssh/sshd_config line 149: Deprecated option RhostsRSAAuthentication 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | - 编辑SSH服务配置文件,删除已经废除的配置项,重启sshd服务: 30 | 31 | ```bash 32 | # vim /etc/ssh/sshd_config 33 | 34 | # RSAAuthentication yes 35 | # RhostsRSAAuthentication no 36 | 37 | # systemctl restart sshd 38 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.3_应当配置登录审计规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.3 应当配置登录审计规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 用户成功登录时会在/var/log/lastlog文件中刷新记录,所以只要对该文件进行审计监控,就可以记录用户登录事件。如果不配置登录审计,管理员无法从audit日志中追溯登录事件。 10 | 11 | openEuler默认不配置登录审计规则,建议用户根据实际业务场景配置相应规则。 12 | 13 | **规则影响:** 14 | 15 | 配置登录审计,由于在文件操作时需要记录审计日志,对性能有轻微影响,但由于登录动作本身不应快速、频繁发生,用户无感知。 16 | 17 | **检查方法:** 18 | 19 | 通过执行如下指令,检查用户登录的审计规则: 20 | 21 | ```bash 22 | # auditctl -l | grep -iE "lastlog" 23 | -w /var/log/lastlog -p wa -k logins 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 在/etc/audit/rules.d/目录下新建规则文件,例如logins.rules,在文件中添加审计规则: 29 | 30 | ```bash 31 | # vim /etc/audit/rules.d/logins.rules 32 | -w /var/log/lastlog -p wa -k 33 | ``` 34 | 35 | 重启auditd服务,使规则生效: 36 | 37 | ```bash 38 | # service auditd restart 39 | Stopping logging: [ OK ] 40 | Redirecting start to /bin/systemctl start auditd.service 41 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.13_应当正确配置单个SSH连接允许的并发会话数.md: -------------------------------------------------------------------------------- 1 | ### 3.3.13 应当正确配置单个SSH连接允许的并发会话数 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SSH允许支持多路复用的客户端基于一个网络连接可以建立多个会话,MaxSessions限制每个网络连接允许建立的SSH并发会话数,可以防止系统资源被单个或少数连接无限制的占用,导致拒绝服务攻击。MaxSessions设置为1将禁用会话多路复用,即一个连接仅允许一个会话,而将其设置为0将阻止所有连接会话。 10 | 11 | openEuler默认不在配置文件中配置,代码中会取默认值10,建议根据实际场景在配置文件中配置上限值。 12 | 13 | **规则影响:** 14 | 15 | 如果单个客户端连接建立的会话数已经达到最大连接数,新建会话将被拒绝。 16 | 17 | **检查方法:** 18 | 19 | 使用grep命令查看配置,如果返回为空,表示未配置: 20 | 21 | ```bash 22 | # grep -i "^MaxSessions" /etc/ssh/sshd_config 23 | MaxSessions 10 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/ssh/sshd_config文件,配置MaxSessions字段,该字段后面配置的数字表示限制的连接会话数,重启sshd服务,例如: 29 | 30 | ```bash 31 | # vim /etc/ssh/sshd_config 32 | MaxSessions 5 33 | # systemctl restart sshd 34 | ``` 35 | 36 | 说明:假设设置MaxSessions为5,修改配置并重新启动服务后,对已经存在的SSH会话不参与计数,也就是在该SSH通道还可以新建5个会话;如果修改配置后重新启动服务器,则一个通道只能存在5个会话。 -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.1_禁止存在无属主或属组的文件或目录.md: -------------------------------------------------------------------------------- 1 | ### 1.1.1 禁止存在无属主或属组的文件或目录 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 系统中不允许存在没有属主或属组的文件或目录,这些文件或目录一般都是由于原属主账号被删除,而文件未被删除导致。 10 | 11 | 这些文件存在安全隐患,可能导致信息泄露,占用不必要的磁盘空间和系统资源,还可能影响正常业务运行。 12 | 13 | 需要注意,在容器场景中,容器和宿主机使用不同的user namespace,这导致容器中的文件在宿主机中可能为无属主或属组的目录和文件。 14 | 对于容器的rootfs,宿主机已有相应的保护措施:宿主机上的rootfs的父目录,已做了权限控制,仅root用户可以访问。对于此情况的目录和文件可例外。 15 | 16 | **规则影响:** 17 | 18 | 无 19 | 20 | **检查方法:** 21 | 22 | 通过如下两个命令,在系统根目录下查找无属主或属组的目录和文件,如果这两个命令没有返回值,表示系统中不存在无属主或属组的目录和文件: 23 | 24 | ``` 25 | # find `df -l | sed -n '2,$p' | awk '{print $6}' ` -xdev -nouser 2>/dev/null 26 | # find `df -l | sed -n '2,$p' | awk '{print $6}' ` -xdev -nogroup 2>/dev/null 27 | ``` 28 | 29 | **修复方法:** 30 | 31 | 通过rm命令删除无属主或属组的文件,此处需要注意,删除前务必确认确实为无用的文件或目录,否则可使用chown命令将目录或文件修改为正确的、且实际存在的属主或属组,方法如下: 32 | 33 | ``` 34 | # rm test -rf 35 | 或 36 | # chown test1:test1 test 37 | ``` 38 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.4_定时任务/3.4.2_确保cron守护进程正常启用.md: -------------------------------------------------------------------------------- 1 | ### 3.4.2 确保 cron 守护进程正常启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | cron 守护进程用于在系统上执行批处理作业。 10 | 11 | 即使操作系统目前可能没有需要运行的用户作业,也会有系统作业需要运行,其中就可能包括安全监控等重要作业,而 cron 守护进程就是用来执行这些作业的。cron守护进程未正常启用的影响: 12 | 1. 定时任务无法运行: 最直接的影响是配置在 cron 中的定时任务将无法自动运行。这可能会导致一些计划性的任务未能按时执行,如日志清理、备份、系统维护等。 13 | 2. 计划性任务延迟: 如果定时任务未能按时执行,可能会导致任务的延迟。这对于某些关键任务来说,可能会影响系统的正常运行和性能。 14 | 3. 系统维护和自动化受阻: 自动化任务通常用于监视系统状态、应用程序的运行情况等。如果这些任务未能按时执行,系统可能会错过对潜在问题的检测和处理。 15 | 4. 日志分析受影响: 许多系统管理员使用定时任务来执行日志分析、报告生成等任务。如果这些任务无法运行,可能会错过对系统运行情况的重要洞察。 16 | 5. 备份延误: 许多备份任务都是通过定时任务实现的。如果定时任务未运行,备份可能会受到影响,导致数据备份不及时或不完整。 17 | 18 | **规则影响:** 19 | 无 20 | 21 | **检查方法:** 22 | 23 | 执行以下命令来确定 cron 守护进程是否正常启用: 24 | 25 | ```bash 26 | # systemctl is-enabled crond 27 | enabled 28 | ``` 29 | 30 | 如结果为enabled,则视为通过此项检查。 31 | 32 | **修复方法:** 33 | 34 | 执行以下命令来启用 cron 进程: 35 | 36 | ``` 37 | # systemctl --now enable crond 38 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.2_Rsyslog/4.2.2_确保系统认证相关事件日志已记录.md: -------------------------------------------------------------------------------- 1 | ### 4.2.2 确保系统认证相关事件日志已记录 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 必须记录系统认证相关的事件,以便帮助分析用户登录、root权限使用以及监视系统的可疑动作等情况。 10 | 11 | 不记录系统认证相关事件日志,会导致无法从日志上分析可疑的攻击动作,例如攻击者尝试猜测管理员口令,而进行的登录动作。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/rsyslog.conf文件中是否已经配置auth相关字段: 20 | 21 | ```bash 22 | # grep auth /etc/rsyslog.conf | grep -v "^#" 23 | *.info;mail.none;authpriv.none;cron.none /var/log/messages 24 | authpriv.* /var/log/secure 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | 在/etc/rsyslog.conf文件添加如下设置: 30 | 31 | ```bash 32 | # vim /etc/rsyslog.conf 33 | *.info;mail.none;authpriv.none;cron.none /var/log/messages 34 | authpriv.* /var/log/secure 35 | ``` 36 | 37 | 执行如下命令,重启服务,使配置生效 38 | 39 | ```bash 40 | # systemctl restart rsyslog.service 41 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.12_应当正确设置账号有效期.md: -------------------------------------------------------------------------------- 1 | ### 2.1.12 应当正确设置账号有效期 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 账号应该根据自身的应用场景进行生命周期管理,例如临时创建的管理、维护账号;定期业务所需要的账号,业务生命周期结束,账号生命周期也结束了。对于这类账号,应该在生命周期结束时就直接删除,但由于管理原因,往往容易遗忘,所以建议管理员在创建账号的过程中,同时设定账号的过期时间。(注:系统账号可根据业务实际情况设置,系统账号通常用于系统服务及程序运行,不具备登录条件,不需要关注有效期。) 10 | 11 | 如果账号已经不再需要,但并没有被删除,也没有被禁用,那么由于该账号相关管理疏漏,有可能导致口令泄露或者账号被非法使用。例如原本用于日志维护的临时账号应该在1个月后过期,但到期后并没有被禁用,那么相应的管理人员在后续的时间内,依旧可以使用该账号登录系统,导致安全风险。 12 | 13 | **规则影响:** 14 | 15 | 过期账号无法正常登陆。 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/shadow文件中除默认账号及无法登陆的账号外,所有的账号的第8个字段是否有值,这个值是从1970年1月1日开始计算的天数累加值,例如这个值如果是1,表示账号有效期到1970年1月2日24点过期。 20 | 21 | 可以通过如下命令检查,如果设置了过期时间,则直接返回该值,否则无返回数据(test为需要检查的账号): 22 | 23 | ```bash 24 | # cat /etc/shadow | grep "test" | awk -F ":" '{if($8!=""){print $8}}' 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | 通过usermod命令设置账号的过期时间,如(test为需要被设置的账号,yyyy-mm-dd为过期时间): 30 | 31 | ```bash 32 | # usermod -e yyyy-mm-dd test 33 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.9_应当忽略所有ICMP请求.md: -------------------------------------------------------------------------------- 1 | ### 3.5.9 应当忽略所有ICMP请求 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 通过忽略所有ICMP请求,禁止外界通过ping命令访问系统。 10 | 11 | 攻击者可以通过ping命令的返回来感知系统所处的网址位置。 12 | 13 | **规则影响:** 14 | 15 | 系统忽略所有ICMP请求。 16 | 17 | **检查方法:** 18 | 19 | 首先,检查当前系统内核参数的设置。执行以下命令并检查icmp_echo_ignore_all参数的返回值,如果icmp_echo_ignore_all参数返回值为1,表示系统忽略所有ICMP请求。如果icmp_echo_ignore_all参数返回值为0,表示系统响应ICMP请求。 20 | 21 | ```bash 22 | # sysctl net.ipv4.icmp_echo_ignore_all 23 | net.ipv4.icmp_echo_ignore_all = 0 24 | ``` 25 | 26 | 其次,执行如下命令,如果返回值不为1,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为0),建议用户在配置文件中添加正确配置。 27 | 28 | ```bash 29 | # grep "net.ipv4.icmp_echo_ignore_all" /etc/sysctl.conf /etc/sysctl.d/* 30 | ``` 31 | 32 | **修复方法:** 33 | 34 | 输入命令禁止转发ICMP重定向报文: 35 | 36 | ```bash 37 | # sysctl -w net.ipv4.icmp_echo_ignore_all=1 38 | ``` 39 | 40 | 修改/etc/sysctl.conf文件,添加或修改配置: 41 | 42 | ```bash 43 | net.ipv4.icmp_echo_ignore_all=1 44 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.17_确保TIME_WAIT TCP协议等待时间已配置.md: -------------------------------------------------------------------------------- 1 | ### 3.5.17 确保TIME_WAIT TCP协议等待时间已配置 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | TIME_WAIT是TCP协议等待连接销毁的时间,设置过长会导致存在大量未关闭的TCP连接,导致遭受拒绝服务攻击,建议配置不大于60。 10 | 11 | **规则影响:** 12 | 13 | TIME_WAIT时间设置过长会导致遭受拒绝服务攻击 14 | 15 | **检查方法:** 16 | 17 | 首先,检查当前系统内核中TIME_WAIT值的设置,执行以下命令并检查tcp_fin_timeout参数的返回值。 18 | 19 | ```bash 20 | # sysctl net.ipv4.tcp_fin_timeout 21 | net.ipv4.tcp_fin_timeout = 60 22 | ``` 23 | 其次,执行如下命令,如果返回值与内核参数不一致,建议根据需求进行修改。如果返回值为空,表示系统使用默认配置(默认值为60)。 24 | 25 | ```bash 26 | # grep "^net.ipv4.tcp_fin_timeout" /etc/sysctl.conf /etc/sysctl.d/* 27 | ``` 28 | 29 | **修复方法:** 30 | 31 | * 设置TIME_WAIT tcp协议等待时间,建议不大于60,可使用如下命令临时设置,重启后恢复默认值: 32 | 33 | ```bash 34 | # sysctl -w net.ipv4.tcp_fin_timeout=60 35 | ``` 36 | 37 | * 修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl -p /etc/sysctl.conf,使其永久生效: 38 | 39 | ```bash 40 | net.ipv4.tcp_fin_timeout=60 41 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.2_防火墙/3.2.3_应当确保网络接口绑定正确区域.md: -------------------------------------------------------------------------------- 1 | ### 3.2.3 应当确保网络接口绑定正确区域 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 不同的防火墙区域可以制定不同的过滤策略,如果服务器网络比较复杂,有多个接口,且不同接口承担不同的业务功能,建议将接口配置到不同的区域,并制定不同的防火墙策略,比如外网业务接口不允许SSH访问,而内网管理接口可以开放SSH访问。如果所有接口都配置到一个区域中,防火墙策略不利于对不同接口进行不同配置,增加管理复杂度,降低防火墙安全防护的过滤效率,因配置问题,可能导致不该接收的报文未被拒绝或丢弃。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 检查各个区域配置的接口情况: 18 | 19 | ```bash 20 | # firewall-cmd --get-active-zones 21 | public 22 | interfaces: eth0 23 | work 24 | interfaces: eth1 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | 使用firewall-cmd命令从指定区域移除接口: 30 | 31 | ```bash 32 | # firewall-cmd --zone=work --remove-interface eth1 33 | success 34 | ``` 35 | 36 | 使用firewall-cmd命令往指定区域增加接口: 37 | 38 | ```bash 39 | # firewall-cmd --zone=work --add-interface eth1 40 | success 41 | ``` 42 | 43 | 使用firewall-cmd命令将当前防火墙配置固化到配置文件中,使之永久生效: 44 | 45 | ```bash 46 | # firewall-cmd --runtime-to-permanent 47 | success 48 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.24_应当开启BPF加固功能.md: -------------------------------------------------------------------------------- 1 | ### 3.5.24 应当开启BPF加固功能 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | BPF (Berkeley Packet Filter)是一个用于在运行时在内核中动态加载和执行字节码的系统。它用于许多 Linux 内核子系统,例如网络、跟踪和安全。BFP代码支持JIT编译执行和解释执行。其中JIT编译执行面临JIT喷射攻击的风险,攻击者可能利用该风险攻击内核进行提权。BPF加固功能会对JIT编译执行进行加固,缓解某些类型的JIT喷射攻击,降低内核面临的攻击风险。 10 | 11 | **规则影响:** 12 | 13 | 开启BPF加固后,会导致执行性能降低以及牺牲BPF的部分跟踪调试能力。可根据实际需求对所有BPF代码开启加固或只对非特权BPF代码开启加固。 14 | 15 | **检查方法:** 16 | 17 | 输入以下命令并检查返回的数值,其中0代表未开启加固,1代表对非特权代码开启加固,2代表对所有代码开启加固: 18 | 19 | ```bash 20 | # cat /proc/sys/net/core/bpf_jit_harden 21 | 2 22 | ``` 23 | 24 | **修复方法:** 25 | 26 | - 可以通过修改/proc/sys/net/core/bpf_jit_harden的值来开启BPF加固。请根据实际场景需求将值设置为1或2: 27 | 28 | ```bash 29 | # echo 2 > /proc/sys/net/core/bpf_jit_harden 30 | ``` 31 | 32 | - 或者通过修改/etc/sysctl.conf文件使其永久生效: 33 | 34 | ```bash 35 | net.core.bpf_jit_harden=2 36 | ``` 37 | 38 | 然后启用该配置: 39 | 40 | ```bash 41 | # sysctl -p /etc/sysctl.conf 42 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.9_确保禁用root用户通过SSH登录.md: -------------------------------------------------------------------------------- 1 | ### 3.3.9 确保禁用root用户通过SSH登录 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SSH 配置文件:/etc/ssh/sshd_config中的PermitRootLogin参数指定root用户是否可以使用ssh登录。 10 | 不允许root用户通过SSH登录:要求系统管理员使用自己的个人账户进行SSH登录,然后通过sudo或 su提升权限到root。这样可在发生安全事件时提供清晰的审计线索。 11 | 在对此项安全建议进行配置前,应确认还有其他可用的系统管理员用户账号,否则在配置生效后,将可能导致无法进行SSH远程管理。 12 | 13 | **规则影响:** 14 | 15 | 配置生效后,root用户不能通过ssh远程登录 16 | 17 | **检查方法:** 18 | 19 | 执行以下命令,验证SSH的PermitRootLogin配置是否正确(同时满足如下两个命令行的检查): 20 | 21 | ``` 22 | # sshd -T -C user=root -C host="$(hostname)" -C addr="$(grep $(hostname) /etc/hosts | awk '{print $1}')" | grep permitrootlogin 23 | permitrootlogin no 24 | # grep -Ei '^\s*PermitRootLogin\s+yes' /etc/ssh/sshd_config 25 | Nothing is returned 26 | ``` 27 | 28 | **修复方法:** 29 | 30 | 修改/etc/ssh/sshd_config文件,将PermitRootLogin字段修改为no,重启sshd服务: 31 | 32 | ``` 33 | # vim /etc/ssh/sshd_config 34 | PermitRootLogin no 35 | # systemctl restart sshd 36 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.3_确保正确配置内核参数kptr_restrict.md: -------------------------------------------------------------------------------- 1 | ### 3.5.3 确保正确配置内核参数kptr_restrict 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | kptr_restrict的作用是保护内核符号地址,保护等级低时普通用户可以访问得到内核符号地址容易被攻击者利用,增加了攻击面降低了系统安全性。 10 | 11 | 当前kptr_restrict可以选择如下参数: 12 | 13 | 0:普通用户和带有CAP_SYSLOG特权的用户均可以读取(读取地址为内核符号地址经哈希运算后的值)。 14 | 15 | 1:只有带有CAP_SYSLOG特权的用户有读取权限(读取地址为内核符号实际地址),普通用户读取后内核符号地址打印为全零。 16 | 17 | 2:普通用户及带有CAP_SYSLOG特权的用户均无权限读取,读取后内核符号地址打印为全零。 18 | 19 | 考虑到易维护性、可定位性,openEuler发行版默认配置kptr_restrict参数为0,请根据实际场景按需配置。 20 | 21 | **规则影响:** 22 | 23 | 普通用户无法获取内核符号地址。 24 | 25 | **检查方法:** 26 | 27 | 输入以下命令并检查相应的命令返回值是否为1: 28 | 29 | ```bash 30 | # sysctl kernel.kptr_restrict 31 | kernel.kptr_restrict = 1 32 | ``` 33 | 34 | **修复方法:** 35 | 36 | 建议设置kptr_restrict的值为1: 37 | 38 | ```bash 39 | # echo 1 > /proc/sys/kernel/kptr_restrict 40 | ``` 41 | 42 | 或者修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl –p /etc/sysctl.conf: 43 | 44 | ```bash 45 | kernel.kptr_restrict=1 46 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.2_防火墙/3.2.2_应当配置正确的默认区域.md: -------------------------------------------------------------------------------- 1 | ### 3.2.2 应当配置正确的默认区域 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | Firewalld服务通过区域(zone)概念,允许将防火墙划分为几个独立的规则区域,不同的接口或源地址可以绑定到不同的区域,实现不同的控制逻辑。一个区域可以配置许多不同的网络接口或源,但反过来,一个接口或源只能绑定到一个区域中,避免报文进出时无法确定执行哪个区域的规则。 10 | 11 | 如果一个区域在处理接口或源的报文时,发现并没有显式的规则匹配,此时该区域可以决定如何处理该报文,比如接收、拒绝,或者直接交由默认区域处理。 12 | 13 | 可以根据实际业务场景,配置合适的默认区域,所有未被显式划分到指定区域的接口、源地址、连接等网络资源,都应该被分配到默认区域。 14 | 15 | 如果默认区域配置不合理,则可能对未绑定到其他区域的网络资源产生非预期的影响。 16 | 17 | 如果所有网络资源都已经显式的绑定到其他区域,且已经制定详尽的规则,默认区域未配置任何规则,则默认区域将不影响业务。但这不是推荐的做法。 18 | 19 | openEuler firewalld服务共提供11种区域类型:Server、Workstation、block、dmz、drop、external、home、internal、public、trusted、work。默认配置为public。 20 | 21 | **规则影响:** 22 | 23 | 无 24 | 25 | **检查方法:** 26 | 27 | 使用firewall-cmd命令查询默认区域配置: 28 | 29 | ```bash 30 | # firewall-cmd --get-default-zone 31 | public 32 | ``` 33 | 34 | **修复方法:** 35 | 36 | 使用firewall-cmd命令配置默认区域: 37 | 38 | ```bash 39 | # firewall-cmd --set-default-zone= 40 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.4_禁止存在UID为0的非root账号.md: -------------------------------------------------------------------------------- 1 | ### 2.1.4 禁止存在UID为0的非root账号 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | UID为0的账号是linux系统中的超级管理员账号,账号名业界约定俗成为root,系统中不允许存在非root账号的UID等于0。如果将root账号UID改为其他值,而其他账号test的UID改为0,那么就会导致账号test拥有超级管理员权限,主要有以下几个问题: 10 | 11 | - 业界通用的安全扫描工具会认为账号test设置了非法UID; 12 | - 增加管理成本,如果用户在使用test账号时没有意识到是超级管理员,可能因疏忽的缘故导致系统被破坏。 13 | 14 | openEuler默认满足不存在UID为0的非root账号。 15 | 16 | **规则影响:** 17 | 18 | 无 19 | 20 | **检查方法:** 21 | 22 | 通过如下命令检查/etc/passwd文件中是否存在UID为0的非root账号,如下例子中命令执行后返回test 0,表示test账号的UID是0。如果没有UID为0的非root账号,命令无返回输出。 23 | 24 | ```bash 25 | # cat /etc/passwd | awk -F ":" '{if($1!="root" && $3==0){print $1, $3}}' 26 | test 0 27 | ``` 28 | 29 | **修复方法:** 30 | 31 | 直接修改/etc/passwd对应账号的UID字段,然后重启系统,需要确保修改的UID不能同其他账号重复。 32 | 33 | 注意:usermod命令可以修改账号UID,但如果被修改的账号UID原先为0,则会报错,因为UID为0的账号会被1号进程使用,所以只能通过手工方式直接修改/etc/passwd文件: 34 | 35 | ```bash 36 | # usermod -u 2000 test 37 | usermod: user test is currently used by process 1 38 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.4_确保用户认证密钥算法配置正确.md: -------------------------------------------------------------------------------- 1 | ### 3.3.4 确保用户认证密钥算法配置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 如果采用公私钥认证方式,则需要限制客户端公私钥算法,避免使用已经被业界淘汰的不安全算法。 10 | 11 | 推荐的安全算法如下(按优先级排序,openEuler已默认配置): 12 | 13 | ssh-ed25519 14 | 15 | ssh-ed25519-cert-v01@openssh.com 16 | 17 | rsa-sha2-256 18 | 19 | rsa-sha2-512 20 | 21 | RFC 4253中定义的ssh-rsa公钥算法使用了SHA1进行哈希运算,因此禁止使用。 22 | 23 | **规则影响:** 24 | 25 | 如果SSH客户端不支持服务端配置的公私钥算法,客户端将无法连接到SSH服务端。 26 | 27 | **检查方法:** 28 | 29 | 通过如下方法检查配置: 30 | 31 | ```bash 32 | # grep "^PubkeyAcceptedKeyTypes" /etc/ssh/sshd_config 33 | PubkeyAcceptedKeyTypes ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512 34 | ``` 35 | 36 | **修复方法:** 37 | 38 | 修改文件/etc/ssh/sshd_config的PubkeyAcceptedKeyTypes字段的算法列表,不同算法间通过逗号分隔,重启sshd服务,例如: 39 | 40 | ```bash 41 | # vim /etc/ssh/sshd_config 42 | PubkeyAcceptedKeyTypes ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512 43 | # systemctl restart sshd 44 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.6_确保SSH服务MACs算法配置正确.md: -------------------------------------------------------------------------------- 1 | ### 3.3.6 确保SSH服务MACs算法配置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 消息认证算法MACs:密码学中,通信实体双方使用的一种验证机制,保证了消息数据完整性。若配置的算法不安全,则会增加使用风险,因为弱算法在业界已经或者即将被破解。 10 | 11 | 推荐的安全算法如下(按优先级排序,openEuler已默认配置): 12 | 13 | hmac-sha2-512 14 | 15 | hmac-sha2-512-etm@openssh.com 16 | 17 | hmac-sha2-256 18 | 19 | hmac-sha2-256-etm@openssh.com 20 | 21 | **规则影响:** 22 | 23 | 如果SSH客户端不支持服务端配置的MACs算法,客户端将无法连接到SSH服务端。 24 | 25 | **检查方法:** 26 | 27 | 使用grep命令查看配置,如果返回为空,表示未配置: 28 | 29 | ```bash 30 | # grep -i "^MACs" /etc/ssh/sshd_config 31 | MACs hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com 32 | ``` 33 | 34 | **修复方法:** 35 | 36 | 修改/etc/ssh/sshd_config文件,在该文件中设置SSH消息认证算法,下面给出消息认证算法示例,用户在设置的时候应根据需要进行设置,设置好消息认证算法后需重启sshd服务使之生效: 37 | 38 | ```bash 39 | # vim /etc/ssh/sshd_config 40 | MACs hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com 41 | # systemctl restart sshd 42 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.10_避免使用auditctl设置Auditd规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.10 避免使用auditctl设置Auditd规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | auditd服务规则可以在/etc/audit/rules.d/目录下的规则文件中配置后,重启服务器生效,也可以通过auditctl命令设置,并立即生效。/etc/audit/rules.d/目录权限为750,而auditctl权限为755,所以禁止通过auditctl命令修改auditd服务规则,可以缩小攻击面,防止低权限攻击者通过命令行修改规则并立即实施攻击行为。 10 | 11 | openEuler,默认不禁止通过auditctl命令修改auditd服务规则,建议用户根据业务场景,禁用auditctl方式设置。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 通过grep命令,检查/etc/audit/rules.d/目录下是否存在特定的rules文件,包含有“-e 2”字段: 20 | 21 | ```bash 22 | # grep "-e 2" /etc/audit/rules.d/*.rules 23 | /etc/audit/rules.d/immutable.rules:-e 2 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 在/etc/audit/rules.d/目录下新建以.rules为后缀的规则文件(可随意命名),添加“-e 2”字段: 29 | 30 | ```bash 31 | # vim /etc/audit/rules.d/immutable.rules 32 | -e 2 33 | ``` 34 | 35 | 重启auditd服务,使规则生效: 36 | 37 | ```bash 38 | # service auditd restart 39 | Stopping logging: [ OK ] 40 | Redirecting start to /bin/systemctl start auditd.service 41 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.16_应当配置SELinux审计规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.16 应当配置SELinux审计规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SELinux是Linux平台提供的强制访问控制功能组件,用于对进程、文件等进行细粒度的权限控制。建议对SELinux配置文件、策略文件等配置审计,记录修改日志。如果不配置SELinux审计,如果发生非法策略修改,不利于追溯。 10 | 11 | openEuler默认不配置SELinux审计规则,建议用户根据实际业务场景进行配置。 12 | 13 | **规则影响:** 14 | 15 | 配置SELinux审计,由于在策略文件操作时需要记录审计日志,对性能有轻微影响。 16 | 17 | **检查方法:** 18 | 19 | 通过如下命令检查selinux相关审计配置: 20 | 21 | ```bash 22 | # auditctl -l | grep -iE "selinux" 23 | -w /etc/selinux -p wa -k selinux 24 | -w /usr/share/selinux -p wa -k selinux 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | 在/etc/audit/rules.d/目录下新建规则文件,例如selinux.rules,在文件中添加审计规则: 30 | 31 | ```bash 32 | # vim /etc/audit/rules.d/selinux.rules 33 | -w /etc/selinux/ -p wa -k 34 | -w /usr/share/selinux/ -p wa -k 35 | ``` 36 | 37 | 重启auditd服务,使规则生效: 38 | 39 | ```bash 40 | # service auditd restart 41 | Stopping logging: [ OK ] 42 | Redirecting start to /bin/systemctl start auditd.service 43 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.6_禁止存在全局可写的文件.md: -------------------------------------------------------------------------------- 1 | ### 1.1.6 禁止存在全局可写的文件 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 全局可写意味着所有用户都可以对文件进行写操作,通常情况下这种权限并不是必须的。如果文件被不合理的设置了全局可写权限,容易被攻击者篡改,导致安全风险。所以如果文件不得不存在全局可写的权限,需要针对实际场景分析安全风险,确保攻击者无法利用此文件进行攻击。 9 | 10 | 可以在根目录下搜索全局可写文件,需要例外的是:“/sys”、“/proc”这两个系统目录在linux运行时存在大量的全局可写文件,所以在检查时应排除这两个目录,避免混淆。 11 | 12 | **规则影响:** 13 | 14 | 无 15 | 16 | **检查方法:** 17 | 18 | 使用如下命令在根目录下进行搜索(已排除了“/sys”、“/proc”这两个目录),返回全局可写文件列表,如果返回为空,表示无全局可写文件: 19 | 20 | ```bash 21 | # find / -path /proc -prune -o -path /sys -prune -o -type f -perm -0002 -exec ls -lg {} \; 22 | -rwxrwxrwx. 1 root 0 Dec 1 17:34 /root/test 23 | ``` 24 | 25 | 也可以使用-xdev参数,只搜索指定目录所在分区的文件系统,对于其他通过mount挂载的目录不做搜索: 26 | 27 | ```bash 28 | # find / -xdev -type f -perm -0002 -exec ls -lg {} \; 29 | -rwxrwxrwx. 1 root 0 Dec 1 17:34 /root/test 30 | ``` 31 | 32 | **修复方法:** 33 | 34 | 对于不合理的权限,使用chmod命令进行修改,去除全局可写,例如: 35 | 36 | ```bash 37 | # chmod 755 test 38 | # ll test 39 | -rwxr-xr-x. 1 root root 0 Dec 1 17:34 test 40 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.7_确保_etc_passwd中的组都存在.md: -------------------------------------------------------------------------------- 1 | ### 2.1.7 确保/etc/passwd中的组都存在 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 要求在/etc/passwd中涉及到的用户组,都必须在/etc/group文件中真实存在。如果管理员通过手工方式修改这两个文件,则可能因为人为错误而导致用户组不正确。如果/etc/passwd中的用户组在/etc/group中不存在,那么将导致用户组权限管理风险。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 使用如下脚本进行检查,如果无返回输出,则表示所有用户组设置正确: 18 | 19 | ```bash 20 | #!/bin/bash 21 | 22 | grep -E -v '^(halt|sync|shutdown)' "/etc/passwd" | awk -F ":" '($7 != "/bin/false" && $7 != "/sbin/nologin") {print $4}' | while read group; 23 | do 24 | grep -q -P "^.*?:[^:]*:$group:" "/etc/group" 25 | if [ $? -ne 0 ]; then 26 | echo "Group $group not found" 27 | fi 28 | done 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 分析两个文件不匹配的原因,可以有两种修复方式: 34 | 35 | - 通过删除账号,重新添加的方式进行修复: 36 | 37 | ```bash 38 | # userdel -r test 39 | # useradd test 40 | ``` 41 | 42 | - 通过删除或添加组的方式进行修复(其中xxx表示gid的值): 43 | 44 | ```bash 45 | # groupdel testgroup 46 | # groupadd -g xxx testgroup 47 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.8_禁止SSH服务配置加密算法覆盖策略.md: -------------------------------------------------------------------------------- 1 | ### 3.3.8 禁止SSH服务配置加密算法覆盖策略 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SSH服务加密算法的配置文件为/etc/ssh/sshd_config、/etc/sysconfig/sshd。当SSH服务正在运行中,用户可以编辑/etc/sysconfig/sshd文件从而覆盖加密算法策略。如果配置加密算法覆盖策略将允许用户配置安全性较低的加密算法、消息认证算法、密钥交换算法等,降低了系统的安全性。攻击者可以利用这些不安全的算法破解系统信息,增加了安全风险。 10 | 11 | openEuler默认不配置加密算法覆盖策略。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查SSH配置文件/etc/sysconfig/sshd,如果“CRYPTO_POLICY=”字段为空或该行被注释则说明没有配置加密算法覆盖策略,反之则说明配置了加密算法覆盖策略。 20 | 21 | ```bash 22 | # grep "^\s*CRYPTO_POLICY=" /etc/sysconfig/sshd | cut -d "=" -f 2- 23 | '-oCiphers=aes256-ctr,aes192-ctr,aes128-ctr -oMACS=hmac-sha2-512,hmac-sha2-256' 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 编辑SSH服务配置文件/etc/sysconfig/sshd删除加密算法策略或注释掉该行,重新加载sshd配置。 29 | 30 | ```bash 31 | # vim /etc/sysconfig/sshd 32 | 33 | 方案 1 删除加密算法策略: 34 | CRYPTO_POLICY= 35 | 方案 2 注释该行: 36 | # CRYPTO_POLICY='-oCiphers=aes256-ctr,aes192-ctr,aes128-ctr -oMACS=hmac-sha2-512,hmac-sha2-256' 37 | 38 | # systemctl reload sshd 39 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.19_确保LD_LIBRARY_PATH变量定义正确.md: -------------------------------------------------------------------------------- 1 | ### 1.1.19 确保LD_LIBRARY_PATH变量定义正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | LD_LIBRARY_PATH是Linux的环境变量,程序加载动态链接库时,会优先从该环境变量指定的路径中获取。通常情况下该环境变量不应该被设置,如果被恶意设置为不正确的值,程序在运行时就有可能链接到不正确的动态库,导致安全风险。 10 | 注:/etc/ld.so.conf.d中配置也会影响动态库加载,需要确保正确配置。 11 | 12 | openEuler默认不设置该变量,根据实际场景,如果必须设置LD_LIBRARY_PATH,需确保在所有用户上下文中该值都是正确的。 13 | 14 | **规则影响:** 15 | 16 | 无 17 | 18 | **检查方法:** 19 | 20 | * 有多个配置文件可以永久设置LD_LIBRARY_PATH值,需要进行排查,这些文件包括:/etc/profile、~/.bashrc、~/.bash_profile,后两个文件为用户home目录下的文件,每个用户都有,检查时务必不能遗漏。 21 | 22 | 使用grep命令进行检查,举例中发现/etc/profile文件中设置了LD_LIBRARY_PATH值: 23 | 24 | ```bash 25 | # grep "LD_LIBRARY_PATH" /etc/profile ~/.bashrc ~/.bash_profile 26 | /etc/profile:export LD_LIBRARY_PATH=/home/ 27 | ``` 28 | 29 | * 检查当前用户上下文中是否存在LD_LIBRARY_PATH值,如果未设置LD_LIBRARY_PATH,则echo命令执行完以后打印为空,否则打印出当前设置的LD_LIBRARY_PATH值: 30 | 31 | ```bash 32 | # echo $LD_LIBRARY_PATH 33 | /home/ 34 | ``` 35 | 36 | **修复方法:** 37 | 38 | 删除所有配置文件中LD_LIBRARY_PATH配置项,或将其设置为正确值。 -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.16_避免开启tcp_timestamps.md: -------------------------------------------------------------------------------- 1 | ### 3.5.16 避免开启tcp_timestamps 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | tcp_timestamps用于记录TCP数据包的发送时间,可用于RTT测量(RTTM)和保护序号绕回(PAWS),是一个双向的选项,只有在客户端和服务端同时启用时才使能。启用该选项可能遭受拒绝服务攻击。 10 | 11 | **规则影响:** 12 | 13 | 关闭此项会影响TCP在极端情况下超时重传的可靠性。 14 | 15 | **检查方法:** 16 | 17 | 首先,检查当前系统内核参数的设置,执行以下命令并检查tcp_timestamps参数的返回值,如果tcp_timestamps参数返回值为1,表示开启tcp_timestamps机制。如果参数返回值为0,表示关闭tcp_timestamps机制。 18 | 19 | ```bash 20 | # sysctl net.ipv4.tcp_timestamps 21 | net.ipv4.tcp_timestamps = 1 22 | ``` 23 | 24 | 其次,执行如下命令,如果返回值不为0,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(默认值为1),建议用户在配置文件中添加正确配置。 25 | 26 | ```bash 27 | # grep "^net.ipv4.tcp_timestamps" /etc/sysctl.conf /etc/sysctl.d/* 28 | ``` 29 | 30 | **修复方法:** 31 | 32 | * 关闭tcp_timestamps,可使用如下命令临时设置,重启后恢复默认值: 33 | 34 | ```bash 35 | # sysctl -w net.ipv4.tcp_timestamps=0 36 | ``` 37 | 38 | * 修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl -p /etc/sysctl.conf,使其永久生效: 39 | 40 | ```bash 41 | net.ipv4.tcp_timestamps=0 42 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.2_Rsyslog/4.2.6_确保rsyslog转储journald日志已配置.md: -------------------------------------------------------------------------------- 1 | ### 4.2.6 确保rsyslog转储journald日志已配置 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 系统采用journald进行日志收集,日志可能存在易失性存储设备上,也有可能存储在持久性存储设备上,存在日志丢失或者日志占满磁盘等问题,及时对日志进行转储,保障日志与系统更加安全。 10 | 11 | **规则影响:** 12 | 13 | 日志如果存在易失性存储设备,不及时对日志进行转储,可能导致日志丢失。如果存在持久性存储设备上,日志量可能非常大,不及时对日志进行转储,有可能导致日志占满当前分区,导致其他进程或系统故障风险。 14 | 15 | **检查方法:** 16 | 17 | 检查/etc/rsyslog.conf文件中是否已经配置相关字段,如果返回结果不为空,表示已配置: 18 | 19 | ```bash 20 | # grep imjournal /etc/rsyslog.conf 21 | module(load="imjournal" # provides access to the systemd journal 22 | StateFile="/run/log/imjournal.state") # File to store the position in the journal 23 | ``` 24 | 25 | **修复方法:** 26 | 27 | 打开/etc/rsyslog.conf文件,新增如下设置: 28 | 29 | ```bash 30 | # vim /etc/rsyslog.conf 31 | module(load="imjournal" # provides access to the systemd journal 32 | StateFile="/run/log/imjournal.state") # File to store the position in the journal 33 | ``` 34 | 35 | 执行如下命令,重启服务,使配置生效 36 | 37 | ```bash 38 | # systemctl restart rsyslog.service 39 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.5_确保普通用户通过sudo运行特权程序.md: -------------------------------------------------------------------------------- 1 | ### 2.4.5 确保普通用户通过sudo运行特权程序 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | sudo可以使设定的普通用户以root权限执行某些特定的程序。大部分系统管理命令都需要使用root权限执行,对于系统管理员来说,适当地对其他用户授权可以减轻系统管理员负担,但直接授予普通用户root口令会带来安全风险,使用sudo则可以规避这一问题。系统中需要以root账号运行的特权程序,可以使用sudo机制避免使用root账号登录。 10 | 11 | 使用sudo代替root用户运行特权程序不仅可以减轻系统管理员负担,同时由于使用sudo时无需输入root口令,这提高了安全性。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/sudoers中是否配置了普通用户执行sudo: 20 | 21 | ```bash 22 | # grep "(root)" /etc/sudoers 23 | test_sudo ALL=(root) /bin/ping 24 | ``` 25 | 26 | 说明:示例中“/bin/ping”为可以使用sudo执行的程序。实际上,具体的程序由用户根据业务场景进行配置。 27 | 28 | **修复方法:** 29 | 30 | 修改/etc/sudoers配置文件,对需要以root执行指定特权的用户配置权限。 31 | 32 | ```bash 33 | # vim /etc/sudoers 34 | test_sudo ALL=(root) /bin/ping 35 | ``` 36 | 37 | 上一行配置一共包含四个字段,如上举例中: 38 | 39 | 第一个字段test_sudo为用户账号,实际配置时还可以指定为某一用户组,这样该用户组内的所有用户账号均可按后边的规则执行sudo; 40 | 41 | 第二个字段ALL意思是在任何主机名下都适用; 42 | 43 | 第三个字段root表明第一个字段所设定的用户账号或用户组可以切换到root下执行特权程序; 44 | 45 | 第四个字段中/bin/ping即为指定的特权程序,多个特权程序用逗号隔开。 -------------------------------------------------------------------------------- /baseline/4_日志审计/4.2_Rsyslog/4.2.4_应当正确配置rsyslog默认文件权限.md: -------------------------------------------------------------------------------- 1 | ### 4.2.4 应当正确配置rsyslog默认文件权限 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 日志文件记录了系统的行为,日志工具rsyslog能将日志记录到设定的文件中。当设定的日志文件在系统中不存在时,rsyslog能创建新日志文件。新创建的日志文件权限可在rsyslog配置文件中进行配置,通过设置默认文件权限以确保新创建的日志文件具有合理安全的权限。 10 | 11 | 若日志文件权限过大,普通用户也能读取日志,则增加了日志信息泄漏和被篡改的风险。合理的日志文件权限确保敏感的日志数据能得到保护。建议将日志权限设置为0600。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/rsyslog.conf或/etc/rsyslog.d/*.conf配置文件是否配置了合理的默认文件权限,如果指令存在返回值且FileCreateMode的值不为0600,则说明系统日志信息存在泄露和被篡改的风险,需对日志文件权限进行修复。 20 | 21 | ```bash 22 | # grep ^\$FileCreateMode /etc/rsyslog.conf /etc/rsyslog.d/*.conf 23 | /etc/rsyslog.d/sysalarm.conf:$FileCreateMode 0600 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/rsyslog.conf或/etc/rsyslog.d/*.conf,为$FileCreateMode设置合理的权限: 29 | 30 | ```bash 31 | # vim /etc/rsyslog.d/test.conf 32 | $FileCreateMode 0600 33 | ``` 34 | 35 | rsyslog.conf中默认会包含/etc/rsyslog.d/*.conf中的配置,因此配置任何一处即可。 36 | 37 | 执行如下命令,重启服务,使配置生效 38 | 39 | ```bash 40 | # systemctl restart rsyslog.service 41 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.2_应当启用enforce模式.md: -------------------------------------------------------------------------------- 1 | ### 2.4.2 应当启用enforce模式 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SELinux是Linux发行版中内置的安全模块,通过细粒度的访问控制机制,实现应用程序对资源的访问控制,从而提高系统的安全性。SELinux的运行模式有三种: 10 | 11 | * enforcing(强制模式):当访问无权限时,阻止资源访问,并记录audit日志; 12 | 13 | * permissive(宽容模式):当访问无权限时,仅记录audit日志,不阻止资源访问; 14 | 15 | * disable(禁用模式):关闭SELinux功能; 16 | 17 | SELinux只有工作在enforcing模式时才能有效启用并保护系统,若工作在其它模式,则无法对系统提供保护,而系统中的进程会默认有较大的权限(尤其是以root身份运行的进程),可能会给系统带来安全风险。 18 | 19 | **规则影响:** 20 | 21 | 系统开启enforce模式会拒绝部分高风险操作(依赖于策略配置),易用性降低。 22 | 23 | **检查方法:** 24 | 25 | 输入命令查看当前系统SELinux运行模式是否为enforcing: 26 | 27 | ```bash 28 | # getenforce 29 | Enforcing 30 | ``` 31 | 32 | 使用如下命令查看系统默认SELinux运行模式是否为enforcing: 33 | 34 | ```bash 35 | # grep "^SELINUX=" /etc/selinux/config 36 | SELINUX=enforcing 37 | ``` 38 | 39 | **修复方法:** 40 | 41 | 使用setenforce命令设置当前系统SELinux的运行模式: 42 | 43 | ```bash 44 | # setenforce 1 45 | # getenforce 46 | Enforcing 47 | ``` 48 | 49 | 设置/etc/selinux/config文件中的SELINUX参数,重启操作系统后生效: 50 | 51 | ```bash 52 | SELINUX=enforcing 53 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.1_确保auditd审计已启用.md: -------------------------------------------------------------------------------- 1 | ### 4.1.1 确保auditd审计已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | auditd组件是Linux审计框架的用户空间组件,auditd组件提供了auditctl、ausearch、aureport三个程序完成审计和查看日志功能。配置审计规则是通过auditctl程序完成的,该程序启动时从/etc/audit/audit.rules读取这些规则。后台程序本身可以通过设置/etc/audit/auditd.conf 文件来进行定制。其他两个组件分别是audispd和autrace。audispd用于给其他应用发送事件通知,而autrace则通过与strace类似的方式对系统调用进行追踪。系统中一些文件是非常重要的,是不可以轻意修改的,对于这类文件使用auditd组件对其进行审计是非常有必要的。 10 | 11 | openEuler默认要求启用audit审计功能。 12 | 13 | **规则影响:** 14 | 15 | 审计系统提供了一种记录系统安全信息的方法,为系统管理员在用户违反系统规则时提供及时的警告信息,但启用后对性能有一定影响。 16 | 17 | **检查方法:** 18 | 19 | 执行如下命令,查看auditd.service服务默认状态是否为enable 20 | 21 | ```bash 22 | # systemctl is-enabled auditd.service 23 | enabled 24 | ``` 25 | 执行如下命令,查看auditd.service服务当前是否已经启动 26 | ```bash 27 | # systemctl status auditd.service | grep active 28 | Active: active (running) since Fri 2023-10-13 08:00:00 CST; 2 days ago 29 | ``` 30 | **修复方法:** 31 | 32 | 使能并启动auditd.service: 33 | 34 | ```bash 35 | # systemctl enable auditd.service 36 | # systemctl start auditd.service 37 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.2_Rsyslog/4.2.1_确保rsyslog服务已启用.md: -------------------------------------------------------------------------------- 1 | ### 4.2.1 确保rsyslog服务已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 当前系统日志默认存储在内存,若不开启rsyslog服务,系统日志无法转储到持久性存储设备,系统重启后,会导致日志丢失。 10 | 11 | rsyslog服务用于转储、分发系统日志,具有以下特点: 12 | 13 | - 多线程工作 14 | - 支持UDP、TCP、SSL、TLS、RELP 15 | - 支持将日志存储到MySQL、PGSQL、Oracle等多种关系数据库中 16 | - 支持日志信息过滤 17 | - 自定义输出格式 18 | 19 | **规则影响:** 20 | 21 | 无 22 | 23 | **检查方法:** 24 | 25 | - 执行如下命令,查看rsyslog.service服务默认状态是否为enable 26 | 27 | ```bash 28 | # systemctl is-enabled rsyslog.service 29 | enabled 30 | ``` 31 | 32 | - 执行如下命令,查看rsyslog.service服务是否已经启动成功: 33 | 34 | ```bash 35 | # systemctl status rsyslog.service | grep Active 36 | Active: active (running) since Tue 2020-12-01 16:33:25 CST; 2h 46min ago 37 | ``` 38 | 39 | **修复方法:** 40 | 41 | - 执行如下命令,使能rsyslog.service 42 | 43 | ```bash 44 | # chkconfig rsyslog on 45 | ``` 46 | 或 47 | ```bash 48 | # systemctl enable rsyslog.service 49 | ``` 50 | - 执行如下命令,启动rsyslog.service 51 | 52 | ```bash 53 | # systemctl start rsyslog.service 54 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.2_口令/2.2.10_确保单用户模式已设置口令保护.md: -------------------------------------------------------------------------------- 1 | ### 2.2.10 确保单用户模式已设置口令保护 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 编辑grub启动菜单,在linux启动命令行添加“s”或“single”命令,可以进入单用户模式,单用户模式属于紧急救援模式,可以对系统进行修改。例如修改root口令,所以要求在进入单用户模式时,验证root口令。 10 | 11 | openEuler系统默认已经加固,进入单用户模式必须输入root口令。 12 | 13 | **规则影响:** 14 | 15 | 如果管理员忘记root口令,将无法通过单用户模式进入系统修改。 16 | 17 | **检查方法:** 18 | 19 | 通过grep命令检查rescue和emergency服务中是否使用systemd-sulogin-shell登录: 20 | 21 | ```bash 22 | # grep /systemd-sulogin-shell /usr/lib/systemd/system/rescue.service 23 | # grep /systemd-sulogin-shell /usr/lib/systemd/system/emergency.service 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | - 在/usr/lib/systemd/system/rescue.service文件中,修改ExecStart项为: 29 | 30 | ```bash 31 | # vim /usr/lib/systemd/system/rescue.service 32 | ExecStart=-/usr/lib/systemd/systemd-sulogin-shell rescue 33 | ``` 34 | 35 | - 在/usr/lib/systemd/system/emergency.service文件中,修改ExecStart项为: 36 | 37 | ```bash 38 | # vim /usr/lib/systemd/system/emergency.service 39 | ExecStart=-/usr/lib/systemd/systemd-sulogin-shell emergency 40 | ``` 41 | -------------------------------------------------------------------------------- /baseline/2_安全访问/2.2_口令/2.2.3_确保用户修改自身口令时需验证旧口令.md: -------------------------------------------------------------------------------- 1 | ### 2.2.3 确保用户修改自身口令时需验证旧口令 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 为了防止第三方恶意修改其他账户口令,用户修改自身口令时需验证旧口令。 10 | 11 | 按照业界通用做法,root账号修改自身口令时不需要验证旧口令。root账号可以直接修改/etc/passwd和/etc/shadow文件,在修改自身口令时验证旧口令无实质的安全提升,所以遵循业界通常做法,root账号在修改口令时,无需验证旧口令。而普通账号需要验证通过旧口令后,才能进行新口令的设置,否则会引发安全风险,例如:普通账号的所有者在登录系统后未锁定屏幕,而直接离开座位,附近的攻击者可以在终端上修改该普通账号的口令。 12 | 13 | 该规则为pam_unix模块默认支持,无需额外配置。 14 | 15 | **规则影响:** 16 | 17 | 普通用户如果忘记旧口令,则无法自行修改口令,降低易用性。 18 | 19 | **检查方法:** 20 | 21 | - root账号更改口令情况如下: 22 | 23 | ```bash 24 | # passwd 25 | Changing password for user root. 26 | New password: 27 | Retype new password: 28 | passwd: all authentication tokens updated successfully. 29 | ``` 30 | 31 | - 普通账号(如test)更改口令: 32 | 33 | ```bash 34 | $ passwd 35 | Changing password for user test. 36 | Changing password for test. 37 | Current password: 38 | New password: 39 | Retype new password: 40 | passwd: all authentication tokens updated successfully. 41 | ``` 42 | 43 | **修复方法:** 44 | 45 | 该规则为pam_unix模块默认支持,无需配置。 46 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.18_应当正确配置SYN_RECV状态队列数量.md: -------------------------------------------------------------------------------- 1 | ### 3.5.18 应当正确配置SYN_RECV状态队列数量 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SYN_RECV队列保存尚未获得对方确认的TCP连接请求,值越大表示可以容纳更多等待连接的网络连接数。如果配置值太小,容易被TCP SYN泛洪攻击,导致正常连接被拒绝服务;配置太大,则会消耗更多系统资源。建议队列数量设置为256。 10 | 11 | **规则影响:** 12 | 13 | 从安全角度,建议配置较大值以消减TCP SYN泛洪攻击,但配置太大,则会消耗更多系统资源,对内存较小环境,可能会影响正常业务。 14 | 15 | **检查方法:** 16 | 17 | 首先,检查当前系统内核中SYN_RECV队列数量的设置,执行以下命令并检查tcp_fin_timeout参数的返回值。 18 | 19 | ```bash 20 | # sysctl net.ipv4.tcp_max_syn_backlog 21 | net.ipv4.tcp_max_syn_backlog = 256 22 | ``` 23 | 24 | 其次,执行如下命令,如果返回值与内核参数不一致,建议根据需求进行修改。如果返回值为空,表示系统使用默认配置(默认值为256)。 25 | 26 | ```bash 27 | # grep "^net.ipv4.tcp_max_syn_backlog" /etc/sysctl.conf /etc/sysctl.d/* 28 | net.ipv4.tcp_max_syn_backlog=256 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | * 设置SYN_RECV状态队列数量,可使用如下命令临时设置,重启后恢复默认值: 34 | 35 | ```bash 36 | # sysctl -w net.ipv4.tcp_max_syn_backlog=256 37 | ``` 38 | 39 | * 修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl -p /etc/sysctl.conf,使其永久生效: 40 | 41 | ```bash 42 | net.ipv4.tcp_max_syn_backlog=256 43 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.21_禁止使用SysRq键.md: -------------------------------------------------------------------------------- 1 | ### 3.5.21 禁止使用SysRq键 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SysRq使得具有物理访问的用户能够访问计算机中危险的系统级命令,需要对SysRq的功能使用进行限制。 10 | 11 | 如果没有禁用SysRq键,则可以通过键盘触发SysRq的调用,可能造成直接发送命令到内核,对系统造成影响。 12 | 13 | openEuler默认禁止使用SysRq键。 14 | 15 | **规则影响:** 16 | 17 | 系统下sysRq相关命令无法使用 18 | 19 | **检查方法:** 20 | 21 | 首先,检查当前系统内核参数的设置。执行以下命令,如果sysrq参数返回值为0,表示禁用SysRq键。否则,表示配置不正确,建议修改配置文件内容。 22 | 23 | ```bash 24 | # cat /proc/sys/kernel/sysrq 25 | 0 26 | ``` 27 | 28 | 其次,执行如下命令,如果返回值不为0,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为0)。 29 | 30 | ```bash 31 | # grep "^kernel.sysrq" /etc/sysctl.conf /etc/sysctl.d/* 32 | /etc/sysctl.conf:kernel.sysrq=0 33 | /etc/sysctl.d/99-sysctl.conf:kernel.sysrq=0 34 | ``` 35 | 36 | **修复方法:** 37 | 38 | * 禁用SysRq,可使用如下命令临时设置,重启后恢复默认值: 39 | 40 | ```bash 41 | # echo 0 > /proc/sys/kernel/sysrq 42 | ``` 43 | 或 44 | ```bash 45 | # sysctl -w kernel.sysrq=0 46 | ``` 47 | 48 | * 修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl -p /etc/sysctl.conf,使其永久生效: 49 | 50 | ```bash 51 | kernel.sysrq=0 52 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.13_应当配置sudoers审计规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.13 应当配置sudoers审计规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | sudo命令允许普通用户提权执行root管理员权限相关的操作,属于高危操作,攻击者一般无法直接获取root权限,但通过sudo命令提权,相对比较容易。建议配置对/etc/sudoers文件以及/etc/sudoers.d/目录审计,记录读、写操作的审计日志,从而追溯是否有配置修改或读取操作(提权操作需要读取配置)。如果不配置sudoers审计,发生非法提权操作时不利于追溯。 10 | 11 | openEuler默认不配置sudoers审计规则,建议用户根据实际业务场景配置相应规则。 12 | 13 | **规则影响:** 14 | 15 | 配置sudoers审计,由于在文件操作时需要记录审计日志,对性能有轻微影响。 16 | 17 | **检查方法:** 18 | 19 | 通过如下方法,检查是否存在针对/etc/sudoers文件以及/etc/sudoers.d/目录的审计规则: 20 | 21 | ```bash 22 | # auditctl -l | grep "sudoers" 23 | -w /etc/sudoers -p wa -k sudoers 24 | -w /etc/sudoers.d -p wa -k sudoers 25 | ``` 26 | 27 | **修复方法:** 28 | 29 | 在/etc/audit/rules.d/目录下新建规则文件,例如sudoers.rules,在文件中添加审计规则: 30 | 31 | ```bash 32 | # vim /etc/audit/rules.d/sudoers.rules 33 | -w /etc/sudoers -p wa -k 34 | -w /etc/sudoers.d -p wa -k 35 | ``` 36 | 37 | 重启auditd服务,使规则生效: 38 | 39 | ```bash 40 | # service auditd restart 41 | Stopping logging: [ OK ] 42 | Redirecting start to /bin/systemctl start auditd.service 43 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.16_禁止安装调测类工具.md: -------------------------------------------------------------------------------- 1 | ### 1.2.16 禁止安装调测类工具 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 业务环境中如果包含有调测类脚本、工具,容易被攻击者利用并攻击。所以应在生产环境中严禁安装各类调测工具、文件,包括但不限于:代码调试工具,用于调测功能的提权命令、脚本、工具,调试阶段使用的证书、密钥,用于性能测试的perf工具、打点、打桩工具,用于CVE等安全问题验证的攻击脚本、工具脚本等。常见的开源第三方调测类工具包括:strace、gdb、readelf、perf等。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 编写脚本工具,在业务环境或镜像环境中通过关键字扫描来判断是否存在调测类工具,脚本中可以包含如下命令: 18 | 19 | * 查找相关rpm包是否被安装,用户可根据自身场景,在此基础上添加需要检查的所有rpm包名(此处只是举例,实际包名及范围由用户确定),如果返回为空,表示未安装,否则返回已安装的rpm包列表: 20 | 21 | ```bash 22 | # rpm -qa | grep -iE "^strace-|^gdb-|^perf-|^binutils-extra|^appict|^kmem_analyzer_tools" 23 | ``` 24 | 25 | * 查找相关命令是否被安装,用户可根据自身场景,在此基础上添加需要检查的所有命令名(此处只是举例,实际命令名及范围由用户确定),如果返回为空,表示未安装,否则返回已安装的命令列表: 26 | 27 | ```bash 28 | # find / -type f \( -name "gdb" -o -name "perf" -o -name "strace" -o -name "readelf" \) 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 如果用户业务环境中安装有调测类软件,需通过rpm命令查找并删除软件包,例如删除gdb: 34 | 35 | ```bash 36 | # rpm -e gdb 37 | ``` 38 | 39 | 或者通过rm命令手工删除gdb命令文件,但这种方式仅限于非rpm包方式安装的调测工具,且需确保删除所有相关文件: 40 | 41 | ```bash 42 | # rm /usr/bin/gdb 43 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.1_限制历史命令记录数量.md: -------------------------------------------------------------------------------- 1 | ### 2.4.1 限制历史命令记录数量 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | HISTSIZE是一个环境变量,用于控制命令历史记录的大小。具体来说,HISTSIZE定义了命令历史记录中可以存储的命令条目数量。通过设置HISTSIZE的值,可以限制或增加命令历史记录的大小,从而控制在命令行终端中可用的以前输入的命令数量。 10 | 11 | 例如,设置HISTSIZE=100将限制命令历史记录最多存储100条命令。一旦命令历史记录达到这个限制,新的命令将会覆盖最旧的命令,以保持历史记录的大小不超过指定的值。 12 | 13 | 作用:较小的历史记录可以减少敏感信息(如密码)在历史记录中被保留的风险。 14 | 15 | 建议系统限制查看历史命令的数量,建议50或100 16 | 17 | **规则影响:** 18 | 19 | 限制的值设置过小,会导致历史使用的命令不可见,易用性下降。 20 | 21 | **检查方法:** 22 | 23 | 1. 查看环境变量 HISTSIZE 设置的值: 24 | 25 | ```bash 26 | # echo $HISTSIZE 27 | 100 28 | ``` 29 | 30 | 2. 查看 profile 文件 HISTSIZE 设置的值: 31 | 32 | ```bash 33 | # grep -iP "^HISTSIZE" /etc/profile 34 | HISTSIZE=100 35 | ``` 36 | 如果检测1中输出为1-100范围,且检测2中"HISTSIZE="等于号之后输出的值为1-100的范围,说明通过检查,否则检测未通过。 37 | 38 | **修复方法:** 39 | 40 | 查看profile文件中环境变量HISTSIZE的值,运行以下命令设置历史命令记录数量为1-100范围内的值并生效即可: 41 | 42 | ```bash 43 | # grep -qiP "^HISTSIZE" /etc/profile && sed -i "/^HISTSIZE/cHISTSIZE=100" /etc/profile || echo -e "HISTSIZE=100" >> /etc/profile 44 | # source /etc/profile 45 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.2_软件/1.2.15_禁止安装网络嗅探类工具.md: -------------------------------------------------------------------------------- 1 | ### 1.2.15 禁止安装网络嗅探类工具 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 生产环境中如果包含有网络嗅探类工具,容易被攻击者利用这些工具进行网络分析,辅助网络攻击。所以应在生产环境中禁止安装各类网络嗅探、抓包分析类工具,例如tcpdump、ethereal、wireshark等。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 编写脚本工具,在生产环境或镜像环境中通过关键字扫描来判断是否存在网络嗅探类工具,脚本中可以包含如下命令: 18 | 19 | * 查找相关rpm包是否被安装,用户可根据自身场景,在此基础上添加需要检查的所有rpm包名(此处只是举例,实际包名及范围由用户确定),如果返回为空,表示未安装,否则返回已安装的rpm包列表: 20 | 21 | ```bash 22 | # rpm -qa | grep -iE "^(wireshark-|netcat-|tcpdump-|nmap-|ethereal-)" 23 | ``` 24 | 25 | * 查找相关命令是否被安装,用户可根据自身场景,在此基础上添加需要检查的所有命令名(此处只是举例,实际命令名及范围由用户确定),如果返回为空,表示未安装,否则返回已安装的命令列表: 26 | 27 | ```bash 28 | # files=`find / -type f \( -name "wireshark" -o -name "netcat" -o -name "tcpdump" -o -name "nmap" -o -name "ethereal" \) 2>/dev/null`;for f in $files;do if [ -n "$f" ];then file $f | grep -i "ELF" ;fi;done 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 如果用户业务环境中安装有网络嗅探类软件,需通过rpm命令查找并删除软件包,例如删除nmap: 34 | 35 | ```bash 36 | # rpm -e nmap 37 | ``` 38 | 39 | 或者通过rm命令手工删除nmap命令文件,但这种方式仅限于非rpm包方式安装的网络嗅探工具,且需确保删除所有相关文件: 40 | 41 | ```bash 42 | # rm /usr/bin/nmap 43 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.2 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测是否安装了tftp客户端和服务端 18 | check_tftp_installed() { 19 | if rpm -q tftp &>/dev/null; then 20 | echo "检测不通过。TFTP客户端已安装。" 21 | return 1 22 | else 23 | echo "检测通过。TFTP客户端未安装。" 24 | return 0 25 | fi 26 | } 27 | 28 | check_tftp_installed 29 | exit $? 30 | 31 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.4_定时任务/3.4.1_确保crontab执行的脚本非属主用户不可写.md: -------------------------------------------------------------------------------- 1 | ### 3.4.1 确保crontab执行的脚本非属主用户不可写 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | crontab 是系统用来执行定时任务的配置文件,配置文件路径为/etc/crontab。管理员会根据实际的业务需要定义定时任务,操作系统会自动执行该任务。所以crontabs配置文件中配置的执行脚本(程序)应该只有该脚本(程序)的属主可写,不能配置其他低权限用户可写的脚本,否则其他用户可以通过修改该脚本实现提权操作。 10 | 11 | **规则影响:** 12 | 13 | 无 14 | 15 | **检查方法:** 16 | 17 | 检查crontabs配置文件/etc/crontab,检查执行脚本(程序)是否为其他低权限用户可写。 18 | 19 | ```bash 20 | # Example of job definition: 21 | # .---------------- minute (0 - 59) 22 | # | .------------- hour (0 - 23) 23 | # | | .---------- day of month (1 - 31) 24 | # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 25 | # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 26 | # | | | | | 27 | * * * * * user-name /bin/xxx.sh 28 | # ll /bin/xxx.sh 29 | -rw-------. 1 root root 451 Mar 27 17:00 /bin/xxx.sh 30 | ``` 31 | 32 | **修复方法:** 33 | 34 | 如果/etc/crontab配置文件中的执行脚本(程序)为其他低权限用户可写,则需要根据实际的业务场景进行修复: 35 | 36 | - 修复方法1 37 | 38 | 修改/etc/crontab配置文件中的执行脚本(程序)的文件权限,去除掉其他低特权用户的可写权限,以防止提权操作。 39 | 40 | - 修复方法2 41 | 42 | 修改/etc/crontab配置文件,删除该执行脚本(程序)的配置项,防止提权操作。 -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.3 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测是否安装了telnet客户端 18 | check_telnet_installed() { 19 | if ! rpm -q telnet &>/dev/null; then 20 | echo "检测通过。Telnet客户端未安装。" 21 | return 0 22 | else 23 | echo "检测不通过。Telnet客户端已安装。" 24 | return 1 25 | fi 26 | } 27 | 28 | check_telnet_installed 29 | exit $? 30 | 31 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.4.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.4 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测是否安装了不安全的SNMP协议版本 18 | check_snmp_installed() { 19 | if rpm -qa | grep -qE "net-snmp-[0-9]"; then 20 | echo "检测不通过。SNMP版本已安装。" 21 | return 1 22 | else 23 | echo "检测通过。SNMP版本未安装。" 24 | return 0 25 | fi 26 | } 27 | 28 | check_snmp_installed 29 | exit $? 30 | 31 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.5.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.5 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测是否安装了python2 18 | check_python2_installed() { 19 | if rpm -qa | grep -q "python2-"; then 20 | echo "检测不通过。python2已安装。" 21 | return 1 22 | else 23 | echo "检测通过。python2未安装。" 24 | return 0 25 | fi 26 | } 27 | 28 | check_python2_installed 29 | exit $? 30 | 31 | -------------------------------------------------------------------------------- /baseline/4_日志审计/4.2_Rsyslog/4.2.8_应当配置远程日志服务器.md: -------------------------------------------------------------------------------- 1 | ### 4.2.8 应当配置远程日志服务器 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | rsyslog日志服务可以将本地日志发送到远端日志服务器统一保存,有利于组网环境下日志集中管理,防止本地日志占用过多硬盘空间的同时,也可以防止日志在本地被篡改。 10 | 11 | 如果不配置远程日志存储,则rsyslog日志会保存在本地文件中,管理员正确配置日志存储路径以及rotate参数的情况下,对系统及业务无影响。如果配置了远程日志存储,就必须保证日志传输过程安全,如传输日志前进行加密、通过开启安全加密通道(TCP+TLS1.2及更高版本)等方法进行日志传输。 12 | 13 | openEuler默认不配置远程日志存储,建议用户根据实际业务场景进行配置。 14 | 15 | **规则影响:** 16 | 17 | 配置远程日志存储,则需要确保日志服务器有足够的硬盘空间用于存储组网环境下所有服务器上报的日志。 18 | 19 | **检查方法:** 20 | 21 | 检查/etc/rsyslog.d/目录下配置文件中是否已经配置相关字段: 22 | 23 | ```bash 24 | # grep -irE "^*.*@*:[0-9]+$" /etc/rsyslog.d/*.conf 25 | /etc/rsyslog.d/server.conf:*.* @@9.82.213.138:11514 26 | ``` 27 | 28 | **修复方法:** 29 | 30 | 在/etc/rsyslog.d/目录下新建以conf为后缀的配置文件,例如server.conf,然后加入配置如下,其中“*.*” 指将所有的日志都打印到服务器(含义是:日志类型.日志级别,mail.info就表示只将mail的info日志打印到服务器),“@”表示使用UDP协议,“@@”表示使用TCP协议: 31 | 32 | ```bash 33 | # vim /etc/rsyslog.d/server.conf 34 | *.* @@: 35 | # 如果是IPv6,则添加如下配置: 36 | *.* @@[%]: 37 | ``` 38 | 39 | 执行如下命令,重启服务,使配置生效 40 | 41 | ```bash 42 | # systemctl restart rsyslog.service 43 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.14_确保TCP-SYN cookie保护已启用.md: -------------------------------------------------------------------------------- 1 | ### 3.5.14 确保TCP-SYN cookie保护已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | TCP-SYN cookie保护减轻了系统在遭受SYN Flooding攻击时受到的影响。 10 | 11 | 攻击者使用SYN泛洪攻击时,快速耗尽内核中半开连接队列,阻止合法连接。但启用SYN cookie,即使受到拒绝服务攻击仍允许系统继续接受合法连接。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 首先,检查当前系统内核参数的设置。执行以下命令并检查tcp_syncookies参数的返回值,如果tcp_syncookies参数返回值为1,表示启用TCP-SYN cookie保护机制。如果tcp_syncookies参数返回值为0,表示未启用TCP-SYN cookie保护机制。 20 | 21 | ```bash 22 | # sysctl net.ipv4.tcp_syncookies 23 | net.ipv4.tcp_syncookies = 1 24 | ``` 25 | 26 | 其次,执行如下命令,如果返回值不为1,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为1)。 27 | 28 | ```bash 29 | # grep "^net.ipv4.tcp_syncookies" /etc/sysctl.conf /etc/sysctl.d/* 30 | net.ipv4.tcp_syncookies=1 31 | /etc/sysctl.d/99-sysctl.conf:net.ipv4.tcp_syncookies=1 32 | ``` 33 | 34 | **修复方法:** 35 | 36 | * 启用保护,可使用如下命令临时设置,重启后恢复默认值: 37 | 38 | ```bash 39 | # sysctl -w net.ipv4.tcp_syncookies=1 40 | # sysctl -w net.ipv4.route.flush=1 41 | ``` 42 | 43 | * 修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl -p /etc/sysctl.conf,使其永久生效: 44 | ```bash 45 | net.ipv4.tcp_syncookies=1 46 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.6_禁止系统响应ICMP广播报文.md: -------------------------------------------------------------------------------- 1 | ### 3.5.6 禁止系统响应ICMP广播报文 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | ICMP是网络控制消息协议,主要用于传递查询报文与差错报文,通过设置是否接受ICMP广播报文对ICMP报文攻击进行防护。 10 | 11 | 该参数决定设备是否要回应ICMP echo消息和时间戳请求,对这些消息和请求来说,目的地址就是广播地址。无论是哪台设备发送的报文,报文都会发送到网络上的每一台设备上去。如果源地址是伪造的,就可能会导致网络上所有的设备发送恶意的echo报文给受害者(被伪造地址的设备)。 12 | 13 | **规则影响:** 14 | 15 | 系统不响应ICMP广播报文。 16 | 17 | **检查方法:** 18 | 19 | 首先,检查当前系统内核参数的设置。执行以下命令并检查icmp_echo_ignore_broadcasts参数的返回值,如果icmp_echo_ignore_broadcasts参数返回值为1,表示系统禁止响应ICMP报文。如果icmp_echo_ignore_broadcasts参数返回值为0,表示系统未禁止响应ICMP报文。 20 | 21 | ```bash 22 | # sysctl net.ipv4.icmp_echo_ignore_broadcasts 23 | net.ipv4.icmp_echo_ignore_broadcasts = 1 24 | ``` 25 | 26 | 其次,执行如下命令,如果返回值不为1,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为1)。 27 | 28 | ```bash 29 | # grep "net.ipv4.icmp_echo_ignore_broadcasts" /etc/sysctl.conf /etc/sysctl.d/* 30 | net.ipv4.icmp_echo_ignore_broadcasts=1 31 | ``` 32 | 33 | **修复方法:** 34 | 35 | 输入命令禁止系统响应ICMP广播报文: 36 | 37 | ```bash 38 | # sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 39 | ``` 40 | 41 | 修改/etc/sysctl.conf文件,添加或修改配置 42 | 43 | ```bash 44 | net.ipv4.icmp_echo_ignore_broadcasts=1 45 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.3_确保SSH密钥交换算法配置正确.md: -------------------------------------------------------------------------------- 1 | ### 3.3.3 确保SSH密钥交换算法配置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 密钥交换是密码学中双方交换密钥以允许使用某种加密算法的过程。通过安全的密钥交换算法,双方可以安全地交换密钥,从而允许使用加密算法对要发送的消息进行加密,并对接收到的消息进行解密。设置SSH密钥交换算法,限制密钥交换这一阶段所能使用的算法。要注意的是,若配置的算法不安全,则会增加使用风险,因为弱算法在业界已经或者即将被破解。 10 | 11 | 推荐的安全算法如下(按优先级排序,openEuler已默认配置): 12 | 13 | curve25519-sha256 14 | 15 | curve25519-sha256@libssh.org 16 | 17 | diffie-hellman-group-exchange-sha256 18 | 19 | 可以根据实际业务场景进行修改配置,但所选择的算法必须符合业界安全标准。 20 | 21 | **规则影响:** 22 | 23 | 如果SSH客户端不支持服务端配置的密钥交换算法,客户端将无法连接到SSH服务端。 24 | 25 | **检查方法:** 26 | 27 | 检查/etc/ssh/sshd_config中是否配置了正确的密钥交换算法的字段: 28 | 29 | ```bash 30 | # grep ^KexAlgorithms /etc/ssh/sshd_config 31 | KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 32 | ``` 33 | 34 | KexAlgorithms字段设置可用的SSH密钥交换算法,用户根据需要进行设置。 35 | 36 | **修复方法:** 37 | 38 | 修改/etc/ssh/sshd_config,在该文件中设置SSH密钥交换算法,下面给出密钥交换算法示例,用户在设置的时候应根据需要进行设置,设置好密钥交换算法后需重启sshd服务: 39 | 40 | ```bash 41 | # vim /etc/ssh/sshd_config 42 | KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 43 | # systemctl restart sshd 44 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.14_应当配置会话审计规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.14 应当配置会话审计规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 建议对/var/run/utmp、/var/log/wtmp、/var/log/btmp三个文件进行审计监控,utmp文件记录了当前所有的登录事件信息;wtmp文件记录了所有的登录、登出、关机、重启事件信息,btmp记录了登录失败事件信息。如果不配置会话审计,管理员无法从audit日志中追溯登录、登出等事件,或可追溯信息不够。 10 | 11 | openEuler默认不配置会话审计规则,建议用户根据实际业务场景进行配置。 12 | 13 | **规则影响:** 14 | 15 | 配置会话审计,由于在文件操作时需要记录审计日志,对性能有轻微影响,但由于登录、登出动作本身不应快速、频繁发生,用户无感知。 16 | 17 | **检查方法:** 18 | 19 | 通过如下方法,检查是否存在针对/var/run/utmp、/var/log/wtmp、/var/log/btmp文件的审计规则: 20 | 21 | ```bash 22 | # auditctl -l | grep -iE "utmp|wtmp|btmp" 23 | -w /var/run/utmp -p wa -k session 24 | -w /var/log/wtmp -p wa -k session 25 | -w /var/log/btmp -p wa -k session 26 | ``` 27 | 28 | **修复方法:** 29 | 30 | 在/etc/audit/rules.d/目录下新建规则文件,例如session.rules,在文件中添加审计规则: 31 | 32 | ```bash 33 | # vim /etc/audit/rules.d/session.rules 34 | -w /var/run/utmp -p wa -k 35 | -w /var/log/wtmp -p wa -k 36 | -w /var/log/btmp -p wa -k 37 | ``` 38 | 39 | 重启auditd服务,使规则生效: 40 | 41 | ```bash 42 | # service auditd restart 43 | Stopping logging: [ OK ] 44 | Redirecting start to /bin/systemctl start auditd.service 45 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.21_确保禁用SSH的TCP转发功能.md: -------------------------------------------------------------------------------- 1 | ### 3.3.21 确保禁用SSH的TCP转发功能 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 将AllowTcpForwarding设置为no的作用是禁止SSH客户端进行TCP端口转发。TCP端口转发是通过SSH隧道在本地主机和远程主机之间传输数据的功能。通过禁用这一功能,可以限制用户在SSH会话中的数据传输和访问范围,从而增强系统的安全性。 10 | 11 | 配置后具体影响如下: 12 | 13 | 1. 限制数据传输: 禁用TCP端口转发可以防止用户在SSH会话中传输数据,从而降低了可能的数据泄露风险。 14 | 2. 减少攻击面:开启TCP端口转发可能会引入一些安全风险,如允许攻击者绕过网络安全措施或访问受限制的服务。禁用这一功能可以减少系统的攻击面。 15 | 3. 避免资源滥用:TCP端口转发可能占用服务器资源和带宽,禁用它可以避免资源被滥用。 16 | 4. 符合安全最佳实践:在某些情况下,如高度安全性要求的环境,禁用TCP端口转发可能是安全最佳实践之一。 17 | 18 | **规则影响:** 19 | 20 | 禁用TCP端口转发可能会影响某些应用和用例,例如需要远程访问受限服务的情况。 21 | 22 | **检查方法:** 23 | 24 | 执行以下命令,验证SSH的allowtcpforwarding配置是否正确(同时满足如下两个命令行的检查): 25 | 26 | ```bash 27 | # sshd -T -C user=root -C host="$(hostname)" -C addr="$(grep $(hostname) /etc/hosts | awk '{print $1}')" | grep allowtcpforwarding 28 | allowtcpforwarding no 29 | # grep -Ei '^\s*AllowTcpForwarding\s+yes\b' /etc/ssh/sshd_config 30 | Nothing is returned 31 | ``` 32 | 33 | **修复方法:** 34 | 35 | 编辑/etc/ssh/sshd_config配置文件,修改AllowTcpForwarding参数,或添加以下代码,对AllowTcpForwarding参数进行配置: 36 | 37 | ```bash 38 | # vim /etc/ssh/sshd_config 39 | AllowTcpForwarding no 40 | # systemctl restart sshd 41 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.18_应当分区管理硬盘数据.md: -------------------------------------------------------------------------------- 1 | ### 1.1.18 应当分区管理硬盘数据 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 在安装操作系统时,应根据实际场景特点,将操作系统数据同业务数据分区管理,避免将所有数据放在一个硬盘或分区下,合理规划硬盘分区可以避免或降低如下风险: 10 | 11 | * 日志文件过大,导致业务或系统数据盘满; 12 | * 普通账号home目录过大,导致系统或业务盘满; 13 | * 系统分区不独立,导致盘满后,操作系统基础服务故障,引起全面DOS攻击; 14 | * 不利于权限最小化控制,不利于数据盘加密; 15 | * 盘损坏后不利于系统或数据恢复。 16 | 17 | openEuler作为通用操作系统,默认安装单独分区“/boot、/tmp、/home、/”,建议根据实际场景确定其他目录的分区挂载以及大小。 18 | 19 | **规则影响:** 20 | 21 | 无 22 | 23 | **检查方法:** 24 | 25 | 通过如下命令检查指定目录是否挂载合理,具体目录清单可根据实际情况增减,如果返回为空,表示这些目录都没有单独挂载分区,否则返回挂载列表: 26 | 27 | ```bash 28 | # df | grep -iE "/boot|/tmp|/home|/var|/usr" 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 根据实际使用场景对硬盘进行合理划分,建议如下: 34 | 35 | * 操作系统中的“/boot、/home、/tmp、/usr、/var”目录,建议在系统安装部署时同根目录“/”分开,单独分区挂载,并安装系统文件,其中“/tmp”目录一般挂载为tmpfs格式的临时内存文件系统,如果关机后用户业务不需要保持“/tmp”目录下文件持久化,可以不指定硬盘分区,操作系统自动挂载tmpfs文件系统; 36 | * 业务数据目录建议单独分区或独立硬盘、磁阵挂载; 37 | * 本地转储(或保存)的日志,建议单独分区或硬盘、磁阵挂载; 38 | * 合理分配各个分区的空间大小。 39 | 40 | 对于数据盘,可以通过mount命令进行临时挂载,例如: 41 | 42 | ```bash 43 | # mount /dev/sdb /mnt/data 44 | ``` 45 | 46 | 也可以修改/etc/fstab文件,确保下次重启后自动挂载: 47 | 48 | ```bash 49 | # echo "/dev/sdb /home/test ext4 defaults 1 1" >> /etc/fstab 50 | ``` 51 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.7.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.7 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测debug-shell服务是否启用 18 | check_debug_shell_enabled() { 19 | if systemctl is-enabled debug-shell | grep -q "disabled"; then 20 | echo "检测通过。debug-shell服务已禁用。" 21 | return 0 22 | else 23 | echo "检测不通过。debug-shell服务未禁用。" 24 | return 1 25 | fi 26 | } 27 | 28 | check_debug_shell_enabled 29 | exit $? 30 | 31 | -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.2_禁止存在空链接文件.md: -------------------------------------------------------------------------------- 1 | ### 1.1.2 禁止存在空链接文件 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 空链接文件一方面属于冗余文件,浪费系统资源,另一方面如果后续在链接目标位置安装或者创建了同名同路径的文件,但却没有清理历史上的链接文件,该目标文件就可以通过链接进行访问,可能导致文件信息泄露甚至被篡改。链接文件所指向的实际文件如果已经被删除,那么链接文件本身也就失去了存在的必要,务必同时删除,确保系统中不存在空链接文件。 10 | 11 | 需要注意,系统运行时,部分目录下存在一些系统临时文件或链接,这些是随进程动态变化的,可以作为例外忽略,这些目录常见的有:/proc、/run、/var、/sys、/dev。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用find命令在全局或某个目录下查找空链接文件,例如: 20 | 21 | ``` 22 | # find ./ -type l -follow 23 | ./testlink 24 | ``` 25 | 26 | 该命令如果返回输出为空,表示在指定目录下没有找到空链接文件,否则会返回空链接文件名,如上面例子中的testlink文件。 27 | 28 | 如果要排除某些目录不做搜索,例如排除/proc、/run、/var、/sys、/dev目录,可使用如下命令,可以搜索到/root目录下testlink是空链接文件,而部分系统目录被排除在外,未被搜索: 29 | 30 | ``` 31 | # find / -path /var -prune -o -path /run -prune -o -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type l -follow 32 | /dev 33 | /proc 34 | /root/testlink 35 | /run 36 | /var 37 | /sys 38 | ``` 39 | 40 | 也可以使用-xdev参数,只搜索指定目录所在分区的文件系统,对于其他通过mount挂载的目录不做搜索: 41 | 42 | ``` 43 | # find / -xdev -type l -follow 44 | ``` 45 | 46 | **修复方法:** 47 | 48 | 搜索到空链接文件后,使用rm命令删除该文件: 49 | 50 | ``` 51 | # find ./ -type l -follow 52 | ./testlink 53 | # rm ./testlink 54 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.10_确保丢弃伪造的ICMP报文,不记录日志.md: -------------------------------------------------------------------------------- 1 | ### 3.5.10 确保丢弃伪造的ICMP报文,不记录日志 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 将icmp_ignore_bogus_error_responses设置为1可以防止内核记录广播重复数据包的响应,从而避免文件系统填充无用的日志信息。 10 | 11 | 一些攻击者会发送违反RFC-1122的ICMP报文,并试图用大量无用的错误信息填充日志文件系统。 12 | 13 | **规则影响:** 14 | 15 | 系统丢弃伪造的ICMP报文,不记录日志 16 | 17 | **检查方法:** 18 | 19 | 首先,检查当前系统内核参数的设置。执行以下命令并检查icmp_ignore_bogus_error_responses参数的返回值,如果icmp_ignore_bogus_error_responses参数返回值为1,表示系统忽略ICMP错误响应。如果icmp_ignore_bogus_error_responses参数返回值为0,表示系统处理ICMP错误响应。 20 | 21 | ```bash 22 | # sysctl net.ipv4.icmp_ignore_bogus_error_responses 23 | net.ipv4.icmp_ignore_bogus_error_responses = 1 24 | ``` 25 | 26 | 其次,执行如下命令,如果返回值不为1,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为1)。 27 | 28 | ```bash 29 | # grep "net.ipv4.icmp_ignore_bogus_error_responses" /etc/sysctl.conf /etc/sysctl.d/* 30 | net.ipv4.icmp_ignore_bogus_error_responses = 1 31 | ``` 32 | 33 | **修复方法:** 34 | 35 | 输入丢弃伪造的ICMP报文规则的命令: 36 | 37 | ```bash 38 | # sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1 39 | # sysctl -w net.ipv4.route.flush=1 40 | ``` 41 | 42 | 修改/etc/sysctl.conf文件,添加或修改配置: 43 | 44 | ```bash 45 | net.ipv4.icmp_ignore_bogus_error_responses = 1 46 | ``` -------------------------------------------------------------------------------- /baseline/1_初始部署/1.1_文件系统/1.1.20_确保用户PATH变量被严格定义.md: -------------------------------------------------------------------------------- 1 | ### 1.1.20 确保用户PATH变量被严格定义 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | Linux下PATH变量定义的是当前用户上下文中可执行文件查找路径,例如:用户在任意目录下使用ls命令,那么系统会在PATH变量指定的目录下查找ls命令,找到后执行。所有用户上下文中的PATH变量不能包含当前目录“.”。目录必须是在文件系统中真实存在、并符合系统的设计期望的路径。正确的PATH值,可以有效防止系统命令被恶意的指令替代,确保系统命令能够安全执行。 10 | 11 | 所以PATH变量应该被定义为正确的值,openEuler系统默认设置为: 12 | 13 | /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin 14 | 15 | 可以根据实际场景对PATH进行修改,但务必确保正确。 16 | 17 | **规则影响:** 18 | 19 | 无 20 | 21 | **检查方法:** 22 | 23 | 通过echo命令可以打印出当前用户上下文中PATH的值,检查是否正确,openEuler root用户上下文中PATH值如下: 24 | 25 | ```bash 26 | # echo $PATH 27 | /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin 28 | ``` 29 | 30 | openEuler普通用户test上下文中PATH值如下: 31 | 32 | ```bash 33 | # echo $PATH 34 | /usr/local/bin:/usr/bin 35 | ``` 36 | 37 | **修复方法:** 38 | 39 | PATH环境变量分为两部分,一部分在/etc/profile文件中设置,一部分在用户目录下.bashrc或.bash_profile文件中设置,前者影响所有用户,后者只影响当前用户。 40 | 41 | 所以可以通过修改这两个文件中PATH相关字段代码,即可永久修改系统PATH变量值,例如: 42 | 43 | ```bash 44 | # vim /etc/profile 45 | export PATH=$PATH: 46 | ``` 47 | 48 | 如果只是临时修改当前会话的PATH值,可以执行如下命令,会话关闭后失效: 49 | 50 | ```bash 51 | # export PATH=$PATH: 52 | 或 53 | # export PATH= 54 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.7_确保普通用户不能借助pkexec配置提权root.md: -------------------------------------------------------------------------------- 1 | ### 2.4.7 确保普通用户不能借助pkexec配置提权root 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | pkexec命令可以使一个普通用户拥有超级用户或其他用户的权限,当验证通过后便会以超级用户的权限来执行相应的程序。pkexec为用户变更身份提供了便捷的路径,但是如果不加约束的使用pkexec命令,会给系统带来潜在的安全风险。通过对用户使用pkexec访问root账号的权限进行限制,限制了其他账号的使用。可以提高系统账号使用的安全性。 10 | 11 | openEuler默认配置使用pkexec需要验证root口令,且仅有root可获得系统管理员权限。 12 | 13 | **规则影响:** 14 | 15 | 普通用户不能使用pkexec。 16 | 17 | **检查方法:** 18 | 19 | 检查/etc/polkit-1/rules.d/50-default.rules中是否配置了仅root用户可以使用pkexec: 20 | 21 | ```bash 22 | # cat /etc/polkit-1/rules.d/50-default.rules 23 | /* -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- */ 24 | 25 | // DO NOT EDIT THIS FILE, it will be overwritten on update 26 | // 27 | // Default rules for polkit 28 | // 29 | // See the polkit(8) man page for more information 30 | // about configuring polkit. 31 | 32 | polkit.addAdminRule(function(action, subject) { 33 | return ["unix-user:0"]; 34 | }); 35 | 36 | ``` 37 | 38 | **修复方法:** 39 | 40 | 修改/etc/polkit-1/rules.d/50-default.rules配置文件,仅root用户可以使用pkexec: 41 | 42 | ```bash 43 | # vim /etc/polkit-1/rules.d/50-default.rules 44 | polkit.addAdminRule(function(action, subject) { 45 | return ["unix-user:0"]; 46 | }); 47 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.1/1.1.6.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.1.6 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测系统中是否存在全局可写文件 18 | check_global_writable_files() { 19 | local file_found=$(find / -type f -perm -0002 ! -path "/proc/*" ! -path "/sys/*" -print -quit) 20 | if [ ! -z "$file_found" ]; then 21 | echo "发现全局可写文件: $file_found" 22 | exit 1 23 | else 24 | echo "未发现全局可写文件。" 25 | exit 0 26 | fi 27 | } 28 | 29 | # 调用检测函数 30 | check_global_writable_files 31 | 32 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.12.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.12 14 | # 15 | # ####################################################################################### 16 | 17 | # 检查是否安装了ypserv软件 18 | check_ypserv_installed() { 19 | if rpm -qa | grep -q "ypserv"; then 20 | echo "NIS服务端软件ypserv已安装。" 21 | return 1 22 | else 23 | echo "NIS服务端软件ypserv未安装,符合规范要求。" 24 | return 0 25 | fi 26 | } 27 | 28 | # 执行检查 29 | check_ypserv_installed 30 | 31 | # 捕获函数返回值 32 | retval=$? 33 | 34 | # 以此值退出脚本 35 | exit $retval 36 | 37 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.13.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.13 14 | # 15 | # ####################################################################################### 16 | 17 | # 检查是否安装了ypbind软件 18 | check_ypbind_installed() { 19 | if rpm -qa | grep -q "ypbind"; then 20 | echo "NIS客户端软件ypbind已安装。" 21 | return 1 22 | else 23 | echo "NIS客户端软件ypbind未安装,符合规范要求。" 24 | return 0 25 | fi 26 | } 27 | 28 | # 执行检查 29 | check_ypbind_installed 30 | 31 | # 捕获函数返回值 32 | retval=$? 33 | 34 | # 以此值退出脚本 35 | exit $retval 36 | 37 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.23.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.23 14 | # 15 | # ####################################################################################### 16 | 17 | # 定义检测函数 18 | check_rpcbind_enabled() { 19 | # 检查rpcbind服务是否启用 20 | if systemctl is-enabled rpcbind &>/dev/null; then 21 | echo "检测不通过。rpcbind服务已启用。" 22 | return 1 23 | else 24 | echo "检测通过。rpcbind服务未启用。" 25 | return 0 26 | fi 27 | } 28 | 29 | # 调用检测函数 30 | check_rpcbind_enabled 31 | 32 | # 捕获函数返回值 33 | retval=$? 34 | 35 | # 以此值退出脚本 36 | exit $retval 37 | 38 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.24.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.24 14 | # 15 | # ####################################################################################### 16 | 17 | # 定义检测dhcpd服务是否启用的函数 18 | check_dhcpd_enabled() { 19 | # 检查dhcpd服务是否启用 20 | if systemctl is-enabled dhcpd &>/dev/null; then 21 | echo "检测不通过。DHCP服务(dhcpd)已启用。" 22 | return 1 23 | else 24 | echo "检测通过。DHCP服务(dhcpd)未启用。" 25 | return 0 26 | fi 27 | } 28 | 29 | # 调用检测函数 30 | check_dhcpd_enabled 31 | 32 | # 捕获函数返回值 33 | retval=$? 34 | 35 | # 以此值退出脚本 36 | exit $retval 37 | 38 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.23_应当启用seccomp.md: -------------------------------------------------------------------------------- 1 | ### 3.5.23 应当启用seccomp 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | seccomp(全称:secure computing mode),在刚引入linux内核时,将进程可用的系统调用限制为四种:read,write,_exit,sigreturn。最初的这种白名单方式,除了已打开的文件描述符允许的四种系统调用,如果尝试其他系统调用,内核就会使用SIGKILL或SIGSYS终止该进程。 10 | 11 | 白名单方式由于限制太强,实际作用并不大,在实际应用中需要更加精细的限制,为了解决此问题,引入了BPF。seccomp和BPF规则的结合,它允许用户使用可配置的策略过滤系统调用,该策略使用Berkeley Packet Filter规则实现,它可以对任意系统调用及其参数进行过滤。 12 | 13 | openEuler内核默认已经提供seccomp功能支持,同时提供了libseccomp外围包,帮助用户态程序可以方便的设置seccomp规则。 14 | 15 | **规则影响:** 16 | 17 | seccomp并不能全局设置启闭或规则,而是针对于每一个进程的,也就是进程可以自己设置启用seccomp,作用于自身以及所有子线程,但不影响其他进程。 18 | 19 | 如果进程启用了seccomp,在进行系统调用时会有性能损失,用户需要根据实际业务场景确定性能损失是否可接受。 20 | 21 | **检查方法:** 22 | 23 | 检查目标进程是否启用了seccomp模式,此处以检查test_seccomp进程为例,首先确定进程号: 24 | ```bash 25 | # ps -aux | grep "test_seccomp" 26 | root [PID_num] 0.0 0.0 2688 976 pts/0 S 12:35 0:00 ./test_seccomp 27 | ``` 28 | 29 | 根据获取的pid号查询进程是否启用了seccomp功能,若返回值为0代表未开启seccomp功能,1代表开启seccomp STRICT模式,2则代表该进程启用了seccomp FILTER模式。如果用户需要开启seccomp FILTER模式,则建议用户根据实际业务场景设置合理的规则: 30 | 31 | ```bash 32 | # cat /proc/[pid]/status | grep "Seccomp" 33 | Seccomp: 2 34 | ``` 35 | 36 | **修复方法:** 37 | 38 | 可以在业务进程中通过调用libseccomp接口进行seccomp相关规则的配置,具体配置方法,可以参考libseccomp的开源帮助文档。 39 | -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.7_应当配置管理员特权操作审计规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.7 应当配置管理员特权操作审计规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | openEuler系统中sudo提取命令操作日志默认记录在/var/log/secure日志文件中,该文件中还记录有其他认证相关的安全日志,如果用户希望对sudo提取命令进行audit审计,建议将sudo相关日志单独记录,输出到/var/log/sudo.log中,然后再对sudo日志文件进行审计监控。sudo提权属于高危操作,在攻击行为中比较常见,建议配置审计规则,以便事后追溯。 10 | 11 | openEuler默认不配置管理员特权操作审计规则,建议用户根据实际业务场景配置相应规则。 12 | 13 | **规则影响:** 14 | 15 | 配置审计,由于在进行任何sudo提权操作时都需要进行审计日志记录,对性能有轻微影响,如果用户业务场景中存在大量、频繁的sudo操作,对性能影响有累积效果。 16 | 17 | **检查方法:** 18 | 19 | 通过如下命令检查管理员特权操作的审计规则,其中sudo输出日志路径根据实际配置情况可能有变化: 20 | 21 | ```bash 22 | # auditctl -l | grep -iE "sudo\.log" 23 | -w /var/log/sudo.log -p wa -k sudoaction 24 | ``` 25 | 26 | **修复方法:** 27 | 28 | 修改/etc/sudoers文件,配置sudo日志独立记录到/var/log/sudo.log文件中: 29 | 30 | ```bash 31 | vim /etc/sudoers 32 | Defaults logfile=/var/log/sudo.log 33 | ``` 34 | 35 | 在/etc/audit/rules.d/目录下新建规则文件,例如sudoaction.rules,在文件中添加审计规则,此处审计的文件“/var/log/sudo.log”必须是/etc/sudoers中配置的日志输出文件: 36 | 37 | ```bash 38 | vim /etc/audit/rules.d/sudoaction.rules 39 | -w /var/log/sudo.log -p wa -k 40 | ``` 41 | 42 | 重启auditd服务,使规则生效: 43 | 44 | ```bash 45 | # service auditd restart 46 | Stopping logging: [ OK ] 47 | Redirecting start to /bin/systemctl start auditd.service 48 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.15_应当记录仿冒、源路由以及重定向报文日志.md: -------------------------------------------------------------------------------- 1 | ### 3.5.15 应当记录仿冒、源路由以及重定向报文日志 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 记录欺骗的包、源路由包和发给系统的重定向包有助于发现攻击源与制定防护措施。 10 | 11 | **规则影响:** 12 | 13 | 开启后会记录带有不允许的地址的数据到内核日志中,存在冲日志风险。 14 | 15 | **检查方法:** 16 | 17 | 首先,检查当前系统内核参数的设置。执行以下命令并检查log_martians参数的返回值,如果log_martians参数返回值为1,表示开启记录仿冒、源路由以及重定向报文日志。如果log_martians参数返回值为0,表示系统关闭记录机制。 18 | 19 | ```bash 20 | # sysctl net.ipv4.conf.all.log_martians 21 | net.ipv4.conf.all.log_martians = 0 22 | # sysctl net.ipv4.conf.default.log_martians 23 | net.ipv4.conf.default.log_martians = 0 24 | ``` 25 | 26 | 其次,执行如下命令,如果返回值不为1,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为0),建议用户在配置文件中添加正确配置。 27 | 28 | ```bash 29 | # grep "^net.ipv4.conf.all.log_martians" /etc/sysctl.conf /etc/sysctl.d/* 30 | # grep "^net.ipv4.conf.default.log_martians" /etc/sysctl.conf /etc/sysctl.d/* 31 | ``` 32 | 33 | **修复方法:** 34 | 35 | * 打开记录,可使用如下命令临时设置,重启后恢复默认值: 36 | 37 | ```bash 38 | # sysctl -w net.ipv4.conf.all.log_martians=1 39 | # sysctl -w net.ipv4.conf.default.log_martians=1 40 | ``` 41 | 42 | * 修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl -p /etc/sysctl.conf,使其永久生效: 43 | 44 | ```bash 45 | net.ipv4.conf.all.log_martians=1 46 | net.ipv4.conf.default.log_martians=1 47 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.1 14 | # 15 | # ####################################################################################### 16 | 17 | # 定义检测函数 18 | check_ftp_installed() { 19 | if rpm -q ftp &>/dev/null; then 20 | return 1 # 假设找到了ftp包,不符合要求,返回1 21 | else 22 | return 0 # 没找到ftp包,符合要求,返回0 23 | fi 24 | } 25 | 26 | # 调用检测函数 27 | check_ftp_installed 28 | 29 | # 捕获函数返回值 30 | retval=$? 31 | 32 | if [ $retval -eq 0 ]; then 33 | echo "检测通过。" 34 | else 35 | echo "检测不通过。" 36 | fi 37 | 38 | # 以此值退出脚本 39 | exit $retval 40 | 41 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.2_防火墙/3.2.11_应当启用nftables服务.md: -------------------------------------------------------------------------------- 1 | ### 3.2.12 应当启用nftables服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | nftables是Linux内核的子系统,提供对网络数据包的过滤和分类,nftables替换了Netfilter的iptables部分。与iptables相比,nftable更容易扩展到新协议,nftables将在未来替代iptables。另外,nftables不同于firewalld和iptables,操作系统默认未配置任何策略,需要管理员手工配置。 10 | 11 | 需要注意的是,openEuler默认且建议使用firewalld服务。如果必须使用nftables提供防火墙服务,则必须关闭firewalld和iptables服务。如果未启用任何防火墙服务,则将提高系统被攻击、篡改的可能。 12 | 13 | 三种防火墙服务建议只启用一种,不建议同时启用多种,如果多种防火墙规则设置不正确,可能导致规则冲突、防护混乱。 14 | 15 | **规则影响:** 16 | 17 | 如果启用多个防火墙服务,可能导致因为策略配置不一致而造成业务中断。 18 | 19 | **检查方法:** 20 | 21 | 通过如下方式检查nftables服务已经被启用,firewalld和iptables服务未被启用: 22 | 23 | ```bash 24 | # service nftables status 2>&1 | grep Active 25 | Active: active (exited) since Wed 2020-12-16 07:04:32 CST; 6s ago 26 | # service firewalld status 2>&1 | grep Active 27 | Active: inactive (dead) 28 | # service iptables status 2>&1 | grep Active 29 | Active: inactive (dead) 30 | ``` 31 | 32 | **修复方法:** 33 | 34 | 使用如下方法启用nftables服务,并配置永久生效: 35 | 36 | ```bash 37 | # service nftables start 38 | # systemctl enable nftables 39 | ``` 40 | 41 | 使用如下方法关闭firewalld和iptables服务,并配置永久生效: 42 | 43 | ```bash 44 | # service firewalld stop 45 | # service iptables stop 46 | # systemctl disable firewalld 47 | # systemctl disable iptables 48 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.10.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.10 14 | # 15 | # ####################################################################################### 16 | 17 | # 检查是否安装了openldap-servers软件 18 | check_ldap_installed() { 19 | if rpm -qa | grep -q "openldap-servers"; then 20 | echo "检查不通过,openldap-servers软件已安装。" 21 | return 1 22 | else 23 | echo "检查通过,openldap-servers软件未安装,符合规范要求。" 24 | return 0 25 | fi 26 | } 27 | 28 | # 执行检查 29 | check_ldap_installed 30 | 31 | # 捕获函数返回值 32 | retval=$? 33 | 34 | # 以此值退出脚本 35 | exit $retval 36 | 37 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.9.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.9 14 | # 15 | # ####################################################################################### 16 | 17 | # 检查avahi主服务软件是否安装 18 | check_avahi_installed() { 19 | # 使用rpm命令检查是否安装了名为 "avahi" 的包 20 | if rpm -qa --qf "%{NAME}\n" | grep -x "avahi" > /dev/null; then 21 | echo "检测失败: avahi主服务软件已安装,不符合安全规范。" 22 | return 1 23 | else 24 | echo "检测成功:avahi主服务软件未安装,符合安全规范。" 25 | return 0 26 | fi 27 | } 28 | 29 | # 执行检查 30 | check_avahi_installed; 31 | 32 | #以此值退出脚本 33 | exit $? 34 | 35 | -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.4_应当配置账号信息修改审计规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.4 应当配置账号信息修改审计规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 通常情况下,业务部署完成后,用户账号、用户组已经固定,不会变更,口令由于有效期的缘故,会定期修改,但也不频繁。建议对这些认证授权关键数据进行审计监控,如果有变更,事后也可进行追溯。修改账号、用户组、口令等行为,在攻击行为中比较常见,建议配置审计规则,以便事后追溯。 10 | 11 | openEuler默认不配置账号信息修改审计规则,建议用户根据实际业务场景配置相应规则。 12 | 13 | **规则影响:** 14 | 15 | 配置审计,由于在操作对应配置文件时需要进行审计日志记录,对性能有轻微影响,但对用户账号、用户组以及口令的修改应不频繁,实际对用户无感知。 16 | 17 | **检查方法:** 18 | 19 | 通过如下命令,检查修改账号信息的审计规则: 20 | 21 | ```bash 22 | # auditctl -l | grep -iE "passwd|group|shadow" 23 | -w /etc/group -p wa -k usermgn 24 | -w /etc/passwd -p wa -k usermgn 25 | -w /etc/gshadow -p wa -k usermgn 26 | -w /etc/shadow -p wa -k usermgn 27 | -w /etc/security/opasswd -p wa -k usermgn 28 | ``` 29 | 30 | **修复方法:** 31 | 32 | 在/etc/audit/rules.d/目录下新建规则文件,例如usermgn.rules,在文件中添加审计规则: 33 | 34 | ```bash 35 | # vim /etc/audit/rules.d/usermgn.rules 36 | -w /etc/group -p wa -k 37 | -w /etc/passwd -p wa -k 38 | -w /etc/gshadow -p wa -k 39 | -w /etc/shadow -p wa -k 40 | -w /etc/security/opasswd -p wa -k 41 | ``` 42 | 43 | 重启auditd服务,使规则生效: 44 | 45 | ```bash 46 | # service auditd restart 47 | Stopping logging: [ OK ] 48 | Redirecting start to /bin/systemctl start auditd.service 49 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.2_防火墙/3.2.14_应当正确配置nftables input策略.md: -------------------------------------------------------------------------------- 1 | ### 3.2.14 应当正确配置nftables input策略 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | input链的作用是对从外部接收的报文进行过滤,任何对外提供的服务,都需要配置对应的input策略,开启相关的端口,外部客户端才能通过该端口访问该服务。 10 | 11 | 如果未配置,由于默认策略配置为DROP,所有外部尝试访问相关业务的报文都将被丢弃。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查input链配置的策略是否满足业务需要,如下例子中开启了目标端口为22的tcp报文通道(即SSH协议的默认端口),且不限制源、目标IP地址: 20 | 21 | ```bash 22 | # nft list chain inet test input 23 | table inet test { 24 | chain input { 25 | type filter hook input priority 0; policy drop; 26 | tcp dport ssh accept 27 | } 28 | } 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 通过如下命令新增ACCEPT策略到input链: 34 | 35 | ```bash 36 | # nft add rule inet dport accept 37 | 例如: 38 | # nft add rule inet test input tcp dport ssh accept 39 | ``` 40 | 41 | 通过如下方式将当前配置的规则保存到配置文件中,以便系统重启后能够自动加载: 42 | 43 | ```bash 44 | # nft list ruleset > /etc/sysconfig/nftables.conf 45 | ``` 46 | 47 | 注意,上述方式保存配置文件会覆盖原有配置内容,亦可将当前规则导出到单独文件中,或者直接在文件中编写新规则,然后在/etc/sysconfig/nftables.conf配置文件中通过include方式加载,此种方式需要注意避免多个include规则文件内有重复规则: 48 | 49 | ```bash 50 | # nft list ruleset > /etc/nftables/new_test_rules.nft 51 | # echo "include \"/etc/nftables/new_test_rules.nft\"" >> /etc/sysconfig/nftables.conf 52 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.19_禁止使用ARP代理.md: -------------------------------------------------------------------------------- 1 | ### 3.5.19 禁止使用ARP代理 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | ARP代理允许系统代表连接到某个接口的主机向另一个接口上的ARP请求发送响应。禁用ARP代理不仅可以防止未经授权的信息共享还可以防止连接的网络区段之间寻址信息泄露。所以应关闭ARP代理以避免ARP报文攻击对系统造成影响。 10 | 11 | openEuler默认禁止使用ARP代理,用户可根据业务需求进行配置。 12 | 13 | **规则影响:** 14 | 15 | 依赖于ARP代理的程序执行受限制 16 | 17 | **检查方法:** 18 | 19 | 首先,检查当前系统内核参数的设置,执行以下命令并检查proxy_arp参数的返回值,如果proxy_arp参数返回值为1,表示开启ARP代理。如果proxy_arp参数返回值为0,表示禁止使用ARP代理。 20 | 21 | ```bash 22 | # sysctl net.ipv4.conf.all.proxy_arp 23 | net.ipv4.conf.all.proxy_arp = 0 24 | # sysctl net.ipv4.conf.default.proxy_arp 25 | net.ipv4.conf.default.proxy_arp = 0 26 | ``` 27 | 28 | 其次,执行如下命令,如果返回值不为0,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为0)。 29 | 30 | ```bash 31 | # grep "^net.ipv4.conf.all.proxy_arp" /etc/sysctl.conf /etc/sysctl.d/* 32 | # grep "^net.ipv4.conf.default.proxy_arp" /etc/sysctl.conf /etc/sysctl.d/* 33 | ``` 34 | **修复方法:** 35 | 36 | * 关闭ARP代理的命令,可使用如下命令临时设置,重启后恢复默认值: 37 | 38 | ```bash 39 | # sysctl -w net.ipv4.conf.all.proxy_arp=0 40 | # sysctl -w net.ipv4.conf.default.proxy_arp=0 41 | ``` 42 | 43 | * 修改/etc/sysctl.conf文件,添加或修改配置,并执行# sysctl -p /etc/sysctl.conf,使其永久生效: 44 | 45 | ```bash 46 | net.ipv4.conf.all.proxy_arp=0 47 | net.ipv4.conf.default.proxy_arp=0 48 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.7_确保SSH服务密码算法配置正确.md: -------------------------------------------------------------------------------- 1 | ### 3.3.7 确保SSH服务密码算法配置正确 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 随着密码技术的发展以及计算能力的提升,一些密码算法已不再适合现今的安全领域。例如MD5算法,该算法已经于2004年由山东大学王小云教授的团队予以破解(人为构造出两个具有相同MD5值的信息),并且在2007年由密码学家Marc Stevens进一步扩展和改进该攻击,实现了数字证书伪造,其安全性已非常低下,因此, MD5不应用于所有密码学安全用途,包括用于数字签名,HMAC,口令单向保护、密钥派生、RNG等,但是,对于校验线路错误、校验介质损坏引起的比特跳变等非密码学安全用途,使用MD5不受本规范约束。又比如DES算法,因为密码学分析技术的发展和计算能力提升导致对其进行暴力破解成为可能,现有的暴力破解设备能将破解DES的时间减少到一天以内。这些算法统称为不安全密码算法,如果继续使用这些不安全的密码算法,有可能为数据带来风险。 10 | 11 | 强密码算法是指当前被业界普遍认可,在其适合的应用场景下安全强度相对该场景下的其它加密算法有相对优势,在合理的安全假设下具有可证明安全性或对其实施破解在计算上显著不可行的密码算法。 12 | 13 | 密码算法用于加密解密数据,若配置的算法不安全,则会增加使用风险,因为弱算法在业界已经或者即将被破解。 14 | 15 | **规则影响:** 16 | 17 | 如果SSH客户端不支持服务端配置的加密算法,客户端将无法连接到SSH服务端。 18 | 19 | **检查方法:** 20 | 21 | 使用grep命令查看配置,如果返回为空,表示未配置: 22 | 23 | ```bash 24 | # grep -i "^Ciphers" /etc/ssh/sshd_config 25 | Ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes128-gcm@openssh.com,aes256-gcm@openssh.com 26 | ``` 27 | 28 | **修复方法:** 29 | 30 | 修改/etc/ssh/sshd_config文件,在该文件中设置SSH密码算法,下面给出密码算法示例,用户在设置的时候应根据需要进行设置,设置好密码算法后需重启sshd服务使之生效: 31 | 32 | ```bash 33 | # vim /etc/ssh/sshd_config 34 | Ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes128-gcm@openssh.com,aes256-gcm@openssh.com 35 | # systemctl restart sshd 36 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.19.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.19 14 | # 15 | # ####################################################################################### 16 | 17 | # 定义检测httpd软件是否已安装的函数 18 | check_httpd_installed() { 19 | # 使用rpm命令检查httpd软件包是否已安装 20 | if rpm -q httpd &>/dev/null; then 21 | echo "检测不通过。HTTP服务(httpd)已安装。" 22 | return 1 # httpd包已安装,不符合要求,返回1 23 | else 24 | echo "检测通过。HTTP服务(httpd)未安装。" 25 | return 0 # httpd包未安装,符合要求,返回0 26 | fi 27 | } 28 | 29 | # 调用检测函数 30 | check_httpd_installed 31 | 32 | # 捕获函数返回值,并以此值退出脚本 33 | exit $? 34 | 35 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.2_防火墙/3.2.15_应当正确配置nftables output策略.md: -------------------------------------------------------------------------------- 1 | ### 3.2.15 应当正确配置nftables output策略 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 服务器外发报文主要有两种情况,一种是主机进程主动连接外部服务器,比如http访问,或者外发数据到日志服务器等,另一种是外部访问本机服务,本机进行回复的报文。 10 | 11 | 如果未配置output策略,由于默认策略是DROP,服务器所有外发报文都将被丢弃。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 检查output链配置的策略是否满足业务需要,如下例子中开启了源端口为22的tcp报文通道(即SSH协议的默认端口),且不限制源、目标IP地址: 20 | 21 | ```bash 22 | # nft list chain inet test output 23 | table inet test { 24 | chain output { 25 | type filter hook output priority 0; policy drop; 26 | tcp sport ssh accept 27 | } 28 | } 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 通过如下命令新增ACCEPT策略到output链: 34 | 35 | ```bash 36 | # nft add rule inet
sport accept 37 | 例如: 38 | # nft add rule inet test output tcp sport ssh accept 39 | ``` 40 | 41 | 通过如下方式将当前配置的规则保存到配置文件中,以便系统重启后能够自动加载: 42 | 43 | ```bash 44 | # nft list ruleset > /etc/sysconfig/nftables.conf 45 | ``` 46 | 47 | 注意,上述方式保存配置文件会覆盖原有配置内容,亦可将当前规则导出到单独文件中,或者直接在文件中编写新规则,然后在/etc/sysconfig/nftables.conf配置文件中通过include方式加载,此种方式需要注意避免多个include规则文件内有重复规则: 48 | 49 | ```bash 50 | # nft list ruleset > /etc/nftables/new_test_rules.nft 51 | # echo "include \"/etc/nftables/new_test_rules.nft\"" >> /etc/sysconfig/nftables.conf 52 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.1/1.1.5.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.1.5 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测UMASK是否设置为0077 18 | check_umask_setting() { 19 | if grep -q "umask 077" /etc/profile /etc/bashrc ~/.bashrc; then 20 | echo "UMASK 已正确设置为 077。" 21 | exit 0 22 | else 23 | echo "UMASK 未设置为 077。" 24 | exit 1 25 | fi 26 | } 27 | 28 | # 调用函数并处理返回值 29 | if check_umask_setting;then 30 | #echo "检查通过。" 31 | exit 0 # 检查通过,脚本成功退出 32 | else 33 | #echo "检查未通过,存在未设置粘滞位的全局可写目录。" 34 | exit 1 # 检查未通过,脚本以失败退出 35 | fi 36 | 37 | 38 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.4_确保内核SMAP已启用.md: -------------------------------------------------------------------------------- 1 | ### 3.5.4 确保内核SMAP已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 内核参数SMAP(Supervisor Mode Access Prevention,管理模式访问保护),开启后禁止内核访问用户空间的数据。若不开启SMAP内核参数,攻击者可以利用通过内核态代码重定向的方式访问用户空间数据,增加了攻击面降低了系统安全性。 10 | 11 | openEuler默认开启SMAP。 12 | 13 | **规则影响:** 14 | 15 | 内核不能访问用户空间数据。 16 | 17 | **检查方法:** 18 | 19 | 输入以下命令并检查是否有返回值,如果有返回值则说明cpu支持SMAP,反之则说明不支持SMAP: 20 | 注:仅X86架构支持SMAP特性(物理机、虚拟机均支持),其他架构可忽略该项。 21 | 22 | ```bash 23 | # cat /proc/cpuinfo | grep "smap" 24 | flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt arat umip arch_capabilities 25 | ``` 26 | 27 | 通过检查启动参数检验是否开启SMAP,若有返回值则说明未开启,反之则说明开启。 28 | 29 | ```bash 30 | # cat /proc/cmdline | grep -i "nosmap" 31 | ``` 32 | 33 | **修复方法:** 34 | 35 | 若关闭了SMAP选项,需要编辑grub.cfg文件,在启动参数中删除nosmap选项。 36 | 37 | ```bash 38 | # vim /boot/efi/EFI/openEuler/grub.cfg 39 | ``` -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.5_确保内核SMEP已启用.md: -------------------------------------------------------------------------------- 1 | ### 3.5.5 确保内核SMEP已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 内核参数SMEP(Supervisor Mode Execution Prevention,管理模式执行保护),开启后禁止内核执行用户空间代码。若不开启SMEP内核参数,攻击者可以利用通过内核态代码重定向的方式执行用户空间代码,增加了攻击面降低了系统安全性。 10 | 11 | openEuler默认开启SMEP。 12 | 13 | **规则影响:** 14 | 15 | 内核不能执行用户空间代码。 16 | 17 | **检查方法:** 18 | 19 | 输入以下命令并检查是否有返回值,如果有返回值则说明cpu支持SMEP,反之则说明不支持SMEP: 20 | 注:仅X86架构支持SMEP特性(物理机、虚拟机均支持),其他架构可忽略该项。 21 | 22 | ```bash 23 | # cat /proc/cpuinfo | grep "smep" 24 | flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt arat umip arch_capabilities 25 | ``` 26 | 27 | 通过检查启动参数检验是否开启SMEP,若有返回值则说明未开启,反之则说明开启。 28 | 29 | ```bash 30 | # cat /proc/cmdline | grep -i "nosmep" 31 | ``` 32 | 33 | **修复方法:** 34 | 35 | 若关闭了SMEP选项,需要编辑grub.cfg文件,在启动参数中删除nosmep选项。 36 | 37 | ```bash 38 | # vim /boot/efi/EFI/openEuler/grub.cfg 39 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.2_确保审计日志rotate已启用.md: -------------------------------------------------------------------------------- 1 | ### 4.1.2 确保审计日志rotate已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | max_log_file_action用于配置日志文件到达大小上限时该如何处理,openEuler默认配置ROTATE,表示单个文件写满后会重新创建日志文件进行记录,不会删除原先的日志文件。 10 | 11 | num_logs表示基于ROTATE机制,最多可以创建多少个日志文件,如果日志文件数量达到上限,则会依次覆盖最早创建的文件。openEuler默认配置为5。 12 | 13 | num_logs取值范围为0~99,其中0和1表示不做rotate。 14 | 15 | max_log_file_action一共有5种可选配置项: 16 | 17 | IGNORE:表示忽略日志文件大小上限,继续在该文件上记录日志。 18 | 19 | SYSLOG:同IGNORE类似,只是达到上限时会记录一条syslog日志。 20 | 21 | SUSPEND:达到日志文件大小上限,auditd服务进程停止日志记录。 22 | 23 | ROTATE:达到日志文件大小上限,新建日志文件继续记录,如果文件数达到num_logs,则覆盖旧文件。 24 | 25 | KEEP_LOGS:同ROTATE类似,只是不受num_logs限制,会一直新建文件。 26 | 27 | **规则影响:** 28 | 29 | rotate会按照配置,在日志文件达到写入上限之后依次覆盖最早创建的文件。 30 | 31 | **检查方法:** 32 | 33 | 使用如下命令检查当前配置: 34 | 35 | ```bash 36 | # grep -iE "max_log_file_action|num_logs" /etc/audit/auditd.conf 37 | num_logs = 5 38 | max_log_file_action = ROTATE 39 | ``` 40 | 41 | **修复方法:** 42 | 43 | 修改/etc/audit/auditd.conf文件中max_log_file_action和num_logs字段的值: 44 | 45 | ```bash 46 | # vim /etc/audit/auditd.conf 47 | num_logs = 48 | max_log_file_action = 49 | ``` 50 | 51 | 重启auditd服务,使配置生效: 52 | 53 | ```bash 54 | # service auditd restart 55 | Stopping logging: [ OK ] 56 | Redirecting start to /bin/systemctl start auditd.service 57 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.1_账户/2.1.6_确保账号拥有自己的Home目录.md: -------------------------------------------------------------------------------- 1 | ### 2.1.6 确保账号拥有自己的Home目录 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 每个用户账号必须有自己的Home目录,用来存放账号相关的数据,该目录的属主必须是用户自身。如果Home目录属主不是自身,那么可能无法对该目录进行读写,或者该目录下保存的用户数据可以被其他用户(如属主)读取或篡改。如果没有Home目录,则用户账号登录后将无法获取到自身的环境配置数据。 10 | 11 | openEuler默认满足每个账户拥有自己的Home目录。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 使用如下脚本进行检查,如果无返回输出,则表示所有用户账号均有Home目录,目录属主正确: 20 | 21 | ```bash 22 | #!/bin/bash 23 | 24 | grep -E -v '^(halt|sync|shutdown)' "/etc/passwd" | awk -F ":" '($7 != "/bin/false" && $7 != "/sbin/nologin" && $7 != "/usr/sbin/nologin") {print $1 " " $6}' | while read name home; 25 | do 26 | if [ ! -d "$home" ]; then 27 | echo "No home folder \"$home\" of \"$name\"." 28 | else 29 | owner=`ls -l -d $home | awk -F " " '{print $3}'` 30 | if [ "$owner" != "$name" ]; then 31 | echo "\"$home\" is owned by $owner, not \"$name\"." 32 | fi 33 | fi 34 | done 35 | ``` 36 | 37 | **修复方法:** 38 | 39 | - 删除相应的用户账号: 40 | 41 | ```bash 42 | # userdel -r test 43 | userdel: test home directory (/home/test) not found 44 | ``` 45 | 46 | - 使用useradd命令添加用户账号(同时自动创建Home目录): 47 | 48 | ```bash 49 | # useradd test 50 | # ll -d /home/test/ 51 | drwx------. 2 test test 4096 Feb 2 13:19 /home/test/ 52 | ``` -------------------------------------------------------------------------------- /baseline/2_安全访问/2.4_访问控制/2.4.3_应当正确配置SELinux策略.md: -------------------------------------------------------------------------------- 1 | ### 2.4.3 应当正确配置SELinux策略 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SELinux的策略分为两种,系统基础策略和自定义策略: 10 | 11 | 基础策略:定义在基础策略包中的策略,包括selinux-policy、selinux-policy-targeted、selinux-policy-mls等。 12 | 13 | 自定义策略:用户修改或添加的策略。 14 | 15 | SELinux可以实现进程级别的强制访问控制,通过根据最小权限原则配置合理的策略,限制系统中关键应用和关键资源的行为,可以提高系统的安全性。 16 | 17 | 如果未对应用程序配置合理的策略,可能产生两种影响: 18 | 19 | * 如果未对应用程序配置策略,应用程序有可能运行在unconfined_t或其他权限较大的域,若被攻击可能对系统或业务造成较大影响; 20 | 21 | * 如果为应用程序配置了不合理的策略,有可能影响应用程序的正常运行。 22 | 23 | **规则影响:** 24 | 25 | 无 26 | 27 | **检查方法:** 28 | 29 | 运行以下命令查看当前系统策略,建议配置为targeted: 30 | 31 | ```bash 32 | # sestatus | grep 'Loaded policy name' 33 | Loaded policy name: targeted 34 | ``` 35 | 36 | 运行以下命令,输出为空,表示无异常规则和异常访问行为,若不为空,需要分析被禁止的访问行为是否为正常访问行为,如果为正常访问行为,则需要修改策略: 37 | 38 | ```bash 39 | # grep avc /var/log/audit/audit.log* 40 | ``` 41 | 42 | **修复方法:** 43 | 44 | 设置基础策略包为targeted策略包: 45 | 46 | * 安装目标基础策略包: 47 | 48 | ```bash 49 | # yum install selinux-policy-targeted 50 | ``` 51 | 52 | * 设置/etc/selinux/config文件中的SELINUXTYPE参数以修改系统基础策略包: 53 | 54 | ```bash 55 | # SELINUXTYPE=targeted 56 | ``` 57 | 58 | * 在根目录下创建.autorelabel文件,用于系统重启后刷新文件标签: 59 | 60 | ```bash 61 | # touch /.autorelabel 62 | ``` 63 | 64 | * 重启操作系统。 65 | 66 | 若应用程序运行异常,需要为应用程序配置合理的SELinux策略。 -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.11.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.11 14 | # 15 | # ####################################################################################### 16 | 17 | # 检查cups主服务软件是否安装 18 | check_cups_installed() { 19 | # 使用rpm命令检查是否安装了名为 "cups" 的包 20 | if rpm -qa --qf "%{NAME}\n" | grep -x "cups" > /dev/null; then 21 | echo "检测失败: cups主服务软件已安装,不符合安全规范。" 22 | return 1 23 | else 24 | echo "检测成功:cups主服务软件未安装,符合安全规范。" 25 | return 0 26 | fi 27 | } 28 | 29 | 30 | # 执行检查 31 | check_cups_installed 32 | 33 | # 捕获函数返回值 34 | retval=$? 35 | 36 | # 以此值退出脚本 37 | exit $retval 38 | 39 | -------------------------------------------------------------------------------- /scripts/checks/3/3.5/3.5.25.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 3.5.25 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 此脚本用于检查是否开启内核模块签名加固。 19 | # 此脚本启动命令行中是否设置module.sig_enforce。 20 | 21 | check_mod_sign() { 22 | if ! grep -q 'module.sig_enforce' /proc/cmdline; then 23 | echo "检测失败: 系统未启用内核模块签名" 24 | return 1 25 | else 26 | echo "检查成功: 系统已启用内核模块签名" 27 | return 0 28 | fi 29 | } 30 | 31 | # 调用函数并处理返回值 32 | if check_mod_sign; then 33 | exit 0 # 检查通过,脚本成功退出 34 | else 35 | exit 1 # 检查未通过,脚本以失败退出 36 | fi 37 | 38 | -------------------------------------------------------------------------------- /baseline/2_安全访问/2.6_数据安全/2.6.2_应当设置全局加解密策略配置不低于DEFAULT.md: -------------------------------------------------------------------------------- 1 | ### 2.6.2 应当设置全局加解密策略配置不低于DEFAULT 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 系统全局加解密策略用于指定加解密组件允许的算法,通过修改/etc/crypto-policies/config配置文件可以改变预置的安全策略级别,从而改变应用程序可使用的算法集。 10 | 11 | openEuler系统默认配置DEFAULT策略,提供LEGACY、DEFAULT、NEXT、FUTURE、FIPS可供选择,建议用户设置不低于DEFAULT的策略级别,即禁止设置LEGACY模式。 12 | 13 | LEGACY:LEGACY策略可确保与旧系统的最大兼容性,但是该策略的安全性较低。该策略提供的安全级别至少为64位。 14 | DEFAULT:DEFAULT策略是符合当前标准的默认策略。该策略提供的安全级别至少为80位。 15 | NEXT:NEXT策略是为即将发布的操作系统准备的策略。该策略提供的安全级别至少为112位(注:DNSSec所需的SHA-1签名和其他仍普遍使用的SHA-1签名除外)。 16 | FUTURE:FUTURE策略为安全级别较高的策略,可以抵御近期大多数的攻击方式。该策略提供的安全级别至少为128位。 17 | FIPS:FIPS策略是符合FIPS 140-2要求的策略。该策略提供的安全级别至少为112位。 18 | 19 | **规则影响:** 20 | 21 | 如果全局加解密策略设置过于宽松,将允许使用不安全加解密算法,降低系统整体安全性。 22 | 23 | 如果全局加解密策略设置过于严格,则可能由于客户端不支持更加安全的加解密算法,而导致存在兼容性问题。 24 | 25 | 如果业务程序未使用系统加解密模块,而是自行调用第三方加解密算法库进行操作,则不受影响。 26 | 27 | **检查方法:** 28 | 29 | 检查环境中/etc/crypto-policies/config文件是否未配置LEGACY模式,如果返回信息为空,或者仅返回位于注释信息中的LEGACY字段,表示未配置LEGACY: 30 | 31 | ```bash 32 | # cat /etc/crypto-policies/config | grep "LEGACY" 33 | ``` 34 | 35 | 亦可通过如下方式检查当前配置的模式: 36 | 37 | ```bash 38 | # cat /etc/crypto-policies/config | grep -v "^#" 39 | DEFAULT 40 | ``` 41 | 42 | **修复方法:** 43 | 44 | 在/etc/crypto-policies/config文件中配置合适的策略: 45 | 46 | ```bash 47 | # vim /etc/crypto-policies/config 48 | DEFAULT 49 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.21.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.21 14 | # 15 | # ####################################################################################### 16 | 17 | # 函数:检查DNS服务(named)是否已启用 18 | check_dns_service_enabled() { 19 | # 检查DNS服务(named)是否已启用 20 | if systemctl is-enabled named &>/dev/null; then 21 | echo "DNS服务(named)已启用。如果不需要作为DNS服务器,请考虑禁用它。" 22 | return 1 # 如果服务已启用,则返回1 23 | else 24 | echo "DNS服务(named)已禁用或未安装。" 25 | return 0 # 如果服务已禁用或未安装,则返回0 26 | fi 27 | } 28 | 29 | # 调用函数 30 | check_dns_service_enabled 31 | 32 | # 捕获函数返回值 33 | retval=$? 34 | 35 | exit $retval 36 | -------------------------------------------------------------------------------- /scripts/checks/2/2.1/2.1.8.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 2.1.8 14 | # 15 | # ####################################################################################### 16 | 17 | # 检查/etc/passwd中UID的唯一性 18 | check_unique_uid() { 19 | # 使用awk检查UID是否唯一 20 | local duplicate_uids=$(awk -F':' '{print $3}' /etc/passwd | sort | uniq -d) 21 | 22 | if [ -n "$duplicate_uids" ]; then 23 | echo "检测失败: 发现重复的UID" 24 | echo "$duplicate_uids" 25 | return 1 26 | else 27 | echo "检测成功: 所有UID均唯一" 28 | return 0 29 | fi 30 | } 31 | 32 | # 调用函数并处理返回值 33 | if check_unique_uid; then 34 | exit 0 35 | else 36 | exit 1 37 | fi 38 | 39 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.14.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.14 14 | # 15 | # ####################################################################################### 16 | 17 | # 检查是否安装了openldap-clients软件 18 | check_openldap_clients_installed() { 19 | if rpm -qa | grep -q "openldap-clients"; then 20 | echo "LDAP客户端软件openldap-clients已安装,不符合安全规范。" 21 | return 1 # 表示检测不通过 22 | else 23 | echo "LDAP客户端软件openldap-clients未安装,符合安全规范。" 24 | return 0 # 表示检测通过 25 | fi 26 | } 27 | 28 | # 执行检查 29 | check_openldap_clients_installed 30 | 31 | # 捕获函数返回值 32 | retval=$? 33 | 34 | # 以此值退出脚本 35 | exit $retval 36 | 37 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.18.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.18 14 | # 15 | # ####################################################################################### 16 | 17 | #!/bin/bash 18 | 19 | # 检测X Window系统的组件是否已安装 20 | check_x_window_installed() { 21 | # 使用rpm命令查找所有与X Window系统相关的包,但不直接输出结果 22 | if rpm -qa | grep -E "xorg-x11" &>/dev/null; then 23 | echo "检测不通过。已安装X Window系统的组件。" 24 | return 1 25 | else 26 | echo "检测通过。X Window系统的组件未安装。" 27 | return 0 28 | fi 29 | } 30 | 31 | # 执行检查 32 | check_x_window_installed 33 | 34 | # 捕获函数返回值 35 | retval=$? 36 | 37 | # 以此值退出脚本 38 | exit $retval 39 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for FTP using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载FTP客户端,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本修复FTP 33 | bash "$TEMPLATE_SCRIPT" "ftp" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | 43 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.22.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.22 14 | # 15 | # ####################################################################################### 16 | 17 | # 函数:检查NFS服务(nfs-server)是否已启用 18 | check_nfs_service_enabled() { 19 | # 检查NFS服务是否已启用 20 | if systemctl is-enabled nfs-server &>/dev/null; then 21 | echo "NFS服务(nfs-server)已启用。如果不需要作为NFS服务器,请考虑禁用它。" 22 | return 1 # 如果服务已启用,则返回1 23 | else 24 | echo "NFS服务(nfs-server)已禁用或未安装。" 25 | return 0 # 如果服务已禁用或未安装,则返回0 26 | fi 27 | } 28 | 29 | # 调用函数 30 | check_nfs_service_enabled 31 | 32 | # 捕获函数返回值 33 | exit $? 34 | 35 | # 以此值退出脚本 36 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for TFTP using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载TFTP客户端,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本修复FTP 33 | bash "$TEMPLATE_SCRIPT" "tftp" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | 43 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.4.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for SNMP using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载SNMP客户端,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本修复SNMP客户端 33 | bash "$TEMPLATE_SCRIPT" "net-snmp" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.9.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for FTP using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载FTP客户端,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本修复FTP 33 | bash "$TEMPLATE_SCRIPT" "avahi" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | 43 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.3_SSH/3.3.22_应当正确配置认证黑白名单.md: -------------------------------------------------------------------------------- 1 | ### 3.3.22 应当正确配置认证黑白名单 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | SSH提供了黑白名单功能,可以设置账号或用户组的清单,允许或禁止某些账号或用户组的用户登录SSH,openEuler默认不配置,相关字段如下: 10 | 11 | AllowUsers 12 | 13 | userlist是空格分割的允许登录的账号,不支持uid,可以是user@host格式,user和host将被单独检查,限制特定账号从特定主机上登录,名称里面可使用通配符*和?。配置后将自动禁止系统其他非授权账号登录ssh服务。 14 | 15 | AllowGroups 16 | 17 | grouplist是空格分隔的允许登录的用户组名称,不支持gid 18 | 19 | DenyUsers 20 | 21 | userlist是空格分隔的拒绝登录的账号,不支持uid 22 | 23 | DenyGroups 24 | 25 | grouplist是空格分隔的拒绝登录的用户组名称,不支持gid 26 | 27 | 建议直接删除不使用的用户账号或用户组,而不是通过DenyUsers/DenyGroups进行拒绝登录。如果针对某个账号只允许或拒绝在某些客户端登录,可以通过user@host方式配置Allow或Deny规则。 28 | 29 | Allow或Deny规则如果同时设置,则取并集,也就是说如果设置了Allow规则,那么被允许的用户账号或用户组之外的,都不允许登录;同时设置了Deny规则,那么在遵循Allow规则后,允许登录的用户账号或用户组范围内再匹配是否符合Deny规则,排除以后剩下的才是可以登录的。 30 | 31 | **规则影响:** 32 | 33 | 配置Allow规则,被允许的用户账号或用户组之外的,都不允许登录;配置Deny规则,拒绝登录的用户账号或用户组将无法登录。 34 | 35 | **检查方法:** 36 | 37 | 使用grep命令检查是否存在配置,如果无返回信息,则表示没有任何配置,否则返回配置内容: 38 | 39 | ```bash 40 | # grep "^AllowUsers\|^AllowGroups\|^DenyUsers\|^DenyGroups" /etc/ssh/sshd_config 41 | ``` 42 | 43 | **修复方法:** 44 | 45 | 根据业务实际场景,在/etc/ssh/sshd_config文件中添加相关Allow或Deny字段,重启sshd服务,例如: 46 | 47 | ```bash 48 | # vim /etc/ssh/sshd_config 49 | AllowUsers root test 50 | DenyUsers test1 51 | # systemctl restart sshd 52 | ``` -------------------------------------------------------------------------------- /baseline/4_日志审计/4.1_Audit/4.1.21_应当配置文件系统挂载审计规则.md: -------------------------------------------------------------------------------- 1 | ### 4.1.21 应当配置文件系统挂载审计规则 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 通常情况下,业务部署完成后,文件系统挂载已经固定,不会变更。如果发生变更,可能存在攻击行为,建议对这些文件系统挂载进行审计监控,如果有变更,事后也可进行追溯。 10 | 11 | openEuler默认不配置文件系统挂载审计规则,建议用户根据实际业务场景配置相应规则。 12 | 13 | **规则影响:** 14 | 15 | 配置审计,由于在文件系统挂载时需要进行审计日志记录,对性能有轻微影响,但文件系统挂载相关操作应不频繁,实际对用户无感知。 16 | 17 | **检查方法:** 18 | 19 | 如果是32位系统,通过如下命令检查配置: 20 | 21 | ```bash 22 | # auditctl -l | grep -iE "mount" 23 | -a always,exit -F arch=b32 -S mount -F auid>=1000 -F auid!=-1 -F key=mount 24 | ``` 25 | 如果是64位系统,还需有如下配置: 26 | 27 | ```bash 28 | -a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=-1 -F key=mount 29 | ``` 30 | 31 | **修复方法:** 32 | 33 | 如果是32位系统,在/etc/audit/rules.d/目录下新建规则文件,例如mount.rules,在文件中添加审计规则,此处\是/etc/login.defs文件中UID_MIN的值,openEuler上默认是1000: 34 | 35 | ```bash 36 | # vim /etc/audit/rules.d/mount.rules 37 | -a always,exit -F arch=b32 -S mount -F auid>= -F auid!=unset -k 38 | ``` 39 | 如果是64位系统,需要再添加arch=b64相关配置: 40 | 41 | ```bash 42 | -a always,exit -F arch=b64 -S mount -F auid>= -F auid!=unset -k 43 | ``` 44 | 考虑兼容性,64位系统中arch=b32相关配置必须保留。 45 | 重启auditd服务,使规则生效: 46 | 47 | ```bash 48 | # service auditd restart 49 | Stopping logging: [ OK ] 50 | Redirecting start to /bin/systemctl start auditd.service 51 | ``` -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.11.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Removing CUPS using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载CUPS服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本卸载CUPS 33 | bash "$TEMPLATE_SCRIPT" "cups" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Telnet using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载Telnet客户端,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本修复Telnet 33 | bash "$TEMPLATE_SCRIPT" "telnet" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.5.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Python2 using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载Python2,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本修复Python2 33 | bash "$TEMPLATE_SCRIPT" "python2" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/checks/1/1.2/1.2.20.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.2.20 14 | # 15 | # ####################################################################################### 16 | 17 | # 定义检测函数 18 | check_samba_installed() { 19 | # 模拟一些检测逻辑 20 | # 这里应该是您的检测逻辑,比如检测是否安装了某个软件包 21 | if rpm -q samba &>/dev/null; then 22 | return 1 # 假设找到了samba包,不符合要求,返回1 23 | else 24 | return 0 # 没找到samba包,符合要求,返回0 25 | fi 26 | } 27 | 28 | # 调用检测函数 29 | check_samba_installed 30 | 31 | # 捕获函数返回值 32 | retval=$? 33 | 34 | if [ $retval -eq 0 ]; then 35 | echo "检测通过。" 36 | else 37 | echo "检测不通过,samba已经安装。" 38 | fi 39 | 40 | # 以此值退出脚本 41 | exit $retval 42 | 43 | -------------------------------------------------------------------------------- /scripts/checks/3/3.5/3.5.3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 3.5.3 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明:检查 kptr_restrict 参数是否设置为1 18 | 19 | function check_kptr_restrict() { 20 | local current_value=$(sysctl -n kernel.kptr_restrict) 21 | if [ "$current_value" -eq 1 ]; then 22 | echo "检查通过: kptr_restrict 设置正确。" 23 | return 0 24 | else 25 | echo "检测失败: kptr_restrict 当前值为 $current_value,应设置为 1。" 26 | return 1 27 | fi 28 | } 29 | 30 | # 调用检查函数并处理返回值 31 | if check_kptr_restrict; then 32 | exit 0 33 | else 34 | exit 1 35 | fi 36 | 37 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.21.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Disabling DNS Services using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,禁用DNS服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/service_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本禁用named服务 33 | bash "$TEMPLATE_SCRIPT" "named" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.24.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Disabling DHCP Services using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,禁用DHCP服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/service_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本禁用dhcpd服务 33 | bash "$TEMPLATE_SCRIPT" "dhcpd" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.23.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Disabling RPC Services using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,禁用RPC服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/service_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本禁用rpcbind服务 33 | bash "$TEMPLATE_SCRIPT" "rpcbind" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.8.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Disabling Rsync Service using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,禁用rsync服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/service_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本禁用rsync服务 33 | bash "$TEMPLATE_SCRIPT" "rsyncd" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.12.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Removing NIS (ypserv) using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载NIS服务(ypserv),确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本卸载NIS服务(ypserv) 33 | bash "$TEMPLATE_SCRIPT" "ypserv" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.22.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Disabling NFS Services using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,禁用NFS服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/service_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本禁用nfs-server服务 33 | bash "$TEMPLATE_SCRIPT" "nfs-server" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.8_禁止转发ICMP重定向报文.md: -------------------------------------------------------------------------------- 1 | ### 3.5.8 禁止转发ICMP重定向报文 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | ICMP重定向用于向其他主机发送路由信息。由于主机本身不充当路由器,因此没有必要转发ICMP重定向数据包。 10 | 11 | 攻击者可以利用受到攻击的主机向其他路由器设备发送无效的ICMP重定向,试图破坏路由,并让用户访问错误的系统。 12 | 13 | **规则影响:** 14 | 15 | 系统不转发ICMP重定向报文。 16 | 17 | **检查方法:** 18 | 19 | 首先,检查当前系统内核参数的设置。执行以下命令并检查send_redirects参数的返回值,如果send_redirects参数返回值为1,表示系统转发ICMP重定向报文。如果send_redirects参数返回值为0,表示系统不转发ICMP重定向报文。 20 | 21 | ```bash 22 | # sysctl net.ipv4.conf.all.send_redirects 23 | net.ipv4.conf.all.send_redirects = 0 24 | # sysctl net.ipv4.conf.default.send_redirects 25 | net.ipv4.conf.default.send_redirects = 0 26 | ``` 27 | 28 | 其次,执行如下命令,如果返回值不为0,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为0)。 29 | 30 | ```bash 31 | # grep "net.ipv4.conf.all.send_redirects" /etc/sysctl.conf /etc/sysctl.d/* 32 | net.ipv4.conf.all.send_redirects=0 33 | # grep "net.ipv4.conf.default.send_redirects" /etc/sysctl.conf /etc/sysctl.d/* 34 | net.ipv4.conf.default.send_redirects=0 35 | ``` 36 | 37 | **修复方法:** 38 | 39 | 输入命令禁止转发ICMP重定向报文: 40 | 41 | ```bash 42 | # sysctl -w net.ipv4.conf.all.send_redirects=0 43 | # sysctl -w net.ipv4.conf.default.send_redirects=0 44 | # sysctl -w net.ipv4.route.flush=1 45 | ``` 46 | 47 | 修改/etc/sysctl.conf文件,添加或修改配置: 48 | 49 | ```bash 50 | net.ipv4.conf.all.send_redirects=0 51 | net.ipv4.conf.default.send_redirects=0 52 | ``` -------------------------------------------------------------------------------- /scripts/checks/2/2.4/2.4.2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 2.4.2 14 | # 15 | # ####################################################################################### 16 | 17 | # 函数:检查SELinux是否处于强制模式 18 | check_selinux_enforcing() { 19 | local current_mode=$(getenforce) 20 | local config_mode=$(grep "^SELINUX=" /etc/selinux/config | cut -d'=' -f2 | tr -d ' ') 21 | 22 | if [[ "$current_mode" != "Enforcing" || "$config_mode" != "enforcing" ]]; then 23 | echo "检测失败:SELinux未配置为强制模式。" 24 | return 1 25 | else 26 | echo "检测成功:SELinux已配置为强制模式。" 27 | return 0 28 | fi 29 | } 30 | 31 | # 调用函数并处理返回值 32 | check_selinux_enforcing 33 | exit $? 34 | 35 | -------------------------------------------------------------------------------- /scripts/checks/2/2.4/2.4.4.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 2.4.4 14 | # 15 | # ####################################################################################### 16 | 17 | # 函数:检查su受限使用 18 | check_su_restriction() { 19 | local pamFile="/etc/pam.d/su" 20 | local expectedSetting="auth\s+required\s+pam_wheel.so\s+use_uid" 21 | 22 | # 检查pam_wheel.so模块的配置 23 | if grep -Eq "$expectedSetting" "$pamFile"; then 24 | echo "检查成功:su使用受到正确限制。" 25 | return 0 26 | else 27 | echo "检查失败:su使用未受到正确限制。" 28 | return 1 29 | fi 30 | } 31 | 32 | # 调用函数并处理返回值 33 | if check_su_restriction; then 34 | exit 0 35 | else 36 | exit 1 37 | fi 38 | 39 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.10.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Removing LDAP using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载openldap-servers服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本卸载openldap-servers 33 | bash "$TEMPLATE_SCRIPT" "openldap-servers" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.13.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Removing NIS Client (ypbind) using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载NIS客户端(ypbind),确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本卸载NIS客户端(ypbind) 33 | bash "$TEMPLATE_SCRIPT" "ypbind" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.7.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Disabling Debug-Shell using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,禁用debug-shell服务,确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/service_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本禁用debug-shell服务 33 | bash "$TEMPLATE_SCRIPT" "debug-shell" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /scripts/checks/4/4.2/4.2.2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 4.2.2 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测是否配置了系统认证相关日志 18 | check_auth_logs() { 19 | # 搜索rsyslog配置中关于认证日志的配置 20 | local auth_log_config=$(grep auth /etc/rsyslog.conf | grep -v "^#") 21 | 22 | # 检测是否包含authpriv.* 23 | if echo "$auth_log_config" | grep -q "authpriv.*"; then 24 | echo "检查通过: 系统认证相关日志已配置。" 25 | return 0 26 | else 27 | echo "检测失败: 系统认证相关日志未配置。" 28 | return 1 29 | fi 30 | } 31 | 32 | # 调用检测函数并处理返回值 33 | if check_auth_logs; then 34 | exit 0 35 | else 36 | exit 1 37 | fi 38 | 39 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.5_内核/3.5.11_确保反向地址过滤已启用.md: -------------------------------------------------------------------------------- 1 | ### 3.5.11 确保反向地址过滤已启用 2 | 3 | **级别:** 要求 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 将net.ipv4.conf.all.rp_filter和net.ipv4.conf.default.rp_filter设置为1,强制Linux内核对接收到的数据包使用反向路径过滤,检查报文源地址的合法性,如果反查源地址的路由表,发现源地址下一跳的最佳出接口并不是收到报文的入接口,则将报文丢弃。 10 | 11 | 攻击者可以实施IP地址欺骗,在目前网络攻击中使用比较多。通过反向地址过滤在收到数据包时,取出源IP地址,然后查看该路由器的路由表中是否有该数据包的路由信息。如果路由表中没有其用于数据返回的路由信息,那么极有可能是某人伪造了该数据包,于是路由便把它丢弃。 12 | 13 | **规则影响:** 14 | 15 | 无 16 | 17 | **检查方法:** 18 | 19 | 首先,检查当前系统内核参数的设置。执行以下命令,检查rp_filter参数的返回值是否为1。 20 | 21 | ```bash 22 | # sysctl net.ipv4.conf.all.rp_filter 23 | net.ipv4.conf.all.rp_filter = 1 24 | # sysctl net.ipv4.conf.default.rp_filter 25 | net.ipv4.conf.default.rp_filter = 1 26 | ``` 27 | 28 | 其次,执行如下命令,如果返回值不为1,表示配置不正确,建议修改配置文件内容。如果返回值为空,表示系统使用默认配置(值为1)。 29 | 30 | ```bash 31 | # grep "net.ipv4.conf.all.rp_filter" /etc/sysctl.conf /etc/sysctl.d/* 32 | net.ipv4.conf.all.rp_filter = 1 33 | # grep "net.ipv4.conf.default.rp_filter" /etc/sysctl.conf /etc/sysctl.d/* 34 | net.ipv4.conf.default.rp_filter = 1 35 | ``` 36 | 37 | **修复方法:** 38 | 39 | 输入启用反向地址过滤的命令: 40 | 41 | ```bash 42 | # sysctl -w net.ipv4.conf.all.rp_filter=1 43 | # sysctl -w net.ipv4.conf.default.rp_filter=1 44 | # sysctl -w net.ipv4.route.flush=1 45 | ``` 46 | 47 | 修改/etc/sysctl.conf文件,添加或修改配置: 48 | 49 | ```bash 50 | net.ipv4.conf.all.rp_filter = 1 51 | net.ipv4.conf.default.rp_filter = 1 52 | ``` -------------------------------------------------------------------------------- /scripts/checks/1/1.1/1.1.17.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 1.1.17 14 | # 15 | # ####################################################################################### 16 | 17 | # 检测是否禁用了USB存储 18 | check_usb_storage_disabled() { 19 | local usb_storage_status=$(modprobe -n -v usb-storage) 20 | 21 | if [[ "$usb_storage_status" == *"install /bin/true"* ]]; then 22 | echo "USB存储已被禁用。" 23 | return 0 # 检查通过 24 | else 25 | echo "USB存储未被禁用。" 26 | return 1 # 检查未通过 27 | fi 28 | } 29 | 30 | # 调用检测函数 31 | if check_usb_storage_disabled; then 32 | #echo "检查通过,不存在无属主或属组的文件或目录。" 33 | exit 0 # 检查通过,脚本成功退出 34 | else 35 | #echo "检查未通过。" 36 | exit 1 # 检查未通过,脚本以失败退出 37 | fi 38 | -------------------------------------------------------------------------------- /scripts/checks/3/3.5/3.5.26.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 3.5.26 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 此脚本用于检查是否禁用kexec。 19 | # 此脚本检查/proc/sys/kernel/kexec_load_disabled是否设置为1。 20 | 21 | check_kexec() { 22 | local current_value=$(cat /proc/sys/kernel/kexec_load_disabled) 23 | if [[ "$current_value" -eq 0 ]]; then 24 | echo "检测失败: 系统未关闭kexec" 25 | return 1 26 | else 27 | echo "检查成功: 系统已关闭kexec" 28 | return 0 29 | fi 30 | } 31 | 32 | # 调用函数并处理返回值 33 | if check_kexec; then 34 | exit 0 # 检查通过,脚本成功退出 35 | else 36 | exit 1 # 检查未通过,脚本以失败退出 37 | fi 38 | 39 | -------------------------------------------------------------------------------- /scripts/checks/3/3.5/3.5.24.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 3.5.24 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 此脚本用于检查BPF是否开启加固。 19 | # 此脚本检查/proc/sys/net/core/bpf_jit_harden是否为非0值。 20 | 21 | check_bpf_harden() { 22 | local current_value=$(cat /proc/sys/net/core/bpf_jit_harden) 23 | if [[ "$current_value" -eq 0 ]]; then 24 | echo "检测失败: 系统未启用BPF加固" 25 | return 1 26 | else 27 | echo "检查成功: 系统已启用BPF加固" 28 | return 0 29 | fi 30 | } 31 | 32 | # 调用函数并处理返回值 33 | if check_bpf_harden; then 34 | exit 0 # 检查通过,脚本成功退出 35 | else 36 | exit 1 # 检查未通过,脚本以失败退出 37 | fi 38 | 39 | -------------------------------------------------------------------------------- /scripts/checks/3/3.5/3.5.27.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 3.5.27 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 此脚本用于检查是否开启内核oops退出功能。 19 | # 此脚本检查/proc/sys/kernel/panic_on_oops是否设置为1。 20 | 21 | check_oops() { 22 | local current_value=$(cat /proc/sys/kernel/panic_on_oops) 23 | if [[ "$current_value" -eq 0 ]]; then 24 | echo "检测失败: 系统未启用panic_on_oops" 25 | return 1 26 | else 27 | echo "检查成功: 系统已启用panic_on_oops" 28 | return 0 29 | fi 30 | } 31 | 32 | # 调用函数并处理返回值 33 | if check_oops; then 34 | exit 0 # 检查通过,脚本成功退出 35 | else 36 | exit 1 # 检查未通过,脚本以失败退出 37 | fi 38 | 39 | -------------------------------------------------------------------------------- /scripts/checks/2/2.4/2.4.10.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Check Script for 2.4.10 14 | # 15 | # ####################################################################################### 16 | 17 | # 定义检查标签为unconfined_service_t的进程的函数 18 | check_unconfined_service_t_processes() { 19 | # 使用ps和grep命令检查是否存在标签为unconfined_service_t的进程 20 | if ps -eZ | grep -q 'unconfined_service_t'; then 21 | echo "检测失败: 系统中存在标签为unconfined_service_t的进程。" 22 | # 打印具体的进程信息以便进一步分析 23 | ps -eZ | grep 'unconfined_service_t' 24 | return 1 25 | else 26 | echo "检测成功: 系统中没有标签为unconfined_service_t的进程。" 27 | return 0 28 | fi 29 | } 30 | 31 | # 调用检查函数 32 | check_unconfined_service_t_processes 33 | exit $? 34 | 35 | -------------------------------------------------------------------------------- /scripts/fixes/1/1.2/1.2.14.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ####################################################################################### 3 | # 4 | # Copyright (c) KylinSoft Co., Ltd. 2024. All rights reserved. 5 | # SecureGuardian is licensed under the Mulan PSL v2. 6 | # You can use this software according to the terms and conditions of the Mulan PSL v2. 7 | # You may obtain a copy of Mulan PSL v2 at: 8 | # http://license.coscl.org.cn/MulanPSL2 9 | # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 10 | # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 11 | # PURPOSE. 12 | # See the Mulan PSL v2 for more details. 13 | # Description: Security Baseline Fix Script for Removing LDAP Client (openldap-clients) using Template 14 | # 15 | # ####################################################################################### 16 | 17 | # 功能说明: 18 | # 本脚本用于调用模板脚本,卸载LDAP客户端(openldap-clients),确保系统符合安全基线要求。 19 | 20 | # 获取当前脚本所在的目录 21 | SCRIPT_DIR=$(dirname "$0") 22 | 23 | # 模板脚本的相对路径 24 | TEMPLATE_SCRIPT="$SCRIPT_DIR/rpm_fix_template.sh" 25 | 26 | # 检查是否是自测模式 27 | if [[ "$1" == "--self-test" ]]; then 28 | echo "软件类暂无实现自测程序" 29 | exit 0 30 | fi 31 | 32 | # 调用模板脚本卸载LDAP客户端(openldap-clients) 33 | bash "$TEMPLATE_SCRIPT" "openldap-clients" 34 | 35 | # 检查修复结果 36 | if [[ $? -eq 0 ]]; then 37 | exit 0 38 | else 39 | exit 1 40 | fi 41 | 42 | -------------------------------------------------------------------------------- /baseline/3_运行和服务/3.2_防火墙/3.2.1_应当启用firewalld服务.md: -------------------------------------------------------------------------------- 1 | ### 3.2.1 应当启用firewalld服务 2 | 3 | **级别:** 建议 4 | 5 | **适用版本:** 全部 6 | 7 | **规则说明:** 8 | 9 | 防火墙作为一种网络或系统之间强制实行访问控制的机制,是确保网络安全的重要手段。针对不同的需求和应用环境,可以量身定制出不同的防火墙系统。如果系统中没有配置防火墙服务,可能会导致系统被外部攻击、内部数据被窃取或篡改,大量无效流量浪费带宽、访问一些存在安全风险或业务无关的网站导致信息泄露。 10 | 11 | 对于连接到网络上的Linux系统来说,防火墙是必不可少的防御机制,它只允许合法的网络流量进出系统,而禁止其它任何网络流量,例如只限定允许的IP地址访问其SSH服务。因而,可以定制防火墙配置来满足任何特定需求和任何安全性需求。 12 | 13 | openEuler提供firewalld、iptables、nftables三种常用的防火墙服务配置界面,其中firewalld底层实际调用iptables或nftables机制。 14 | 15 | openEuler默认且建议启用firewalld服务,并关闭iptables、nftables服务。 16 | 17 | 三种防火墙服务建议只启用一种,不建议同时启用多种,如果多种防火墙规则设置不正确,可能导致规则冲突、防护混乱。 18 | 19 | **规则影响:** 20 | 21 | 防火墙配置错误可能起不到防护作用,还有可能会导致正常的业务无法通信。 22 | 23 | **检查方法:** 24 | 25 | 通过如下命令检查firewalld服务已经启用,并且iptables和nftables服务未被启用: 26 | 27 | ```bash 28 | # service firewalld status 2>&1 | grep Active 29 | Active: active (running) since Wed 2021-02-03 00:14:10 CST; 14h ago 30 | # service iptables status 2>&1 | grep Active 31 | Active: inactive (dead) 32 | # service nftables status 2>&1 | grep Active 33 | Active: inactive (dead) 34 | ``` 35 | 36 | **修复方法:** 37 | 38 | 使用如下方法启用firewalld服务,并配置永久生效: 39 | 40 | ```bash 41 | # service firewalld start 42 | # systemctl enable firewalld 43 | ``` 44 | 45 | 使用如下方法关闭iptables和nftables服务,并配置永久生效: 46 | 47 | ```bash 48 | # service iptables stop 49 | # service nftables stop 50 | # systemctl disable iptables 51 | # systemctl disable nftables 52 | ``` --------------------------------------------------------------------------------