我们来详细讲解一下 Linux 中的 su 指令。
1. 核心概念:什么是 su?
su 是 Substitute User(替换用户)或 Switch User(切换用户)的缩写。顾名思义,它的主要功能是允许当前用户在不注销登录的情况下切换到另一个用户账户,并继承该用户的权限和环境。
最常见的使用场景就是切换到 root 超级用户来执行系统管理任务。
2. 基本语法
su [选项] [用户名]
- 用户名: 想要切换到的目标用户的用户名。如果不指定用户名,则默认切换到
root用户。
3. 常用选项
| 选项 | 全称 | 说明 |
|---|---|---|
- 或 -l 或 --login | --login | 登录式切换。这是最重要的选项。它会模拟一次完整的登录过程: 1. 切换到目标用户的家目录。 2. 加载目标用户的 shell 环境(如 ~/.bashrc, ~/.profile 等)。3. 环境变量(如 USER, HOME, PATH)会被设置为目标用户的。 |
-c | --command | 执行单条命令。切换到对应用户身份执行一条命令,执行完毕后自动退回到原用户。 |
-s | --shell | 指定要使用的 shell,例如 /bin/bash。 |
-m 或 -p | --preserve-environment | 保持当前环境变量不变。不会重新加载目标用户的环境配置。 |
4. 常见用法与示例
示例 1:切换到 root 用户(非登录式)
su
或
su root
- 特点:
- 需要输入 root 用户的密码。
- 当前工作目录不会改变。
- 环境变量(如
PATH,HOME)仍然是原用户的,这可能导致某些 root 命令找不到或执行异常。 - 提示符 可能仍然是
$(普通用户),而不是 root 的#(但用户ID已经是0)。
不推荐这种方式,因为环境不完整,容易出错。
示例 2:切换到 root 用户(登录式 - 推荐方式)
su -
或
su -l
或
su -l root
- 特点:
- 需要输入 root 用户的密码。
- 会切换到 root 的家目录(
/root)。 - 会完整加载 root 用户的 shell 和环境配置。
- 提示符 会变成
#,表明现在是真正的 root 环境。 - 执行
exit命令或按Ctrl+D可以退回到原来的用户。
这是切换到 root 进行系统管理时最常用和最安全的方式。
示例 3:切换到其他普通用户
su - alice
- 这会切换到用户
alice的完整环境。 - 需要输入的是 用户 alice 的密码,而不是 root 的密码(除非当前用户是 root)。
示例 4:以某用户身份执行单条命令
su -c "apt update" root
- 这条命令会切换到 root 用户来执行
apt update,执行完成后立刻退回到当前用户。 - 非常适合在脚本中或需要临时提权执行一个操作的场景。
su -c "vim /etc/config.conf" alice
- 以
alice的身份编辑她的配置文件。
5. su 与 sudo 的区别
这是一个非常重要的概念。很多人会混淆 su 和 sudo。
| 特性 | su | sudo |
|---|---|---|
| 密码 | 需要输入目标用户的密码。 | 需要输入当前用户自己的密码(进行身份验证)。 |
| 默认权限 | 直接切换到目标用户(通常是 root),拥有其全部权限。 | 默认不会切换到 root,而是以 root 权限执行单条命令。权限粒度更细。 |
| 审计性 | 所有通过 su 切换到 root 的用户,在日志里都显示为 root,无法追溯具体是哪个普通用户执行的操作。 | 具有完美的审计追踪。sudo 会详细记录谁、在什么时候、执行了哪条命令。 |
| 灵活性 | 相对死板,要么获得全部权限,要么没有。 | 极其灵活。管理员可以通过 /etc/sudoers 文件精确控制哪些用户可以在哪些主机上以哪些身份运行哪些命令。 |
| 默认行为 | 切换到 root 的完整环境。 | 临时提权执行命令,环境变化较小。 |
简单总结:
su -: 让你成为 root。sudo: 让你以 root 权限执行一个命令。
现代 Linux 系统(如 Ubuntu)的最佳实践是:
- 禁用 root 用户的密码登录。
- 系统初始用户通过
sudo来管理系统。 - 尽量减少直接使用
su -切换到 root,而是使用sudo -i(模拟登录 root)或sudo some_command。
6. 安全注意事项
- 不要轻易分享 root 密码: 因为
su需要目标用户的密码,如果很多人都知道 root 密码,那么审计和安全性将无从谈起。 - 优先使用
sudo: 在需要提升权限时,首先考虑使用sudo,因为它更安全、更可控。 - 使用
su -: 如果需要完整切换用户环境,务必加上-选项,避免因环境变量问题导致误操作。
希望这个详细的解释能帮助你彻底理解 su 命令!

2053

被折叠的 条评论
为什么被折叠?



