Linux 内核与安全配置:sysctl、PAM 及访问控制
保护 Linux 系统需要多层次的方法,从内核开始,延伸到身份验证系统,再到访问控制和存储挂载。本指南详细介绍了现代 Linux 环境中最重要的安全配置组件。
1. 使用 sysctl 配置内核参数
sysctl 命令和 /etc/sysctl.conf 文件(以及 /etc/sysctl.d/ 中的文件)是在运行时配置 Linux 内核参数的主要工具。其中许多参数具有显著的安全影响。
使用 sysctl 配置生成器
虽然可以手动编辑配置文件,但 sysctl 配置生成器 (sysctl config generator) 可以帮助确保不遗漏关键的加固设置。常见的配置参数包括:
- 网络加固:禁用 IP 转发 (
net.ipv4.ip_forward = 0)、忽略 ICMP 重定向 (net.ipv4.conf.all.accept_redirects = 0) 以及启用 TCP SYN cookie 保护 (net.ipv4.tcp_syncookies = 1)。 - 内存保护:通过
kernel.randomize_va_space = 2启用 ASLR(地址空间布局随机化)。 - 限制信息泄漏:限制对内核日志的访问 (
kernel.dmesg_restrict = 1) 以及内核符号表 (kernel.kptr_restrict = 2)。
Linux 内核参数参考表
| 参数 | 推荐值 | 说明 |
|---|---|---|
net.ipv4.tcp_syncookies |
1 |
防止 SYN 洪水攻击。 |
net.ipv4.conf.all.rp_filter |
1 |
启用反向路径过滤,防止 IP 欺骗。 |
kernel.randomize_va_space |
2 |
完全启用 ASLR,防止缓冲区溢出漏洞。 |
fs.protected_fifos |
2 |
防止在全局可写目录中对 FIFO 进行未经授权的写入。 |
2. 可插拔身份验证模块 (PAM)
PAM 提供了一种灵活的方法来管理各种服务的身份验证,而无需修改服务本身。正确配置 PAM 对于强制执行强密码策略和多因素身份验证至关重要。
PAM 配置生成器的注意事项
PAM 配置生成器 (PAM config generator) 通常专注于 /etc/pam.d/ 中的文件。为了安全起见,应包含的关键模块包括:
- pam_cracklib.so / pam_pwquality.so:强制执行密码复杂度要求(长度、字符类型)。
- pam_tally2.so / pam_faillock.so:在多次登录失败后锁定帐户,以防止暴力破解攻击。
- pam_unix.so:根据
/etc/shadow检查密码的标准模块。
密码质量配置示例:
password requisite pam_pwquality.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
3. 强制访问控制:SELinux 和 AppArmor
与基于用户和组的标准自主访问控制 (DAC) 不同,强制访问控制 (MAC) 允许管理员为系统上的每个进程和文件定义细粒度的安全策略。
SELinux 策略生成器 vs. AppArmor 配置文件生成器
- SELinux (Security-Enhanced Linux):对每个对象(进程、文件、端口)使用标签系统。它功能强大,但学习曲线较陡。通常需要 SELinux 策略生成器 (SELinux policy generator)(如
audit2allow)来处理复杂的拒绝情况。 - AppArmor:使用基于路径的配置文件。通常认为它比 SELinux 更容易配置。AppArmor 配置文件生成器 (AppArmor profile generator)(如
aa-genprof)可以通过监控应用程序行为来帮助创建配置文件。
SELinux vs. AppArmor 对比
| 特性 | SELinux | AppArmor |
|---|---|---|
| 控制类型 | 基于标签 | 基于路径 |
| 复杂性 | 高 | 中 |
| 默认分发版 | RHEL, CentOS, Fedora | Ubuntu, Debian, openSUSE |
| 灵活性 | 极高 | 高 |
| 学习曲线 | 陡峭 | 适中 |
4. 使用 /etc/fstab 安全挂载存储
/etc/fstab 文件定义了存储设备的挂载方式。使用正确的挂载选项可以防止许多类型的攻击,例如从临时目录执行恶意二进制文件。
/etc/fstab 生成器安全标志
使用 /etc/fstab 生成器 (/etc/fstab generator) 时,请确保为非系统分区(如 /tmp、/var 或外部驱动器)包含以下安全标志:
nodev:防止在文件系统上解释块或字符特殊设备。nosuid:禁用设置用户标识符或设置组标识符位。noexec: 防止在文件系统上执行二进制文件。
/tmp 的安全条目示例:
UUID=... /tmp tmpfs rw,nosuid,nodev,noexec 0 0
常见问题 FAQ:Linux 安全配置
问:我应该使用 SELinux 还是 AppArmor?
答:通常取决于你的发行版。使用原生支持并默认启用的工具(RHEL 系使用 SELinux,Debian 系使用 AppArmor),因为它们拥有最完善的预配置策略。
问:为什么 net.ipv4.ip_forward 默认是禁用的?
答:启用 IP 转发会让你的系统充当路由器,如果没有明确意图并正确配置防火墙,这可能会带来安全风险。
问:如果我配置错了 PAM 会怎样?
答:配置错误的 PAM 可能会将所有人(包括 root)锁在系统之外。在测试 PAM 更改时,请始终保持一个活动的 root shell,或者制定恢复计划(如通过 Live CD 启动)。
问:如何验证我的 sysctl 设置已生效?
答:使用命令 sysctl -a 查看当前所有的内核参数及其值。你也可以检查特定参数,例如 sysctl net.ipv4.tcp_syncookies。