需主动配置sudo日志审计机制:一、启用专用日志文件;二、通过rsyslog转发;三、开启命令参数记录;四、强化日志权限与不可变属性;五、集成journalctl统一查询。

如果您希望在统信UOS系统中对用户执行的sudo命令进行完整、可追溯的审计记录,则需主动配置sudo的日志输出机制。默认情况下,sudo操作仅零星记录于系统认证日志中,缺乏集中化、结构化和持久化的审计能力。以下是实现sudo日志审计的具体方法:
一、启用sudo专用日志文件
通过修改sudoers配置,强制所有sudo命令行为写入独立日志文件,便于隔离分析与长期归档。该方式不依赖系统syslog服务,日志格式统一且不可绕过。
1、使用visudo安全编辑sudoers配置文件:
sudo visudo
2、在文件末尾新增一行配置:
Defaults logfile="/var/log/sudo.log"
3、保存并退出编辑器(在vi/vim中按Esc键后输入:wq回车)
4、手动创建日志目录及初始日志文件:
sudo mkdir -p /var/log/sudo
sudo touch /var/log/sudo.log
sudo chmod 600 /var/log/sudo.log
sudo chown root:root /var/log/sudo.log
5、验证配置语法是否正确:
sudo visudo -c
6、执行一条测试命令以生成首条日志:
sudo id
7、检查日志是否已写入:
sudo tail -n 1 /var/log/sudo.log
二、配置rsyslog接收sudo日志
将sudo日志通过syslog协议转发至rsyslog服务,实现日志轮转、远程传输与多级分类。此方法兼容现有日志管理体系,支持按优先级过滤与归档策略。
1、编辑sudoers文件启用syslog输出:
sudo visudo
2、添加以下行(替换原有logfile配置):
Defaults syslog=local1
Defaults log_year,log_host
3、创建rsyslog专用配置文件:
sudo tee /etc/rsyslog.d/50-sudo.conf local1.* /var/log/sudo-syslog.log
& stop
EOF
4、设置日志文件权限与属主:
sudo touch /var/log/sudo-syslog.log
sudo chmod 640 /var/log/sudo-syslog.log
sudo chown root:syslog /var/log/sudo-syslog.log
5、重启rsyslog服务使配置生效:
sudo systemctl restart rsyslog
6、触发sudo操作进行验证:
sudo whoami
7、确认日志已落盘:
sudo tail -n 1 /var/log/sudo-syslog.log
三、启用sudo详细审计模式(含命令参数)
默认sudo日志仅记录命令路径,不包含完整参数。启用command logging可捕获实际执行的全部命令行内容,防止绕过式提权行为被隐藏。
1、编辑sudoers配置:
sudo visudo
2、追加以下两行配置:
Defaults log_input
Defaults log_output
3、确保已启用logfile或syslog任一基础日志通道(如方法一或二)
4、为避免I/O阻塞,建议同步配置日志缓冲策略:
Defaults iolog_dir="/var/log/sudo-io/%{user}"
Defaults iolog_mode=0600
5、创建IO日志根目录:
sudo mkdir -p /var/log/sudo-io
sudo chmod 700 /var/log/sudo-io
6、执行带参数的sudo命令触发记录:
sudo ls -la /root
7、检查输入日志是否存在:
sudo find /var/log/sudo-io -name "stdin" | head -n 1
四、限制sudo日志访问权限并启用日志保护
防止非授权用户篡改或删除sudo审计日志,需严格控制日志文件的访问控制列表(ACL)与不可变属性,确保日志完整性。
1、设置日志文件属主与权限:
sudo chown root:root /var/log/sudo.log
sudo chmod 600 /var/log/sudo.log
2、为日志目录添加访问控制列表,禁止普通用户进入:
sudo setfacl -m u::r-x,g::---,o::--- /var/log/sudo
3、对关键日志文件设置不可变标志(需root权限):
sudo chattr +a /var/log/sudo.log
4、验证不可变属性是否生效:
sudo lsattr /var/log/sudo.log
5、若启用iolog_dir,同样对其应用不可变设置:
sudo chattr +a /var/log/sudo-io
6、检查当前sudoers中是否禁用日志覆盖:
sudo grep -i "logfile\|syslog" /etc/sudoers
五、集成journalctl统一审计查询
利用systemd-journald聚合sudo相关事件,结合UID、时间范围与命令字段进行交叉检索,适用于临时排查与跨服务关联分析。
1、确认journald已启用持久化存储:
sudo mkdir -p /var/log/journal
2、重启journald服务以加载新日志源:
sudo systemctl restart systemd-journald
3、执行sudo命令触发journal事件:
sudo date
4、按命令名筛选sudo调用记录:
sudo journalctl _COMM=sudo -n 10
5、按特定用户UID查询其全部sudo行为:
sudo journalctl _COMM=sudo _UID=$(id -u) --since "1 hour ago"
6、导出指定时间段的sudo审计记录为文本:
sudo journalctl _COMM=sudo --since "today" --output=short-iso > /tmp/sudo-audit-today.log










