LinuxNotes

第 21 章:安全加固

zjc 于 2026-01-21 发布

这是《Linux 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 Linux 安全不是一堆积攒的加固开关,而是一套边界:最小攻击面、最小权限、可信来源、及时补丁、审计、加密和快速响应。本章按账号、SSH、文件、内核、服务、补丁和入侵排查组织。

21.1 安全基线

1. 只安装必要软件
2. 只开放必要端口
3. 每个应用独立低权限账号
4. SSH 使用密钥并限制来源
5. root 不直接运行业务
6. sudo 按命令授权
7. 补丁和 CVE 有跟踪流程
8. 日志集中保存
9. 密钥有轮换
10. 变更可审计

查看当前信息:

cat /etc/os-release
uname -a
id
ss -lntup
systemctl list-unit-files --state=enabled

21.2 账号加固

查看账号:

getent passwd
awk -F: '($2 != "x" && $2 != "*" && $2 != "!") {print}' /etc/shadow
awk -F: '$7 !~ /(nologin|false)/ {print $1}' /etc/passwd

锁定异常账号:

sudo passwd -l username
sudo usermod -s /sbin/nologin username

密码策略:

/etc/login.defs
/etc/security/pwquality.conf
/etc/security/faillock.conf

常见配置:

PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_MIN_LEN 12

云环境更推荐集中身份、密钥登录和 MFA,而不是依赖本机密码复杂度。

21.3 文件与权限

检查:

find /etc -type f -perm /o+w -ls
find / -xdev -type f -perm /4000 -ls 2>/dev/null
stat /etc/shadow

敏感文件:

sudo chmod 600 /etc/shadow
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

SUID 文件清单应纳入基线管理。新增或变化的 SUID 文件需要解释来源。

21.4 软件与补丁

查看可升级:

sudo apt update && apt list --upgradable
sudo dnf check-update

漏洞扫描:

debsecan
dnf updateinfo list available

补丁原则:

  1. 跟踪 CVE 影响面;
  2. 区分远程利用和本地利用;
  3. 测试环境验证;
  4. 控制重启窗口;
  5. 备份回滚;
  6. 记录版本;
  7. 不长期“先不更”。

21.5 内核参数加固

查看:

sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.icmp_echo_ignore_broadcasts
sysctl kernel.kptr_restrict
sysctl kernel.dmesg_restrict

常见方向:

kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1

配置文件:

/etc/sysctl.d/*.conf

应用:

sudo sysctl --system

不同 workload 和内核版本可能有差异,修改前要逐项验证。

21.6 审计

auditd:

sudo systemctl status auditd
sudo auditctl -l
sudo ausearch -k identity

查看登录:

last
lastb
who
w
sudo journalctl -u ssh --since today

建议审计:

对象 事件
sudoers 修改
passwd / group 修改
SSH key 写入
systemd unit 创建修改
cron 修改
安全工具 停止和卸载
数据目录 异常访问

日志必须集中保存,否则攻击者可以清理本机痕迹。

21.7 服务加固

systemctl list-unit-files --state=enabled
ss -lntup

禁用:

sudo systemctl disable --now service

常见不必要服务:

类型 示例
打印 cups
邮件 本地 mail relay,按需
远程桌面 vnc
旧协议 telnet、rsh
调试服务 未知 debug port

systemd 沙箱示例:

[Service]
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/app /var/log/app
CapabilityBoundingSet=

按应用能力逐步收紧,避免一次性过严导致服务不可用。

21.8 证书与密钥

检查:

find /etc /opt /home -xdev -type f \
  \( -name '*.pem' -o -name '*.key' -o -name '*credentials*' \) -ls

原则:

  1. 私钥权限 600;
  2. 不提交 Git;
  3. 使用 Secret Manager;
  4. 定期轮换;
  5. 区分环境;
  6. 审计使用;
  7. 发现泄露立即撤销。

21.9 入侵迹象排查

账号:

cat /etc/passwd
sudo cat /etc/shadow
getent group wheel sudo
last -a | head -30
lastb | head -30

进程与网络:

ps auxf
ss -antp
ss -lntp
crontab -l
sudo ls -la /etc/cron.*

文件与单元:

find /tmp /var/tmp /dev/shm -type f -executable -ls
systemctl list-timers --all
find /etc/systemd/system -type f -mtime -7 -ls

完整性:

rpm -Va
dpkg --verify

可疑迹象:

  1. 未知 SUID 文件;
  2. 未知定时任务;
  3. 异常外连;
  4. SSH key 新增;
  5. 日志被清理;
  6. 安全软件停止;
  7. 系统库被修改。

确认事件后应隔离主机、保全证据、按应急流程处理,不要在被控机器上反复试探。

21.10 云与容器注意点

云主机:

  1. 安全组默认拒绝;
  2. 管理端口只对堡垒机开放;
  3. 使用云审计和 flow log;
  4. 元数据服务加固;
  5. 云账号权限最小化;
  6. 密钥不放在 user-data。

容器:

  1. 不使用 root 运行;
  2. 只挂载必要目录;
  3. 不随意 --privileged
  4. 镜像来自可信仓库;
  5. 扫描漏洞;
  6. 限制 capability;
  7. NetworkPolicy 控制访问;
  8. 保护 Docker socket。

本章小结

安全加固的核心是减少攻击面和权限,持续打补丁,集中审计和快速响应。账号、SSH、sudo、文件权限、服务、密钥、内核参数和日志都要有基线。安全不是一次加固,而是持续验证。

思考题

  1. 为什么业务进程不用 root 运行?
  2. 如何发现异常 SUID 文件?
  3. auditd 应重点监控哪些事件?
  4. systemd 沙箱有哪些常用指令?
  5. 怀疑主机入侵时的前十个检查动作是什么?