ssh会话中安全切换用户应优先用sudo-i或sudo-u,禁用root直连,通过sudoers精确授权并审计日志;su必须加-参数加载目标环境,且限制wheel组使用。

在 SSH 会话中安全切换用户身份,核心是避免明文传递 root 密码、限制权限范围、保留可审计痕迹。直接用 su 或裸 sudo 不够安全,尤其在远程管理场景下。
优先使用 sudo -i 或 sudo -u,而非 su
普通用户应通过预配置的 sudo 权限切换,而不是依赖 root 密码:
-
sudo -i:模拟登录 root 的完整环境(家目录、PATH、shell 配置),等效于
su -,但验证的是当前用户密码,不暴露 root 密码 -
sudo -u username command:以指定用户身份执行单条命令,例如
sudo -u nginx ls /etc/nginx,最小化权限暴露 - 确保
/etc/sudoers中仅授予必要权限,例如:%admin ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
禁用 root 的 SSH 直接登录,强制走普通用户 + sudo
这是最基础的安全前提:
- 编辑
/etc/ssh/sshd_config,设PermitRootLogin no,重启 sshd - 所有远程接入必须使用普通账号(如
deploy、admin),再通过 sudo 提权 - 这样既满足操作需求,又保证每次提权行为在
/var/log/secure或journalctl中留有完整记录(含用户名、时间、命令)
用 su - 代替 su,防止环境变量污染
如果确需用 su(如某些遗留脚本或受限环境),务必加 - 参数:
-
su -会加载目标用户的 shell 配置(~/.bashrc、/etc/profile),重置PWD、PATH、HOME等关键变量 - 裸
su只改 UID/GID,保留原用户的环境,可能导致命令找不到(如apt在 root PATH 下才可用)、误写入错误目录等问题 - 验证方式:切换后运行
echo $HOME; echo $PATH,确认已变为目标用户路径
限制 su 的可用范围,配合 PAM 控制
防止任意用户滥用 su 切换到高权限账户:
- 启用
pam_wheel模块:编辑/etc/pam.d/su,取消注释auth required pam_wheel.so use_uid - 将可信用户加入
wheel组:usermod -aG wheel deploy - 之后只有
wheel组成员才能执行su -切换,普通用户直接被拒绝 - 该策略与
sudo配合使用,形成双层控制:SSH 登录靠账号白名单,本地提权靠组权限











