插件窝 干货文章 linux中sudo和su有什么区别

linux中sudo和su有什么区别

用户 密码 命令 sudo 644    来源:    2025-05-03

在Linux系统中,sudosu都是用于权限提升的命令,但它们的用途、安全性和工作方式有显著区别。以下是详细对比:


1. 核心区别

特性 su sudo
目的 切换用户身份(默认切换到root) 以其他用户身份执行命令(默认root)
密码要求 需要目标用户的密码 需要当前用户的密码(可配置免密码)
权限粒度 获得目标用户的完整权限 可精细控制允许执行的命令
日志记录 无详细日志(需额外配置) 默认记录所有操作(/var/log/auth.log

2. 使用场景

su(Substitute User)

  • 切换用户:直接切换到另一个用户(包括root)的Shell环境。 bash su - # 切换到root(需root密码) su - username # 切换到其他用户(需目标用户密码)
  • 特点:获得目标用户的完整权限,退出需手动输入exit

sudo(Superuser Do)

  • 临时提权:以root(或其他用户)身份执行单条命令。 bash sudo apt update # 以root身份运行apt sudo -u username cmd # 以指定用户身份运行命令
  • 特点:权限通过/etc/sudoers文件控制,支持命令白名单和免密码操作。

3. 安全性对比

  • su的风险

    • 需要共享root密码,多人管理时难以追踪责任。
    • 获得完整权限后易引发误操作(如rm -rf /)。
  • sudo的优势

    • 最小权限原则:仅允许特定命令,降低误操作风险。
    • 审计追踪:所有sudo操作会被记录,便于排查问题。
    • 免密码配置:可通过NOPASSWD选项避免频繁输密码(需谨慎使用)。

4. 配置差异

  • 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

5. 如何选择?

  • 使用su:需要长时间以其他用户身份工作(如维护场景)。
  • 使用sudo:日常管理任务(更安全、可审计)。

6. 最佳实践

  1. 禁用root登录:通过sudo分配权限,避免直接使用su到root。
  2. 限制sudo权限:仅授权必要的命令,例如: bash user1 ALL=(root) /usr/bin/systemctl restart nginx
  3. 结合su -c:在需要Shell环境时,可通过sudo调用subash sudo su - -c "whoami" # 以root身份执行命令(需配置sudo权限)

总结

  • su:简单但风险高,适合少数可信场景。
  • sudo:更安全、灵活,是现代Linux系统的推荐方式。