在 Linux 系统管理中,sudo、su、su – 是最常用、也是最容易混淆的三个权限相关命令。
很多新手在使用过程中,经常搞不清楚它们之间的区别,甚至误用导致权限问题或安全隐患。
本文将从工作原理、使用方式、环境变量变化以及安全性等多个角度,全面讲解 sudo、su 和 su – 命令的区别。
一、sudo 命令详解
1️⃣ 什么是 sudo
sudo 是一种权限委托机制,允许普通用户在授权范围内,以其他用户(默认是 root)的身份执行特定命令。
sudo 的权限规则定义在配置文件中:
通常通过 visudo 命令进行安全编辑。
2️⃣ sudo 的基本格式
-
USERNAME:要切换到的用户(默认 root)
-
COMMAND:要执行的命令
示例:
3️⃣ sudo 的执行流程
sudo 的执行流程如下:
-
用户执行 sudo 命令
-
系统检查 /etc/sudoers 中是否允许该用户使用 sudo
-
若有权限,输入的是当前用户自己的密码
-
验证成功后,以目标用户(通常是 root)身份执行命令
📌 注意:
-
root 用户使用 sudo 默认不需要输入密码
-
sudo 有时间缓存机制,一段时间内无需重复输入密码
4️⃣ sudo 的优点
-
不需要共享 root 密码
-
可精确控制可执行命令
-
有日志记录(更安全)
-
更符合生产环境安全规范
👉 生产服务器强烈推荐使用 sudo
二、su 命令详解
1️⃣ 什么是 su
su 是 switch user(切换用户) 的缩写,用于在当前会话中切换到其他用户身份。
2️⃣ su 的常见用法
如果不指定用户名,默认切换为 root:
或:
3️⃣ su 的认证方式
-
普通用户 su root:需要输入 root 密码
-
root su 普通用户:不需要输入密码
📌 这也是 su 在安全性上不如 sudo 的原因之一。
三、su USERNAME 与 su – USERNAME 的区别
这是很多人最容易混淆的地方。
1️⃣ su USERNAME(不带 -)
特点:
-
仅切换用户身份
-
不切换工作目录
-
不加载目标用户的环境变量
-
继承原用户的 PATH、HOME 等变量
适合临时执行少量命令。
2️⃣ su – USERNAME(推荐)
或:
特点:
-
完整模拟用户登录
-
切换到目标用户的 HOME 目录
-
加载目标用户的环境变量
-
重置 PATH、SHELL、USER、LOGNAME 等
👉 更接近真正登录,安全性和兼容性更好
四、su – 的特殊说明
1️⃣ su – 等价写法
以下命令效果相同:
默认切换到 root 用户。
2️⃣ su 与 su – 的核心区别对比
| 对比项 | su | su – |
|---|---|---|
| 是否切换用户 | ✅ | ✅ |
| 是否切换 HOME | ❌ | ✅ |
| 是否加载环境变量 | ❌ | ✅ |
| 是否改变 PATH | ❌ | ✅ |
| 更安全 | ❌ | ✅ |
五、sudo 与 su 的核心区别对比
| 对比项 | sudo | su |
|---|---|---|
| 使用的密码 | 当前用户密码 | 目标用户密码 |
| 是否需要 root 密码 | ❌ | ✅ |
| 是否可控权限 | ✅ | ❌ |
| 是否有日志 | ✅ | ❌ |
| 适合生产环境 | ✅ | ❌ |
📌 关键记忆点:
su 用的是 root 密码,sudo 用的是用户自己的密码
六、关于 su 初始密码的问题说明
当执行:
系统会提示输入 root 密码,而不是当前用户密码。
如果 root 密码未设置,可以通过 sudo 设置:
设置完成后即可正常使用 su 切换到 root。
七、使用建议(非常重要)
✅ 推荐做法:
-
日常管理:使用 sudo
-
必须切换完整环境:使用 su –
-
避免直接使用 su 长时间操作
❌ 不推荐:
-
多人共用 root 密码
-
生产环境长期使用 su 登录 root
八、总结
-
sudo:安全、可控、生产环境首选
-
su:仅切换身份,不切换环境
-
su -:完整切换用户和环境,适合系统管理
理解这三个命令的区别,是 Linux 权限管理的基础,也是走向专业运维的重要一步。
原创文章,作者:admin,如若转载,请注明出处:https://hostingchat.cn/18564.html