这是《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
补丁原则:
- 跟踪 CVE 影响面;
- 区分远程利用和本地利用;
- 测试环境验证;
- 控制重启窗口;
- 备份回滚;
- 记录版本;
- 不长期“先不更”。
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
原则:
- 私钥权限 600;
- 不提交 Git;
- 使用 Secret Manager;
- 定期轮换;
- 区分环境;
- 审计使用;
- 发现泄露立即撤销。
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
可疑迹象:
- 未知 SUID 文件;
- 未知定时任务;
- 异常外连;
- SSH key 新增;
- 日志被清理;
- 安全软件停止;
- 系统库被修改。
确认事件后应隔离主机、保全证据、按应急流程处理,不要在被控机器上反复试探。
21.10 云与容器注意点
云主机:
- 安全组默认拒绝;
- 管理端口只对堡垒机开放;
- 使用云审计和 flow log;
- 元数据服务加固;
- 云账号权限最小化;
- 密钥不放在 user-data。
容器:
- 不使用 root 运行;
- 只挂载必要目录;
- 不随意
--privileged; - 镜像来自可信仓库;
- 扫描漏洞;
- 限制 capability;
- NetworkPolicy 控制访问;
- 保护 Docker socket。
本章小结
安全加固的核心是减少攻击面和权限,持续打补丁,集中审计和快速响应。账号、SSH、sudo、文件权限、服务、密钥、内核参数和日志都要有基线。安全不是一次加固,而是持续验证。
思考题
- 为什么业务进程不用 root 运行?
- 如何发现异常 SUID 文件?
- auditd 应重点监控哪些事件?
- systemd 沙箱有哪些常用指令?
- 怀疑主机入侵时的前十个检查动作是什么?