2.6.5 登录审计与访问控制策略

登录审计与访问控制策略旨在对SSH访问进行可追溯、可管控与可防护,降低暴力破解、越权访问与账号滥用风险。应从账号体系、审计留痕、访问控制与异常告警四个方面构建闭环,并通过可执行配置、日志验证与演练形成常态化运营。

原理草图(审计与控制闭环)#

文章图片

账号与权限治理(示例+命令解释)#

  • 禁止root直接登录,使用普通用户并通过sudo提权。
  • 账号生命周期管理:创建、禁用、撤销密钥。

创建运维账号并授予最小sudo权限

# 创建用户并设置密码
useradd -m -s /bin/bash opsadmin
passwd opsadmin

# 仅允许执行特定命令(如systemctl与journalctl)
cat >/etc/sudoers.d/opsadmin <<'EOF'
opsadmin ALL=(ALL) NOPASSWD:/usr/bin/systemctl,/usr/bin/journalctl
EOF

# 检查语法
visudo -cf /etc/sudoers.d/opsadmin
# 预期输出:/etc/sudoers.d/opsadmin: parsed OK

禁用离职账号并撤销密钥

# 禁用账号登录
usermod -L opsadmin
# 移除其SSH密钥
rm -f /home/opsadmin/.ssh/authorized_keys

登录审计与留痕(安装+配置+验证)#

安装 auditd 与 tlog(示例为RHEL/CentOS/AlmaLinux)

yum -y install audit audit-libs tlog
systemctl enable --now auditd

关键文件与sudo行为审计

# 监控SSH与sudo配置文件修改
cat >/etc/audit/rules.d/ssh-sudo.rules <<'EOF'
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers_d
EOF

augenrules --load
# 查看规则是否生效
auditctl -l | grep -E 'sshd_config|sudoers'

会话录屏(tlog)

# 启用tlog会话记录
authselect select sssd with-tlog --force
systemctl restart sssd

验证登录与审计日志

# 登录失败/成功记录
tail -f /var/log/secure

# 查看auditd记录
ausearch -k sshd_config -ts today
# 预期:显示对 /etc/ssh/sshd_config 的修改事件

# 查看登录历史
last -a | head
lastb -a | head  # 失败登录

SSH访问控制策略(配置+解释+重载)#

限制来源IP(firewalld示例)

# 仅允许管理网段访问22端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.0.0/16" service name="ssh" accept'
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload

# 验证
firewall-cmd --list-all

限制账号与认证方式(/etc/ssh/sshd_config)

# 编辑配置并说明关键参数
cat >>/etc/ssh/sshd_config <<'EOF'
PermitRootLogin no
PasswordAuthentication no
AllowUsers opsadmin deploy
MaxAuthTries 3
LoginGraceTime 30
EOF

# 重载服务
systemctl reload sshd

双因子示例(Google Authenticator思路)

# 安装PAM模块(示例)
yum -y install google-authenticator

# 为用户生成密钥(执行后扫描二维码)
sudo -u opsadmin google-authenticator -t -d -f -r 3 -R 30 -w 3

异常检测与自动封禁(fail2ban示例)#

安装与启用

yum -y install fail2ban
systemctl enable --now fail2ban

配置sshd jail

cat >/etc/fail2ban/jail.d/sshd.local <<'EOF'
[sshd]
enabled = true
maxretry = 5
findtime = 600
bantime = 3600
EOF

systemctl restart fail2ban
fail2ban-client status sshd
# 预期:显示当前封禁统计

日志集中化(rsyslog示例)#

# 将安全日志转发到日志平台(示例IP)
cat >/etc/rsyslog.d/90-remote.conf <<'EOF'
auth,authpriv.*  @@10.20.30.40:514
EOF

systemctl restart rsyslog
# 预期:远端日志平台可见auth日志

常见排错(原因+命令)#

  • 无法登录(密钥被拒绝)
# 检查权限与属主
ls -ld /home/opsadmin /home/opsadmin/.ssh
ls -l /home/opsadmin/.ssh/authorized_keys
# 期望:~/.ssh 为700,authorized_keys为600且属主为opsadmin
  • sshd重载失败
# 语法检查
sshd -t
# 查看错误日志
journalctl -u sshd --no-pager -n 50
  • auditd未记录
systemctl status auditd
auditctl -l | wc -l  # 确认规则数量

练习与验证#

  1. 创建用户opsadmin,仅允许执行systemctljournalctl,验证sudo -l输出。
  2. /etc/ssh/sshd_config中禁止root登录与密码登录,尝试本机登录验证失败/成功行为。
  3. 修改一次/etc/ssh/sshd_config,用ausearch -k sshd_config -ts today查询审计记录。
  4. 故意输错密码5次触发fail2ban封禁,用fail2ban-client status sshd查看封禁IP。
  5. 使用lastlastb导出最近10条记录并解释每列含义。

通过统一账号治理、严格访问控制、细粒度审计与自动化告警,建立可持续的SSH安全运营体系,并可通过示例与练习形成可复用的标准化落地流程。