linux 切换用户主要使用 su 命令,全称 switch user,可以从当前用户切换成另外一个用户,最常用就是普通用户切换到 root 超级管理员,另外还有 sudo,sudo 不是切换整个会话,只是单条命令临时提权,很多新手会把 su 和 sudo 搞混,su 切换之后会进入新用户的完整 shell 环境,加载新用户的环境变量,执行 su 需要知道目标用户密码,root 切换普通用户不需要密码,普通用户切换其他用户必须输入目标账号密码。
一 su 命令两种写法对照表
| 命令 | 说明 |
|---|---|
| su 用户名 | 切换用户,但是不加载目标用户完整环境 |
| su - 用户名 | 推荐写法,带横杠,完整加载目标用户环境变量 家目录 |
示例
普通用户切换 root
su - root
切换成普通用户 user01
su - user01
退出当前切换后的用户,回到原来账号,输入 exit
二 sudo 临时提权 不是完整切换
sudo 命令
示例
sudo mkdir /test
特点,只针对这一条命令临时获得 root 权限,整个终端仍然是原来普通用户,不需要切换会话,日常运维最常用。
三 操作步骤
第一步 确认目标用户账号已经存在,可以用 cat /etc/passwd 查看用户列表
第二步 执行 su - 目标用户名
第三步 输入目标用户密码,验证成功完成切换
第四步 操作完成之后输入 exit,返回原来用户
四 深度原理与关键特性
su - 这个横杠非常关键,如果不加横杠,家目录还是原来用户的目录,环境变量 PATH 还是旧的,经常出现命令找不到,配置不生效,所以推荐永远带横杠。
sudo 需要提前配置 sudoers 文件,普通用户要加入 sudo 组,才可以使用 sudo,否则提示不在 sudoers 文件中。
root 账号切换到普通用户,不需要密码,因为 root 拥有全部权限。
五 常见踩坑场景
1 su 忘记加横杠,环境变量没有加载,命令异常
2 普通用户没有加入 sudo 组,sudo 报错不在 sudoers
3 密码输入错误,认证失败
4 混淆 su 和 sudo,以为 sudo 就是切换成 root
5 长时间 root 登录操作,安全风险高,推荐日常普通账号,需要的时候再 su 或者 sudo 提权
六 补充拓展
如果需要临时以其他用户身份执行单条命令,不需要进入交互 shell,可以使用
su - 用户名 -c "命令"
示例
su - user01 -c "ls /home/user01"
【常见问题】
问题 1 linux 怎么切换用户,su 和 sudo 区别是什么
回答 1 linux 怎么切换用户,su 是完整切换成另一个用户,进入新用户 shell,sudo 只是单条命令临时提权,不会切换整个会话。
问题 2 linux 怎么切换用户 su 后面横杠有什么作用
回答 1 linux 怎么切换用户,su - 带横杠会加载目标用户完整环境变量,切换到家目录,不加横杠环境不完整,推荐使用带横杠写法。
问题 3 linux 怎么切换用户,root 切换普通用户需要密码吗
回答 1 linux 怎么切换用户,root 是超级管理员,root 切换普通用户不需要密码,普通用户切换其他用户必须输入目标用户密码。
问题 4 linux 怎么切换用户,sudo 提示不在 sudoers 文件怎么办
回答 1 linux 怎么切换用户,sudo 提示不在 sudoers,代表当前账号没有授权 sudo 权限,需要 root 用户把账号加入 sudo 组或者修改 sudoers 配置。
【免责申明】
本文内容基于 linux su sudo 命令通用用法整理,root 权限操作风险高,遵循最小权限原则,不要随意授权 sudo 权限,错误修改 sudoers 会造成提权失效,本文不对错误操作造成系统安全问题承担责任。


