063 su命令
命令说明
su(switch user)用于切换用户身份,默认切到 root,需要目标用户密码;加 - 加载目标用户的完整登录环境,是临时提权与以他人身份调试的手段。
语法
su [选项]... [用户 [参数]]
常用参数
| 参数 | 说明 |
|---|---|
| - / -l | 完整登录 shell:切换环境变量、家目录(推荐) |
| -c 命令 | 以目标用户执行一条命令后返回,如 su - www -c "ls /var/www" |
| -s Shell | 指定切换后的 shell |
| -m / -p | 保留当前环境变量(不重置) |
| -u 用户 | 配合 runuser/systemd-run 的细粒度用法(部分实现) |
| (无参数) | su 不带用户默认切 root,环境部分保留,易踩坑 |
| exit / Ctrl+D | 退出切换回到原用户 |
使用示例
$ su -
切换到 root 并加载 root 环境
$ su - zhangsan
切换到普通用户 zhangsan(需其密码)
$ su - www -s /bin/bash -c "id"
以 www 用户执行命令验证身份
$ su -c "systemctl restart nginx" root
root 下执行单条服务命令
$ sudo su -
知道 sudo 密码而不知 root 密码时的提权路径
$ whoami
切换后确认当前身份
$ exit
退出 su 会话
$ tail -f /var/log/secure
su 失败排错:看认证日志与 PAM 限制
实用技巧
- su 与 su - 区别:不带 - 时 PATH、HOME、USER 仍是原用户的,常导致“明明 root 却 command not found”;养成习惯永远加 -。
- su 需要目标用户密码,sudo 只需要自己的密码(由 /etc/sudoers 授权),且 sudo 每条命令留审计日志,运维规范优先 sudo。
- RHEL 默认禁止普通用户 su root 之外的切换?不是——默认 su 任何用户都要密码;wheel 组限制要改 /etc/pam.d/su 取消 auth required pam_wheel.so 的注释。
- root 可 su 到任何用户不需要密码,反向不行;这也是 root 密码丢失时的恢复思路(单用户模式重置)。
- 容器里常没有 root 密码(passwd -d 或从未设置),su 会直接失败,用 su -s /bin/bash -c 或 docker exec -u 用户 进容器。