在 Linux 系统中,su
和 sudo
都是用于权限管理的命令,但它们的用途和工作方式有显著区别。以下是详细对比:
/bin/bash
)。exit
或 Ctrl+D
退出。bash
su # 切换到 root(需 root 密码)
su - # 切换到 root 并加载其环境变量
su username # 切换到其他用户(需该用户密码)
风险:直接切换到 root 可能导致滥用权限,且需共享 root 密码。
/etc/sudoers
文件控制,可精细分配(如允许特定用户运行特定命令)。bash
sudo command # 以 root 身份执行命令
sudo -u username command # 以指定用户身份执行
sudo -i # 启动 root 的交互式 Shell(类似 `su -`)
优势:无需共享 root 密码,审计日志(记录在 /var/log/auth.log
)。
特性 | su | sudo |
---|---|---|
密码要求 | 目标用户密码(如 root) | 当前用户密码 |
权限范围 | 切换用户后获得完整权限 | 仅限授权的单条命令 |
日志记录 | 无详细日志 | 详细记录每条命令 |
配置灵活性 | 无 | 可通过 /etc/sudoers 定制 |
典型使用场景 | 需要长期使用 root 权限时 | 临时执行特权命令时 |
使用 su
:
需要长时间以 root 身份操作(如系统维护),且团队内信任共享 root 密码。
使用 sudo
:
日常管理任务,遵循最小权限原则,避免直接切换 root。
sudo
分配权限,避免直接使用 su
。sudoers
:visudo
命令编辑 /etc/sudoers
,例如:
bash
username ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt # 允许无密码执行 apt
sudo -i
(比 su -
更安全)。通过合理使用 su
和 sudo
,可以平衡便利性与系统安全性。建议优先使用 sudo
,尤其是在多用户环境中。