在Linux系统中,sudo
和su
都是用于权限提升的命令,但它们的用途、安全性和工作方式有显著区别。以下是详细对比:
特性 | su |
sudo |
---|---|---|
目的 | 切换用户身份(默认切换到root) | 以其他用户身份执行命令(默认root) |
密码要求 | 需要目标用户的密码 | 需要当前用户的密码(可配置免密码) |
权限粒度 | 获得目标用户的完整权限 | 可精细控制允许执行的命令 |
日志记录 | 无详细日志(需额外配置) | 默认记录所有操作(/var/log/auth.log ) |
su
(Substitute User)bash
su - # 切换到root(需root密码)
su - username # 切换到其他用户(需目标用户密码)
exit
。sudo
(Superuser Do)bash
sudo apt update # 以root身份运行apt
sudo -u username cmd # 以指定用户身份运行命令
/etc/sudoers
文件控制,支持命令白名单和免密码操作。su
的风险:
rm -rf /
)。sudo
的优势:
sudo
操作会被记录,便于排查问题。NOPASSWD
选项避免频繁输密码(需谨慎使用)。su
:依赖/etc/pam.d/su
和用户密码数据库,无细粒度控制。sudo
:通过/etc/sudoers
文件(建议用visudo
编辑)配置:
bash
# 允许用户alice以root身份运行apt命令
alice ALL=(root) /usr/bin/apt
# 允许组admin免密码执行任何命令
%admin ALL=(ALL) NOPASSWD: ALL
su
:需要长时间以其他用户身份工作(如维护场景)。sudo
:日常管理任务(更安全、可审计)。sudo
分配权限,避免直接使用su
到root。sudo
权限:仅授权必要的命令,例如:
bash
user1 ALL=(root) /usr/bin/systemctl restart nginx
su -c
:在需要Shell环境时,可通过sudo
调用su
:
bash
sudo su - -c "whoami" # 以root身份执行命令(需配置sudo权限)
su
:简单但风险高,适合少数可信场景。sudo
:更安全、灵活,是现代Linux系统的推荐方式。