4. 操作系统基线(Linux):账号权限、SSH配置、日志审计、内核参数加固

各位好,欢迎来到第四章。这一章我们聊聊Linux操作系统的基线。

说实话,我见过太多“裸奔”的Linux服务器了。默认配置直接上线,密码策略形同虚设,SSH端口暴露在公网上,日志审计根本没开。嗯,这就像你家大门没锁,窗户大开,还贴了张纸条说“欢迎光临”。

所以,基线就是给系统穿上一件防弹衣。今天我们从四个维度来搞定它:账号权限、SSH配置、日志审计、内核参数加固。这四个点,基本覆盖了Linux服务器90%的安全风险。

核心思路:最小权限原则 + 最小暴露面原则。能不给的权限,坚决不给;能不开的服务,坚决不开。

Linux 操作系统基线四大核心模块 Linux 基线加固 账号权限 SSH 配置 日志审计 内核参数加固 四大模块相互独立,但缺一不可

4.1 账号权限:谁该有什么,一清二楚

账号权限这块,说白了就是搞清楚两件事:谁在用,以及他能干什么。

我建议你从下面几个点入手:

  • 清理僵尸账号:离职员工的账号、测试账号、共享账号,统统禁用或删除。用 awk -F: '($3==0){print $1}' /etc/passwd 检查UID为0的账号,理论上只有root一个。
  • 密码策略:别让用户设“123456”这种密码。修改 /etc/login.defs 和 /etc/pam.d/system-auth,设置密码长度、复杂度、过期时间。
  • sudo权限:谁有root权限?用 visudo 管理,别直接改文件。我见过有人把sudoers文件权限改成777,结果sudo直接罢工。
  • umask设置:默认文件权限别太宽松。建议 umask 027,新文件默认只有属主有写权限。

我的习惯:每季度做一次账号审计。写个脚本跑一遍,把超过90天未登录的账号列出来,发给业务方确认。没人认领的,直接禁用。

这里给一个密码策略的参考配置:

# /etc/login.defs 关键参数
PASS_MAX_DAYS   90
PASS_MIN_DAYS   7
PASS_MIN_LEN    12
PASS_WARN_AGE   7

# /etc/pam.d/system-auth 添加
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

4.2 SSH配置:把大门看紧了

SSH是Linux服务器的“大门”。门没锁好,黑客分分钟进来串门。

我个人习惯,拿到一台新服务器,第一件事就是改SSH配置。核心就几条:

配置项 推荐值 说明
Port 非22端口(如 2222) 避开自动化扫描
PermitRootLogin no 禁止root直接登录
PasswordAuthentication no 禁用密码登录,只用密钥
PubkeyAuthentication yes 启用密钥认证
AllowUsers 指定用户列表 白名单机制
MaxAuthTries 3 限制认证尝试次数
ClientAliveInterval 300 空闲超时断开

我曾经踩过的坑:有一次改SSH端口后,忘了在防火墙放行新端口。结果自己也被关在外面了。还好有带外管理卡(iLO/iDRAC)才进去。所以,改SSH配置前,一定确保你有备用通道。

修改完配置,记得重启服务:systemctl restart sshd。但别急着关当前会话,另开一个窗口测试新配置。确认能连上再退出。

4.3 日志审计:出了事,得有据可查

日志审计,说白了就是“留痕”。系统被入侵了,你怎么知道攻击者干了什么?靠日志。

Linux的日志系统主要靠 rsyslog 或 syslog-ng。我建议你关注这几个日志文件:

  • /var/log/secure:认证日志,谁登录了、谁认证失败了,都在这里。
  • /var/log/messages:系统通用日志,各种服务的信息。
  • /var/log/audit/audit.log:auditd审计日志,记录系统调用和文件访问。
  • /var/log/cron:计划任务执行日志。

光有日志还不够,你得让它“有用”。我建议做三件事:

  1. 日志轮转:用 logrotate 配置,别让日志撑爆磁盘。保留90天,压缩归档。
  2. 集中收集:把日志发到中央日志服务器(如ELK、Graylog)。单机日志容易被攻击者清理。
  3. 关键事件告警:比如SSH登录失败超过5次,立刻告警。用 auditd 监控敏感文件变更。

核心配置:启用 auditd 并监控 /etc/passwd、/etc/shadow、/etc/ssh/sshd_config 等关键文件。一旦被修改,立刻记录并告警。

auditd 规则示例:

# 监控 /etc/passwd 文件写操作
-w /etc/passwd -p wa -k passwd_changes

# 监控 /etc/shadow 文件写操作
-w /etc/shadow -p wa -k shadow_changes

# 监控 SSH 配置修改
-w /etc/ssh/sshd_config -p wa -k sshd_config_changes

4.4 内核参数加固:系统底层的硬功夫

内核参数加固,听起来高大上,其实就几个关键点。说白了,就是通过 /etc/sysctl.conf 或 /etc/sysctl.d/ 下的文件,调整内核行为,增强安全性。

我重点推荐这几个参数:

参数 推荐值 作用
net.ipv4.ip_forward 0 禁止IP转发,防止被用作跳板
net.ipv4.conf.all.rp_filter 1 启用反向路径过滤,防IP欺骗
net.ipv4.tcp_syncookies 1 启用SYN Cookie,防SYN Flood攻击
net.ipv4.conf.all.accept_source_route 0 禁用源路由,防路由欺骗
kernel.exec-shield 1 启用执行保护,防缓冲区溢出
kernel.randomize_va_space 2 启用ASLR,地址空间随机化

一个小技巧:修改 sysctl.conf 后,用 sysctl -p 立即生效,不用重启。但建议先在测试环境验证,有些参数(比如网络相关的)改错了可能导致服务异常。

完整的配置片段:

# /etc/sysctl.d/99-security.conf
# 网络层防护
net.ipv4.ip_forward = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# 内存保护
kernel.exec-shield = 1
kernel.randomize_va_space = 2

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

嗯,到这里,Linux基线的四个核心模块就讲完了。你可能会问,这些配置手动做一遍太麻烦了。没错,所以下一节我们会讲如何用自动化脚本批量搞定这些事。但今天,先把这些概念吃透。

记住一句话:基线不是一次性的工作,而是持续的过程。系统在变,业务在变,基线也要跟着迭代。