在Linux系统的权限管理体系中,su和sudo是两个高频使用的命令,二者都能实现权限提升的效果,但在设计逻辑、使用规则和安全特性上存在明显差异,理解这些差异能帮助用户更合理地操作系统权限。

su命令的核心特性
su是switch user的缩写,核心功能是切换当前用户身份到其他用户,默认情况下如果不指定目标用户,会切换到root用户。切换时需要输入目标用户的密码,切换成功后当前会话的权限会完全继承目标用户的权限。
常见的su使用方式如下:
# 切换到root用户,需要输入root用户的密码 su # 切换到root用户并加载root的环境变量,需要输入root用户的密码 su - # 切换到指定用户test,需要输入test用户的密码 su test
su命令的权限范围是全局的,一旦切换成功,后续所有操作都会以目标用户身份执行,直到退出当前切换的会话。
sudo命令的核心特性
sudo是superuser do的缩写,核心功能是以其他用户(默认是root)的权限执行单条命令,不需要切换到目标用户的身份。使用sudo时需要输入当前用户自己的密码,前提是当前用户已经被配置在sudo的授权列表中。
常见的sudo使用方式如下:
# 以root权限执行查看系统进程的命令,输入当前用户的密码 sudo ps -ef # 以root权限编辑系统配置文件,输入当前用户的密码 sudo vim /etc/profile # 以指定用户test的身份执行命令,输入当前用户的密码 sudo -u test ls /home/test
sudo的权限是单次的,每条需要高权限的命令都需要单独加sudo前缀,执行完成后当前用户身份不会发生变化。
su和sudo的核心区别对比
两者的核心差异可以从以下几个维度区分:
| 对比维度 | su命令 | sudo命令 |
|---|---|---|
| 密码要求 | 需要输入目标用户的密码 | 需要输入当前用户自己的密码 |
| 权限范围 | 切换后全局继承目标用户权限 | 仅单条命令使用目标用户权限 |
| 授权配置 | 只要知道目标用户密码即可使用 | 需要提前在sudoers文件中配置授权 |
| 安全特性 | 密码泄露后可直接获取目标用户全部权限 | 可精细化控制允许执行的命令,密码有效期短 |
| 会话状态 | 切换后保持目标用户会话直到退出 | 执行完命令后回到原用户会话 |
典型使用场景建议
如果是需要连续执行多条高权限操作,且操作环境需要完全匹配目标用户的环境变量,可以选择使用su -完成切换后再操作。如果是仅需执行单条高权限命令,或者需要给普通用户开放部分高权限操作但不想泄露root密码,优先使用sudo命令,既方便又能降低权限泄露的风险。
注意事项
- 使用su切换到root用户后,操作需格外谨慎,避免误执行删除系统文件的命令
- 配置sudo授权时,尽量遵循最小权限原则,仅开放必要的命令权限,不要直接给普通用户开放全部root权限
- sudo的密码默认会有几分钟的有效期,短时间内连续执行sudo命令不需要重复输入密码,超过有效期后需要重新输入
提示:如果系统没有配置sudo权限,执行sudo命令时会提示当前用户不在sudoers文件中,此时需要root用户编辑/etc/sudoers文件添加对应授权。