在 Linux 中,sudo、su 和 su - 都与权限切换相关,但用途和效果不同
1. sudo
普通用户执行特权命令
bash
sudo command
以 root 权限执行单条命令
需要输入 当前用户的密码
权限由 /etc/sudoers 文件控制
执行后环境变量保持当前用户不变
示例:
bash
sudo apt update # 以 root 权限更新软件包列表
2. su (Switch User)
切换到其他用户(默认 root)
bash
su [用户名]
切换到指定用户(不指定则切换到 root)
需要输入 目标用户的密码
保持 当前的工作目录和环境变量
主要用于用户身份切换
示例:
bash
su # 切换到 root(需 root 密码)
su alice # 切换到用户 alice(需 alice 的密码)
3. su - (su + 登录 shell)
切换到其他用户的登录环境
bash
su - [用户名]
连字符 - 或 -l 表示登录 shell
需要输入 目标用户的密码
切换到目标用户的 家目录
加载目标用户的 完整环境变量(~/.bashrc, ~/.profile 等)
类似于重新登录
示例:
bash
su - # 切换到 root 的登录环境
su - alice # 切换到 alice 的登录环境
对比表格
| 命令 | 需要密码 | 环境变量 | 工作目录 | 典型用途 |
|---|---|---|---|---|
sudo cmd |
当前用户密码 | 当前用户环境 | 当前目录 | 临时执行特权命令 |
su |
目标用户密码 | 当前用户环境 | 当前目录 | 切换用户身份但保持环境 |
su - |
目标用户密码 | 目标用户环境 | 目标用户家目录 | 完全切换到目标用户环境 |
使用建议
-
日常管理 :使用
sudo执行单条特权命令(更安全,有操作日志) -
需要 root shell :使用
sudo -i或sudo su -(比直接su -更安全) -
完全切换用户环境 :使用
su - username -
临时切换身份 :使用
su username
安全提示
bash
# 推荐的安全做法:
sudo -i # 切换到 root 的登录环境(使用当前用户密码)
sudo -u alice bash # 以 alice 身份启动 shell
# 不推荐(除非必要):
直接使用 root 密码通过 su/su - 切换
最佳实践 :配置 sudo 权限给普通用户,避免共享 root 密码,使用 sudo 代替直接 su 到 root。