服务器访问控制合规检查聚焦“谁在访问、能访问什么、有没有留下痕迹”,需验证root远程登录禁用(PermitRootLogin no)、密钥登录强制启用(PasswordAuthentication no)、账户锁定机制生效(pam_tally2查5次失败锁30分钟)、默认账号禁用(passwd -l)、权限最小化(敏感目录600/700、sudo精确到命令)、Nginx后台IP白名单、防火墙仅开放必要端口并限源、日志留存≥180天且含关键字段。
服务器访问控制合规检查不是堆砌工具或写一堆策略文档,而是聚焦“谁在访问、能访问什么、有没有留下痕迹”这三件事,一条条验证、一项项堵漏。
查身份认证是否真正受控
登录凭据是第一道门,必须确保没人能绕过它。
- 禁止 root 直接远程登录:运行 grep PermitRootLogin /etc/ssh/sshd_config,输出应为 PermitRootLogin no
- 强制密钥登录:确认 PasswordAuthentication no 已启用,且用户主目录下 ~/.ssh/authorized_keys 仅含已审批的公钥
- 账户锁定机制生效:用 pam_tally2 --user nginx 查失败次数,连续 5 次输错密码后应自动锁 30 分钟
- 系统默认账号(如 ftp、sync、games)全部禁用:执行 passwd -l username 并确认 passwd -S username 输出含 LK 或 Password locked
看权限分配是否最小化
给得越少,出事概率越低。不能靠“信任”,要靠配置说话。
- Linux 用户组按“部门+岗位”建:比如 finance_rw 组只对 /data/finance 有读写,dev_ro 组仅可读 /var/www
- 敏感目录(如 /etc/shadow、/root)权限必须是 600 或 700,执行 ls -ld /etc/shadow 验证
- sudo 权限精确到命令:在 /etc/sudoers 中避免 ALL=(ALL) ALL,改用 %ops ALL=(root) /usr/bin/systemctl restart nginx
- Nginx 后台路径(如 /admin、/phpmyadmin)必须加 IP 白名单:allow 192.168.10.0/24; deny all;
验网络与应用层访问边界
防火墙和应用配置共同构成真实防线,单靠一边都不牢靠。
- 检查防火墙规则:运行 iptables -L INPUT -n --line-numbers,确认只开放必要端口(如 22、443),且 22 端口限制源 IP
- Nginx 禁用非法方法:在关键 location 块中配置 limit_except GET POST HEAD { deny all; }
- MongoDB 等数据库绑定内网 IP:确认 mongod.conf 中 bindIp: 192.168.5.100,而非 0.0.0.0
- 关闭无用服务:用 ss -tuln 查监听端口,对 rpcbind、nfs 等非必需服务执行 systemctl stop rpcbind && systemctl disable rpcbind
盯日志与操作留痕是否完整
没有记录的访问,等于没发生过——但合规要求它必须可查、可溯、不可删。
- SSH 登录日志开启:确认 /var/log/secure 或 /var/log/auth.log 有实时写入,且保留不少于 180 天
- Nginx 访问日志含关键字段:检查 log_format 是否包含 $remote_addr $request_method $uri $status $http_user_agent $time_local
- 数据库操作审计开启:MongoDB 需启用 auditLog,MySQL 开启 general_log 或使用 mysql-audit 插件
- 关键操作留痕:如 sudo 命令、文件修改、用户增删,均需在日志中体现操作者、时间、目标对象