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

推荐订阅源

aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
S
Schneier on Security
Scott Helme
Scott Helme
C
Check Point Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
Lohrmann on Cybersecurity
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
N
News and Events Feed by Topic
B
Blog
P
Privacy International News Feed
I
Intezer
T
Threatpost
Google DeepMind News
Google DeepMind News
L
LangChain Blog
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News | PayPal Newsroom
The Hacker News
The Hacker News
S
Security @ Cisco Blogs
罗磊的独立博客
PCI Perspectives
PCI Perspectives
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
U
Unit 42
Hacker News: Ask HN
Hacker News: Ask HN
D
Docker
AI
AI
小众软件
小众软件
博客园 - 叶小钗
H
Help Net Security
TaoSecurity Blog
TaoSecurity Blog
P
Privacy & Cybersecurity Law Blog

博客园 - dirgo

梅特勒托-托利多衡器串口连续输出数据格式的说明 utf-8编码详解 mybaits updateWrapper更新报错:无效的列类型: 1111 @RequestPart和@RequestParam有什么区别 如何避免Mass Assignment漏洞? 关于vxe-table v4 导出大数据量excel浏览器卡死问题的解决 开源的Linux换源和安装docker脚本 wsl常用命令 使用网页静默打印 在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 可以免密切换,但此时实际上已经绕过了普通用户的限制。


总结

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

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