操作系统加固
Windows/Linux 权限、命令行、加固。
Linux 系统加固:账号、SSH、防火墙与审计
这一课你将能做到
- 完成一台 Linux 服务器的基线加固:账号清理、SSH 加固、防火墙最小开放
- 用 auditd 与 fail2ban 建立审计与自动封禁能力
- 把加固思路映射到 Spring Boot 应用的运行账号与权限配置
为什么要学
绝大多数入侵的起点不是 0day,而是弱口令、暴露的 SSH 和多余的 SUID 文件。系统层是应用层的地基:你给 Spring Boot 应用配的运行账号、sudo 权限、文件权限,直接决定了攻击者拿到应用权限后能走多远——这叫「爆炸半径」。
人话:加固就是把大楼里多余的钥匙收走、把后门焊死、给每个房间装监控摄像头。做完这一课,你服务器的「裸奔面」会小一大圈。
先建立图像
一台服务器的加固分层:
┌─ 网络层:ufw/iptables 只放行必要端口 ──── 第一道门
├─ 入口层:SSH 密钥登录 + fail2ban 防爆破 ─ 门卫
├─ 账号层:最小权限、禁 root 直登 ──────── 门禁卡制度
├─ 文件层:权限收敛、清理 SUID ────────── 房间锁
├─ 进程层:应用专用低权账号运行 ────────── 外访客挂牌
└─ 审计层:auditd + 日志外发 ──────────── 监控摄像头
跟着做
步骤 1:账号盘点
# 有 shell 的用户(应只有系统必需 + 你自己)
grep -E '/(bash|sh|zsh)$' /etc/passwd
# 检查空口令账号(必须为空)
sudo awk -F: '($2==""){print $1}' /etc/shadow
# 删除或锁定不用的账号
sudo usermod -L legacy_user # 锁定
sudo userdel -r legacy_user # 或删除
步骤 2:密码与登录策略
# 密码过期策略:最长 90 天,最短 1 天,提前 7 天提醒
sudo sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sudo chage -M 90 -m 1 -W 7 your_user
# 安装 pam pwquality,设置复杂度
sudo apt install libpam-pwquality
# /etc/security/pwquality.conf 追加:
# minlen=12 dcredit=-1 ucredit=-1 ocredit=-1
步骤 3:SSH 加固
# 本地生成密钥并上传(先确认密钥能登录,再改配置!)
ssh-keygen -t ed25519
ssh-copy-id your_user@192.168.56.101
# 编辑 /etc/ssh/sshd_config:
# PermitRootLogin no
# PasswordAuthentication no
# PubkeyAuthentication yes
# MaxAuthTries 3
sudo systemctl restart sshd
步骤 4:权限收敛与 SUID 排查
# 找出全系统的 SUID 文件(提权必查项)
sudo find / -perm -4000 -type f 2>/dev/null
# 清单里出现异常程序(如 vim、find 带 SUID)立即处理
sudo chmod u-s /usr/bin/suspicious_bin
# 应用代码目录不允许其他用户写
sudo chown -R appuser:appuser /opt/java-nav
sudo chmod -R o-w /opt/java-nav
步骤 5:防火墙最小开放
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'ssh'
sudo ufw allow 443/tcp comment 'https'
sudo ufw limit 22/tcp # 对 SSH 限速,防爆破
sudo ufw enable && sudo ufw status verbose
步骤 6:fail2ban + auditd 审计
sudo apt install fail2ban auditd
# fail2ban 默认开启 sshd jail,重启生效
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd # 看已封 IP
# 审计规则示例:监控 /etc/passwd 变更
sudo auditctl -w /etc/passwd -p wa -k identity_change
sudo ausearch -k identity_change -i # 查询审计记录