su命令核心分三类:不加-仅切身份不加载环境(易出错);加-或-l模拟完整登录并加载目标用户环境;用-c以目标用户身份执行单条命令后立即返回。

su 命令是 Linux 运维中切换用户身份最直接的工具,核心在于理解“是否加载目标用户环境”和“是否执行完即退出”这两个关键维度。普通用户切 root 或其他用户需密码,root 切任意用户则无需密码。
基础切换:不带参数或只用 -
不加参数运行 su,默认切换到 root,但只改 UID/GID,不加载 root 的环境变量(比如 PATH 仍是原用户的,家目录也还是 /home/xxx)。这种模式容易导致命令找不到、配置不生效等问题。
加 -(等价于 -l 或 --login)才真正模拟一次登录:切换 UID/GID、家目录、SHELL、PATH、MAIL 等全部环境变量。运维中推荐始终使用 su -,避免因环境残留引发误操作。
指定目标用户并加载环境
切换到非 root 用户时,必须显式写出用户名,并建议带上 -:
- su - alice:以 alice 身份登录,进入其家目录,加载 .bash_profile 等配置
- su -l bob -c "systemctl restart nginx":用 bob 身份执行一条命令后立刻返回,且该命令在 bob 的完整环境下运行
注意:普通用户之间切换,需要输入目标用户的密码;而 root 切换到任何用户都不需要对方密码。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
临时提权执行单条命令
不需要进入交互式 shell 时,用 -c 最安全高效:
- su -c "useradd dev01":以 root 身份添加用户,执行完自动回到当前用户
- su -c "cat /etc/shadow" root:明确指定目标用户为 root(虽默认就是 root,但写明更清晰)
这种方式不留 shell 会话,降低权限滞留风险,适合脚本或批量运维场景。
常见误区与安全提醒
运维中容易忽略的细节:
- 只输 su 不加 -,看似成了 root,但 pwd 还在自己家目录、which systemctl 可能报错——本质是“假 root”
- 忘记退出:切换后没执行 exit 或 Ctrl+D,长期停留在高权限 shell,增加误操作或被劫持风险
- 密码暴露:su 要求输入目标用户密码,意味着 root 密码需多人知晓——生产环境更推荐配 sudo 权限,而非共享 root 密码
su 是基础能力,但不是唯一方案。日常运维中,明确最小权限原则,能用 sudo 就不用 su,能用 -c 就不进交互 shell。

















