核心是权限隔离、行为锁定与日志可溯三者协同:新建审计组及禁用交互登录的只读用户,部署白名单封装shell脚本,通过sshd_config中forcecommand精准接管会话并关闭所有转发通道,同时配置日志目录setgid与umask确保审计组自动继承只读权限。

为特定运维组配置只读账号与审计环境,核心是“权限隔离 + 行为锁定 + 日志可溯”三者协同。不能只靠改 shell 或加 sudo 规则,必须从用户创建、命令控制、文件访问、会话接管四个层面同步加固。
一、创建专用审计组与只读用户
不复用现有账号,避免权限污染:
- 新建审计组:sudo groupadd auditgrp
- 创建用户并禁用交互式登录:sudo useradd -m -s /sbin/nologin auditor01(注意不是
/bin/false或/usr/bin/true,因部分 SSH 版本对后者处理异常) - 加入审计组:sudo usermod -aG auditgrp auditor01
- 仅启用密钥认证:在
/home/auditor01/.ssh/authorized_keys中写入公钥,权限设为600,同时在sshd_config中全局启用PubkeyAuthentication yes并禁用密码登录(PasswordAuthentication no)
二、部署强制接管的只读 Shell 封装器
靠 rbash 易被绕过(如通过 bash --norc),必须用自定义 wrapper 脚本实现白名单执行:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 新建脚本
/usr/local/bin/audit-shell,内容精简、无交互、防误操作:
#!/bin/bash
set -u -e -o pipefail
readonly CMD="${1:-help}"
<p>case "$CMD" in
"logs") exec /bin/ls -l /var/log/<em>.log 2>/dev/null | head -20 ;;
"journal") exec /usr/bin/journalctl -n 30 --no-pager -o short-iso ;;
"ps") exec /bin/ps aux --no-headers | /usr/bin/awk '{print $1,$2,$8,$11}' | head -25 ;;
"df") exec /bin/df -hT / /var/log /var/log/audit ;;
"help") echo "Available: logs | journal | ps | df" >&2; exit 1 ;;
</em>) echo "Command '$CMD' not allowed." >&2; exit 1 ;;
esac</p>- 赋权:sudo chown root:root /usr/local/bin/audit-shell && sudo chmod 755 /usr/local/bin/audit-shell
- 该脚本不接受任意参数,不支持管道/重定向/子 shell,启动即执行固定命令后退出
三、在 sshd_config 中精准匹配并封锁逃逸通道
放在 sshd_config 文件末尾,确保不被其他 Match 块覆盖:
Match User auditor01,auditor02
ForceCommand /usr/local/bin/audit-shell
AllowTcpForwarding no
X11Forwarding no
PermitTunnel no
GatewayPorts no
PermitOpen none
# 不要设置 PasswordAuthentication 或 PubkeyAuthentication —— 继承全局配置即可-
ForceCommand会忽略所有客户端传入的命令(包括ssh user@host tail -f /var/log/secure),始终执行指定脚本 - 显式关闭全部转发能力,防止通过端口映射、SOCKS 代理等方式绕过监控
- 若需批量管理,改用
Match Group auditgrp更易维护
四、控制日志路径访问权限与继承机制
仅开放必要路径,且确保新生成日志文件自动具备审计组读权限:
- 将关键日志目录属组设为
auditgrp:sudo chgrp -R auditgrp /var/log/audit /var/log/secure /var/log/messages - 设目录权限为
750(组可读可执行,不可写):sudo chmod 750 /var/log/audit /var/log - 启用 setgid,保证新日志文件继承组:sudo chmod g+s /var/log/audit
- 配合 umask 控制文件权限:例如 rsyslog 中配置
$FileCreateMode 0640,或 systemd 服务中加UMask=0027,使新日志默认为-rw-r-----
不复杂但容易忽略:整个流程里最常出错的是用户 shell 仍设为 /bin/bash 却指望 ForceCommand 全程生效——只要用户能拿到交互式 shell,一切限制都形同虚设。务必确认 /etc/passwd 中对应用户的 shell 字段是 /sbin/nologin,而非任何可执行 shell。










