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 # 确认规则数量
练习与验证#
- 创建用户
opsadmin,仅允许执行systemctl与journalctl,验证sudo -l输出。 - 在
/etc/ssh/sshd_config中禁止root登录与密码登录,尝试本机登录验证失败/成功行为。 - 修改一次
/etc/ssh/sshd_config,用ausearch -k sshd_config -ts today查询审计记录。 - 故意输错密码5次触发fail2ban封禁,用
fail2ban-client status sshd查看封禁IP。 - 使用
last与lastb导出最近10条记录并解释每列含义。
通过统一账号治理、严格访问控制、细粒度审计与自动化告警,建立可持续的SSH安全运营体系,并可通过示例与练习形成可复用的标准化落地流程。