permituserrc 不是 openssh 合法配置项,添加会导致 sshd 启动失败;真正影响用户脚本执行的是 permituserenvironment 和 authorized_keys 中的 command= 字段,加固需禁用相关选项并收紧权限与监控。

PermitUserRC 并不是 OpenSSH 的合法配置项,OpenSSH 官方配置中不存在这个参数。试图在 /etc/ssh/sshd_config 中添加 PermitUserRC yes/no 不仅无效,还可能导致 sshd 服务启动失败(配置校验不通过),属于常见误解或混淆项。
真正影响用户级启动脚本执行的是 PermitUserEnvironment 和 AuthorizedKeysCommand
黑客常利用用户家目录下的隐蔽脚本实现持久化,典型路径包括:
-
~/.bashrc、~/.profile、~/.bash_profile中植入wget/curl/ssh下载恶意载荷 -
~/.ssh/authorized_keys中插入带command=限制的后门密钥(如command="/tmp/.x.sh">>/dev/null 2>&1) - 通过
PermitUserEnvironment yes配合~/.ssh/environment注入LD_PRELOAD或覆盖PATH
这些行为不依赖所谓 “UserRC”,而是利用 SSH 协议层和 Shell 启动机制的默认逻辑。
阻断家目录脚本持久化的关键实操项
以下配置全部生效于 /etc/ssh/sshd_config,修改后需运行 sudo systemctl reload sshd:
-
禁用用户环境变量注入:设置
PermitUserEnvironment no(默认即为 no,但务必显式确认) -
禁止 command= 强制执行:添加
IgnoreUserKnownHosts yes并配合ForceCommand限制(仅适用于跳板场景);更通用做法是定期扫描authorized_keys文件中的command=字段:grep -r "command=" /home/*/\.ssh/authorized_keys 2>/dev/null -
限制 Shell 启动文件加载:将用户默认 Shell 改为
/usr/sbin/nologin或/bin/false(对非交互账户);对必须登录的用户,可部署统一的/etc/skel/.bashrc模板,并移除所有远程加载逻辑,同时设为只读:chown root:root /home/*/.bashrc && chmod 644 /home/*/.bashrc -
禁用未认证的 SSH 配置加载:确保
StrictModes yes(默认开启),防止攻击者篡改~/.ssh/config实现代理跳转或自动命令执行
配套加固:从文件权限与监控层面堵死漏洞
仅改 SSH 配置不够,需同步收紧家目录权限与运行时监控:
- 批量修复用户目录权限:
find /home -maxdepth 1 -type d ! -name "home" -exec chmod 755 {} \;;确保~/.ssh为700,authorized_keys为600 - 用
aide或tripwire监控/home/*/{.bash*,.profile,.ssh}的变更,异常修改立即告警 - 在
/etc/bash.bashrc或/etc/profile.d/下部署全局检测逻辑,例如检查当前会话是否由可疑父进程(如sshd外的sh -c)启动,发现则退出











