麒麟系统中管理员与审计员权限必须严格隔离:创建无登录shell的audadm账户,仅授权审计专用只读命令;收紧/var/log/audit目录权限至700并属主root;锁定auditd服务文件并禁用管理员对其控制;配置审计员专属终端或受限ssh会话。

在麒麟系统中实现管理员与审计员权限互相独立,必须切断两者在日志访问、系统配置、用户管理三个关键路径上的交叉操作能力,避免同一账户既能修改系统又能查看审计痕迹。
创建隔离的审计员账户
执行 sudo useradd -s /sbin/nologin audadm 创建审计员账户,【-s /sbin/nologin 是强制限制其无法交互式登录shell的关键】。这一步防止审计员通过终端直接执行任意命令,仅允许其通过专用审计工具或受限命令访问日志。
运行 sudo passwd audadm 设置强密码,密码需含大小写字母、数字及特殊符号,长度不少于8位。
编辑 sudoers 文件:执行 sudo visudo,在文件末尾添加以下行:audadm ALL=(root) NOPASSWD: /usr/bin/cat /var/log/audit/*, /usr/sbin/ausearch, /usr/bin/less /var/log/audit/*, /usr/bin/tail -n 50 /var/log/audit/audit.log。只放行审计必需的只读命令,其余全部禁止。
剥离管理员对审计日志的访问权
默认情况下 root 或 sudo 用户可直接读取 /var/log/audit/ 目录下所有文件,必须立即阻断。
执行 sudo chmod 700 /var/log/audit,将目录权限收紧为仅属主(即 auditd 进程运行用户)可访问。
执行 sudo chown root:root /var/log/audit,确保目录所有者和所属组均为 root,防止管理员通过切换组身份绕过权限检查。
验证是否生效:切换至 sysadmin 账户后执行 ls /var/log/audit,应返回 Permission denied;而 audadm 执行 sudo cat /var/log/audit/audit.log 可正常输出内容。
禁用管理员修改审计策略的能力
审计策略由 auditd 服务控制,若管理员能重启或重载该服务,就可能清空日志、关闭记录或篡改规则——这直接破坏审计独立性。
第一步:确认 auditd 服务当前状态:sudo systemctl status auditd,记录其 Unit 文件路径(通常是 /usr/lib/systemd/system/auditd.service)。
第二步:锁定服务文件权限:sudo chmod 644 /usr/lib/systemd/system/auditd.service,再执行 sudo chown root:root /usr/lib/systemd/system/auditd.service,防止非 root 用户修改。
第三步:禁用管理员对 auditd 的控制权,在 /etc/sudoers 中删除或注释掉所有包含 systemctl restart auditd、systemctl reload auditd、auditctl 的授权行。这一步不可跳过,否则前面所有设置形同虚设。
配置审计员专属登录与会话环境
方法一:启用图形化审计终端
安装轻量终端:执行 sudo apt install mate-terminal(如未预装)。
创建桌面启动器:在 /usr/share/applications/audadm-terminal.desktop 中写入:
[Desktop Entry]
Name=审计专用终端
Exec=mate-terminal --command="sudo less /var/log/audit/audit.log"
Type=Application
Categories=Utility;
Terminal=false
保存后执行 sudo chmod 644 /usr/share/applications/audadm-terminal.desktop,并确保该文件仅 audadm 用户可通过桌面菜单启动。
方法二:限制 SSH 登录行为(适用于远程审计)
编辑 /etc/ssh/sshd_config,添加段落:
Match User audadm<br> ForceCommand sudo /usr/bin/less /var/log/audit/audit.log<br> X11Forwarding no<br> AllowTcpForwarding no
执行
sudo systemctl restart sshd 生效。此时 audadm 用户 SSH 登录后只能执行预设命令,无法获得 shell 提示符。











