sudo -i -u zhangsan 与su - zhangsan区别,在现代 Linux 系统中,推荐使用 sudo 进行权限切换

sudo -i -u zhangsansu - zhangsan 都可以让你切换到用户 zhangsan 并获得一个登录 Shell(类似直接以该用户登录系统),但它们在认证方式、权限模型、安全审计等方面有本质区别。下面从多个维度详细对比:


1. 认证方式

  • sudo -i -u zhangsan

    • 需要输入当前用户(执行者)的密码(如果 sudoers 中配置了 NOPASSWD 则可免密)。
    • 不要求知道目标用户 zhangsan 的密码。
    • 认证由 sudo 机制处理,依赖 /etc/sudoers 中的授权规则。
  • su - zhangsan

    • 需要输入目标用户 zhangsan 的密码
    • 即使你是 root,也需要知道 zhangsan 的密码(root 可以 su - zhangsan 无需密码,因为 root 可以切换为任何用户,但普通用户 su 到其他用户必须提供目标密码)。
    • 认证由 su 程序直接验证用户密码。

2. 权限要求

  • sudo -i -u zhangsan

    • 当前用户必须在 /etc/sudoers 中被授权以 zhangsan 身份执行命令,且规则中允许执行任何命令(或至少允许执行登录 Shell)。
    • 即使当前用户不知道 zhangsan 的密码,只要有 sudo 权限,就可以切换过去。
  • su - zhangsan

    • 当前用户必须知道 zhangsan 的密码(或当前用户是 root)。
    • 普通用户无法通过 su 切换到没有密码或密码未知的用户。

3. 环境处理

  • sudo -i -u zhangsan

    • -i 选项模拟初始登录,会清空当前环境变量,然后加载目标用户的登录脚本(如 .profile.bashrc 等),并切换到目标用户的家目录。
    • 环境变量更加“干净”,接近于直接以 zhangsan 登录系统。
  • su - zhangsan

    • -(或 -l--login)同样模拟登录 Shell,清空环境并加载目标用户的配置。
    • 结果与 sudo -i 类似,都提供一个登录环境。

4. 安全性考量

  • sudo 的优势

    • 不需要共享目标用户密码,只需授权特定用户以特定身份执行命令。
    • 所有 sudo 操作都会被记录到日志(如 /var/log/auth.logjournalctl),便于审计。
    • 可以精细控制哪些命令可以执行,而不仅仅是“是否允许切换用户”。
  • su 的风险

    • 需要目标用户密码,可能导致密码泄露或被滥用。
    • 如果多人知道 root 密码,则无法追溯具体是谁执行了操作。
    • 日志记录相对简单,难以区分具体哪个用户执行了 su

5. 典型使用场景

  • sudo -i -u zhangsan

    • 管理员希望授予开发者 xiaoming 以应用用户 zhangsan 的身份进行调试,但不想透露 zhangsan 的密码。
    • 系统服务使用专用账户运行,管理员通过 sudo 切换到该账户进行维护。
  • su - zhangsan

    • 当你已知目标用户的密码,希望完全以该用户身份工作(例如登录后执行一系列命令)。
    • 在单用户环境或测试环境中使用较多,生产环境逐渐被 sudo 取代。

6. 内部机制

  • sudo 通过设置用户 ID(setuid)以 root 权限运行,然后根据授权规则切换到目标用户。
  • su 本身是 setuid root 的程序(普通用户执行时,它以 root 权限运行,然后验证密码并切换)。

7. 示例对比

假设 xiaoming 被授权 ALL=(zhangsan) ALL

# xiaoming 执行:
sudo -i -u zhangsan   # 输入 xiaoming 的密码后,直接获得 zhangsan 的登录 Shell

# 如果尝试 su:
su - zhangsan         # 需要输入 zhangsan 的密码,xiaoming 不知道则会失败

如果 xiaoming 是 root(或通过 sudo su - 变成 root),则 su - zhangsan 可以免密切换,但此时实际上已经绕过了普通用户的限制。


总结

特性 sudo -i -u zhangsan su - zhangsan
认证依据 当前用户的密码 + sudoers 授权 目标用户的密码
是否需要目标密码 是(除非是 root)
日志审计 详细记录(用户、命令、时间) 较简单,可能只记录 su 会话
权限控制粒度 可精细到单个命令 要么能切换,要么不能(无法限制命令)
适用场景 安全授权、多用户管理、服务账户操作 个人使用、已知密码的传统方式

在现代 Linux 系统中,推荐使用 sudo 进行权限切换,因为它更安全、更灵活,且便于审计。

posted @ 2026-02-26 14:57  dirgo  阅读(1)  评论(0)    收藏  举报