系统审计须用独立只读账户,遵循最小权限、行为可追溯、禁交互登录原则;创建audit_reader用户并配置sudo仅执行指定命令,数据库中建audit_ro角色授SELECT等只读权限,并启用sudo日志与auditd规则审计其操作。

系统审计需要独立的只读账户,不能复用管理员或业务账号,核心原则是:最小权限、行为可追溯、账号不可登录交互式终端。
创建专用审计用户(Linux 示例)
以 root 身份执行以下操作,创建无密码、无 shell、仅用于审计查询的系统用户:
- 添加用户并禁用登录能力:useradd -r -s /sbin/nologin -M audit_reader
- 设置仅限 sudo 执行特定命令的权限(不给 /bin/bash 或 /bin/sh):
编辑 /etc/sudoers.d/audit_reader,添加:
注意:所有命令需写绝对路径;避免通配符(如 /usr/bin/*);禁止授予 sudo su 或 sudo -i 权限。
配置只读访问控制(数据库审计场景)
若审计对象含数据库(如 PostgreSQL),需在库内创建角色并限制权限:
- 登录数据库(使用超级用户):psql -U postgres
- 创建只读角色:CREATE ROLE audit_ro NOINHERIT LOGIN PASSWORD 'strong_pwd_2024';
- 授予连接权限和 schema 使用权:
GRANT CONNECT ON DATABASE appdb TO audit_ro;
GRANT USAGE ON SCHEMA public TO audit_ro; - 对关键表显式授权 SELECT:
GRANT SELECT ON TABLE users, orders, logs TO audit_ro;
(不使用 GRANT SELECT ON ALL TABLES,避免误授敏感表)
日志与行为审计强化措施
仅配置账户权限不够,必须确保其操作本身可被记录:
- 启用 sudo 日志:确认 /etc/sudoers 中有 Defaults logfile="/var/log/sudo.log"
- 审计该用户调用的命令:在 /etc/audit/rules.d/audit_reader.rules 中添加:
-a always,exit -F uid=1001 -F perm=x -k audit_user_exec
(其中 1001 是 audit_reader 的 UID,可用 id -u audit_reader 查看) - 重启 auditd 生效:systemctl restart auditd
验证与日常管理要点
配置完成后必须验证,且避免常见疏漏:
- 切换至审计用户测试:sudo -u audit_reader journalctl -n 5 --no-pager(应成功)
尝试:sudo -u audit_reader bash(应拒绝) - 定期检查该用户是否存在异常 sudo 行为:grep "audit_reader" /var/log/sudo.log | tail -20
- 禁止为该账户配置 SSH 密钥或密码登录;如需远程访问,统一走跳板机 + 会话审计工具(如 ttyrec / asciinema)
- 每季度审查一次 sudoers 和数据库权限,删除已下线服务对应的表或命令授权










