Linux操作系统安全加固¶
概述¶
Linux 安全加固是提升系统抗攻击能力的关键措施,也是安全测试和等保合规的核心工作。本文从身份鉴别、访问控制、安全审计、漏洞补丁等多个维度,系统介绍了 Linux 系统的安全加固方法和实践。
Linux安全加固概述¶
什么是安全加固?¶
安全加固:在信息系统上线前或运行过程中,通过配置优化、漏洞修复、策略调整等技术手段,消除或减少系统的安全风险,提升系统的抗攻击能力。
加固的意义:防患于未然。与其被攻击后紧急修复,不如提前做好防护,降低被攻击的概率和攻击成功后的损失。
基线检查¶
基线(Baseline):经过专家评审、实践验证的最低安全配置要求。
- 阿里云安全基线:https://help.aliyun.com/document_detail/68386.html
- 基线检查工具:自动化扫描系统配置是否符合安全基线要求
加固依据的标准¶
| 标准 | 全称 | 说明 |
|---|---|---|
| GB/T 25070-2019 | 《信息安全技术 网络安全等级保护安全设计技术要求》 | 等保2.0安全设计标准 |
| GB/T 36627-2018 | 《信息安全技术 网络安全等级保护测试评估技术指南》 | 等保测评指南 |
专业解读:中国的"网络安全等级保护制度"(简称"等保")是法律强制要求(《网络安全法》)。运营者应当按照要求开展等保定级、备案、测评、整改。等保2.0于2019年12月1日正式实施,覆盖范围从传统信息系统扩展到云计算、物联网、移动互联、工业控制等新兴领域。
身份鉴别加固¶
删除多余、无用账号¶
系统中存在的无用账号是潜在的安全风险点,攻击者可能利用这些账号进行枚举或暴力破解。
专业解读:应重点检查以下账号:测试账号、离职员工账号、共享账号、默认安装的应用账号(如test、guest、demo等)。
密码策略加固¶
检查空口令¶
空口令(无密码)账号是极大的安全隐患,任何人都可以直接登录。
口令有效期配置¶
编辑 /etc/login.defs 文件,设置密码过期策略:
| 参数 | 说明 | 建议值 |
|---|---|---|
PASS_MAX_DAYS |
密码最长有效期(天数) | 90 |
PASS_MIN_DAYS |
密码最短有效期(天数) | 7 |
PASS_MIN_LEN |
密码最小长度 | 8 |
PASS_WARN_AGE |
密码过期前多少天开始提醒用户 | 7 |
专业解读:
login.defs只对新创建的用户生效。已存在的用户需要用chage命令修改:
口令强度策略¶
通过PAM(Pluggable Authentication Modules,可插拔认证模块)强制密码复杂度。
编辑 /etc/pam.d/system-auth:
vim /etc/pam.d/system-auth
# 添加或修改以下行:
password requisite pam_cracklib.so retry=3 difok=2 minlen=8 lcredit=-1 dcredit=-1 ucredit=-1 ocredit=-1
| 参数 | 说明 |
|---|---|
retry=3 |
密码修改时最多允许尝试3次 |
difok=2 |
新密码与旧密码至少要有2个字符不同 |
minlen=8 |
密码最小长度为8位(此配置优先于login.defs) |
ucredit=-1 |
至少包含1个大写字母 |
lcredit=-1 |
至少包含1个小写字母 |
dcredit=-1 |
至少包含1个数字 |
ocredit=-1 |
至少包含1个特殊字符 |
专业解读:PAM是Linux的统一认证框架,
/etc/pam.d/目录下的文件定义了各种服务的认证策略。pam_cracklib.so会检查密码是否基于字典单词,防止设置过于简单的密码(如password123)。
登录失败策略¶
防止暴力破解密码,需限制登录失败次数并设置锁定时间。
编辑 /etc/pam.d/sshd(针对SSH登录):
vim /etc/pam.d/sshd
# 在第一行下方添加:
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=1800
| 参数 | 说明 |
|---|---|
deny=3 |
连续失败3次后锁定账号 |
unlock_time=300 |
普通用户锁定300秒(5分钟)后自动解锁 |
even_deny_root |
对root用户也生效(否则攻击者会专门爆破root) |
root_unlock_time=1800 |
root用户锁定1800秒(30分钟)后自动解锁 |
手动解锁用户:
专业解读:pam_tally2在较新系统中已被
pam_faillock取代。CentOS 8/RHEL 8应使用:
访问控制加固¶
IP访问控制¶
通过TCP Wrappers机制限制哪些IP可以访问SSH服务。
允许访问的IP¶
编辑 /etc/hosts.allow:
sshd:192.168.1.*:allow # 允许192.168.1.x网段SSH访问
sshd:192.168.1.74:allow # 允许特定IP访问
sshd:all:allow # 允许所有IP(不推荐)
拒绝访问的IP¶
编辑 /etc/hosts.deny:
sshd:all:deny # 拒绝所有IP(配合hosts.allow使用,白名单模式)
sshd:47.106.218.*:deny # 拒绝特定网段
sshd:192.168.1.74:deny # 拒绝特定IP
专业解读: - TCP Wrappers按照 先allow后deny 的顺序匹配 - 如果
hosts.allow匹配成功,则直接允许,不再检查hosts.deny- 生产环境推荐白名单模式:hosts.deny中写sshd:all:deny,只在hosts.allow中放行信任的IP - 配置完成后需重启SSH服务:systemctl restart sshd
防范端口扫描¶
攻击者通常通过端口扫描探测目标开放的端口和服务。
关闭不必要的服务:
systemctl list-unit-files | grep enable # 查看所有开机自启的服务
systemctl stop xxx # 停止不需要的服务
systemctl disable xxx # 禁止开机自启
修改默认端口号: 将SSH的默认22端口改为其他端口,可以减少自动化攻击。
专业解读:修改SSH端口是"安全模糊化"(Security through Obscurity)手段,不能替代强密码或密钥认证,但确实能过滤掉大部分自动化扫描攻击。
防火墙策略(iptables)¶
除了firewalld,也可使用iptables配置更细粒度的规则:
# 防范特定类型的端口扫描(FIN/URG/PSH扫描、SYN/RST扫描等)
-A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j REJECT
-A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j REJECT
-A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j REJECT
专业解读:现代CentOS 7/8默认使用firewalld作为iptables的前端,但底层仍然是netfilter框架。
iptables命令直接操作规则,重启后失效(除非保存)。firewalld使用zone概念管理规则,更易于维护。
root权限控制¶
root账号是Linux系统的最高权限账号,必须严格控制。
禁止root用户远程登录¶
专业解读:禁止root远程登录后,管理员应先以普通用户登录,再通过
su -或sudo切换到root。这样即使普通用户密码泄露,攻击者还需知道root密码才能提权,增加了攻击难度。
禁止其他用户su提权¶
限制只有wheel组的用户才能使用su切换到root:
然后将允许提权的用户加入wheel组:
禁止其他用户sudo提权¶
通过 visudo 精细控制sudo权限:
禁止SUID提权¶
SUID(Set User ID)是一种特殊权限,允许普通用户以文件所有者的身份执行该文件。
# 查找系统上所有root拥有的SUID文件
find / -user root -perm -4000 -print 2>/dev/null
# 移除不必要的SUID权限
chmod ugo-s /usr/bin/some_command
专业解读:SUID是权限提升(Privilege Escalation)的常见利用点。经典的例子:
/usr/bin/passwd有SUID权限(-rwsr-xr-x),普通用户可以用它修改自己的密码(需要写入/etc/shadow,而普通用户无写权限)。如果自定义程序错误地设置了SUID且存在漏洞,攻击者可能借此提权到root。
安全审计加固¶
auditd审计¶
auditd是Linux内核的审计子系统,可以详细记录系统中发生的安全相关事件。
功能: - 监控文件和目录的访问、修改、删除 - 记录系统调用 - 记录用户登录注销行为 - 追踪命令执行
日志位置:/var/log/audit/audit.log
# 查看audit日志
ausearch -h # 查看帮助
ausearch -f /etc/passwd # 查找与/etc/passwd相关的事件
ausearch -u username # 查找特定用户的审计记录
ausearch -ts today # 查找今天的记录
专业解读:auditd配置复杂但功能强大,常用于等保合规、入侵溯源。配置规则文件在
/etc/audit/rules.d/。启用auditd会对系统性能有一定影响,需根据实际需求配置监控范围,避免过度审计。
参考资料: - https://docs.oracle.com/zh-cn/learn/ol-auditd/ - https://blog.csdn.net/m0_74282605/article/details/128718297
漏洞补丁加固¶
及时更新软件¶
软件漏洞是攻击者入侵系统的主要途径之一,必须建立及时的补丁更新机制。
yum check-update # 列出可更新的软件清单
yum info updates # 列出可更新软件包的详细信息
yum updateinfo list updates security # 列出可用的安全补丁
yum upgrade 包名 # 升级指定软件
yum update # 升级系统版本和所有软件(谨慎使用)
内核升级¶
内核漏洞影响最大,因为内核拥有最高权限。
专业解读: - 内核升级后,需要重启系统才能使用新内核 - 新内核可能存在兼容性问题,生产环境建议在测试环境验证后再部署 - 保留旧内核:修改
/etc/default/grub设置默认启动项,确保新内核有问题时可以回退
常见安全产品¶
安全产品分类¶
| 类别 | 产品 | 功能 |
|---|---|---|
| 主机安全 | 主机杀毒(EDR) | 恶意软件检测与清除、进程行为监控 |
| 漏洞管理 | 漏洞扫描器 | 自动发现系统漏洞、配置弱点 |
| 边界防护 | 防火墙、WAF | 网络层/应用层流量过滤 |
| 入侵检测 | IDS / IPS | 检测/阻断入侵行为 |
| 运维安全 | 堡垒机 | 统一运维入口、操作审计、权限管控 |
| 威胁感知 | 态势感知平台 | 全网安全态势监控、关联分析 |
| DDoS防护 | 抗DDoS设备/云服务 | 大流量攻击清洗 |
| 欺骗防御 | 蜜罐 | 诱捕攻击者、收集攻击手法 |
2022中国网络安全产业全景图: https://www.freebuf.com/articles/339788.html
专业解读:企业安全建设应遵循"纵深防御"(Defense in Depth)理念,在网络边界、主机、应用、数据等多个层面部署防护措施,不依赖单一产品。等保2.0要求的安全设备包括:防火墙、入侵防范、恶意代码防范、日志审计、数据备份等。
加固清单和脚本¶
基线配置文档¶
linux基线配置文档2.2.docx — 包含详细的加固检查项和配置标准。
自动化加固脚本¶
| 脚本 | 用途 |
|---|---|
CentOS_Check_Script.sh |
基线检查脚本,扫描系统配置是否符合安全要求 |
CentOS_Protective_Script.sh |
自动执行加固措施 |
linuxcheeklist2.2.sh |
综合检查脚本 |
专业解读:自动化脚本可以大幅提高加固效率,但不能直接在生产环境运行,必须先阅读脚本内容,理解每一步操作,在测试环境验证无误后再部署。脚本可能因系统版本差异导致意外问题。
课后作业¶
- 对各个配置项进行测试验证:在虚拟机中实际配置密码策略、登录失败锁定、SSH安全选项等,验证效果。
- 整理本节课笔记:梳理身份鉴别、访问控制、安全审计、入侵防范各模块的关键配置。
- 如有需要,对相关内容进行拓展学习:深入了解PAM机制、SELinux、AppArmor等高级安全机制。
安全测试视角:加固与攻击的博弈 安全加固和渗透测试是安全领域的两个侧面。理解加固措施有助于渗透测试人员评估目标安全性,同时渗透测试结果也指导加固方向: - 基线检查 vs 漏洞扫描:基线检查关注配置合规性,漏洞扫描关注已知漏洞。两者结合才能全面评估系统安全状况 - 红队与蓝队:红队(攻击方)模拟真实攻击者测试防御有效性,蓝队(防御方)负责检测和响应。Linux 安全加固是蓝队的基础能力建设 - 攻击面管理:加固的本质是持续缩小攻击面。每关闭一个不必要的服务、每限制一个权限,都在增加攻击者的成本
安全测试视角:等保合规与渗透测试 等保 2.0 要求开展定期安全测评,其中渗透测试是重要组成部分: - 等保二级:需要开展漏洞扫描和渗透测试 - 等保三级:需要开展深度渗透测试,包括内网横向移动测试 - 测试范围:不仅包括操作系统,还包括应用、数据库、网络设备等 - 测试边界:明确渗透测试的授权范围和时间窗口,避免对生产业务造成影响
在安全测试工作中,熟练掌握 Linux 系统的配置、漏洞和加固方法,是开展有效渗透测试的基础能力。