插件窝 干货文章 Linux命令 su 和 sudo 的区别

Linux命令 su 和 sudo 的区别

root 密码 用户 切换 915    来源:    2025-05-13

在 Linux 系统中,susudo 都是用于权限管理的命令,但它们的用途和工作方式有显著区别。以下是详细对比:


1. su (Switch User)

  • 功能:切换用户身份(默认切换到 root)。
  • 特点
    • 需要输入目标用户的密码(默认是 root 密码)。
    • 切换后会进入目标用户的 Shell 环境(如 /bin/bash)。
    • 权限持续到输入 exitCtrl+D 退出。
  • 常用命令bash su # 切换到 root(需 root 密码) su - # 切换到 root 并加载其环境变量 su username # 切换到其他用户(需该用户密码)

风险:直接切换到 root 可能导致滥用权限,且需共享 root 密码。


2. sudo (Super User Do)

  • 功能:以其他用户(默认 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。


最佳实践

  1. 禁用 root 登录
    通过 sudo 分配权限,避免直接使用 su
  2. 配置 sudoers
    使用 visudo 命令编辑 /etc/sudoers,例如: bash username ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt # 允许无密码执行 apt
  3. 组合使用
    临时切换 root 时可用 sudo -i(比 su - 更安全)。

通过合理使用 susudo,可以平衡便利性与系统安全性。建议优先使用 sudo,尤其是在多用户环境中。