惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - dirgo

在Oracle中,授予用户角色和权限 Linux下查看当前哪些端口在监听状态,哪些端口在连接状态 mobaxterm常用配置 Windows下udp工具 Oracle表空间用户授权创建dblink等操作 用nmap扫描找出某个网段下空闲的ip脚本 Oracle 19c 常用运维 SQL Linux下设置CDB/PDB 环境的Oracle19c开机启动 Oracle是 CDB/PDB 环境下,让PDB在数据库启动后自动打开 怎样禁止dbeaver点击导航中数据库自动切换sql编辑器所属的数据库 Oracle 19c占内存高的解决方法 Linux 的目录结构英文全称(及可能的命名背景)和更详细的说明 利用 Logback 的热加载特性,安全的迁移日志,改变日志保存路径 Linux中查询进程内存占用 iotDB调整内存占用及注意事项 Eclipse Milo 处理PLC"字(Word)"类型,最直接和正确的做法是使用其内置的 UShort 类型 centos7.9安装minio RELEASE.2025-04-22T22-12-26Z centos7.9编译安装nginx 1.28.1 linux(centos7.9)编译安装redis7.2.4 UFW 防火墙常用命令速查表
sudo -i -u zhangsan 与su - zhangsan区别,在现代 Linux 系统中,推荐使用 sudo 进行权限切换
dirgo · 2026-02-26 · via 博客园 - dirgo

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 可以免密切换,但此时实际上已经绕过了普通用户的限制。

总结

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

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