Linux su 命令核心用法总结
一、su 命令核心作用
su 是 substitute user (切换用户)或 switch user 的缩写,核心作用是完全切换到另一个用户的身份(默认切换到 root),获得该用户的所有权限,进入其专属的命令行环境(加载目标用户的环境变量、配置文件等)。
简单来说:su 是 "完整切换用户",切换后从头到尾都以目标用户身份操作,直到主动退出;而 sudo 是 "临时借用权限",仅单条 / 短期命令提权。
二、核心特性
- 权限完全切换:切换后获得目标用户的所有权限(无任何命令限制),等同于直接用该用户登录;
- 密码验证要求 :需输入目标用户的密码 (而非当前用户密码),例如
su root需输入 root 密码,su alice需输入 alice 密码; - 环境变量加载:
- 默认
su:仅切换用户身份,保留当前用户的环境变量(如PATH、HOME); - 带
-选项(su -):完整切换环境,加载目标用户的所有环境变量和配置文件(推荐用法);
- 无操作审计 :默认情况下,
su切换后的操作不会单独记录(需额外配置日志),无法精准追溯操作人; - 无需提前授权 :只要知道目标用户密码,任何用户均可尝试
su切换(无配置文件限制,仅依赖密码验证)。
三、常用基础用法
1. 切换到 root 用户(默认行为)
\# 方式1:仅切换身份,保留当前环境变量
su
\# 方式2:完整切换环境(推荐),等同于 root 直接登录
su -
\# 方式3:简写形式(同 su -)
su - root
\# 退出 root,返回原用户
exit
2. 切换到指定普通用户
格式:su [选项] 目标用户名
\# 切换到用户 alice,保留当前环境
su alice
\# 完整切换到 alice 的环境(加载其 .bashrc 等配置)
su - alice
\# 退出 alice,返回原用户
exit
3. 仅执行单条目标用户命令(不切换终端)
格式:su - 目标用户 -c "命令"(-c 表示执行单次命令)
\# 以 root 身份执行单次查看系统日志命令,执行后返回原用户
su - root -c "cat /var/log/secure"
\# 以 alice 身份执行单次创建文件命令
su - alice -c "touch /home/alice/test.txt"
四、与 sudo 命令的核心差异(补充对比)
| 特性 | su | sudo |
|---|---|---|
| 核心逻辑 | 完整切换用户身份 | 临时借用目标用户权限 |
| 密码要求 | 输入「目标用户密码」 | 输入「当前用户密码」(需授权) |
| 权限范围 | 目标用户的所有权限 | 仅授权的指定命令 |
| 环境变量 | 可选择是否加载目标环境 | 默认保留当前用户环境(sudo -i 加载 root 环境) |
| 操作审计 | 无默认日志,需额外配置 | 自动记录到系统日志(可追溯) |
| 安全风险 | 高(密码泄露即全权限泄露) | 低(精细化授权 + 审计) |
| 配置依赖 | 无需配置,仅依赖密码 | 依赖 /etc/sudoers 授权 |
| 适用场景 | 临时需要长期使用目标用户权限 | 日常单条 / 多条高权限操作(推荐) |
五、重要注意事项
-
生产环境慎用
su切换 root:由于
su无细粒度权限控制,且依赖 root 密码(多人共用易泄露),风险极高,建议生产环境禁用普通用户su切换 root(可通过sudoers配置限制); -
优先使用
su -而非su:仅
su -会加载目标用户的完整环境(如PATH、HOME),避免因环境变量不一致导致命令执行异常(例如su切换 root 后,可能无法使用sudo等命令); -
su切换后注意权限边界:切换到 root 后拥有系统最高权限,误操作(如
rm -rf /)会直接导致系统崩溃,需格外谨慎; -
忘记 root 密码时无法用
su重置:若 root 密码丢失,
su root无法执行(需输入 root 密码),此时需通过sudo passwd root重置(前提是当前用户有 sudo 授权)。
六、常见使用场景
- 临时需要长期操作 root 权限(非生产环境,如本地测试机);
- 切换到普通用户排查其专属权限问题(如用户目录权限、配置文件问题);
- 无 sudo 授权时,通过已知密码切换用户执行操作(仅限信任环境)。