随手记

sudo su | sudo -s | sudo -i | su辨析

  • su 用于切换用户,以目标用户的权限启动一个新的shell实例
    • 如果什么都不输入,那么默认尝试登录到root账户
  • sudo 特权操作,在 etc\sudoers 中维护了可以使用特权执行指令的用户

基于以上两点,我们很容易分析出 sudo su 的执行路径,他首先对你使用 sudo 鉴权,如果你是sudoer,那么直接以特权执行下一条指令,也就是 su

由于su默认是登录root账户,以特权执行时直接就能登录到root(以root用户启动一个shell实例)

  • sudo -i
    • 以rooter用户身份启动shell实例,并切换到root用户的环境变量(根环境变量)
    • 提供一个更安全干净的root环境
    • 使用的是 sudoer 的密码登录
  • sudo -s
    • 以root身份启动shell实例,但是保留原有用户的环境变量
    • 保留了用户的环境,导致可以使用特权执行用户的一些环境变量(.bashrc等)

su - | su — 辨析

  • su -
    • 鉴权后启动登录的shell实例
    • 切换环境变量
  • su —
    • 鉴权后启动非登录的shell实例
    • 不切换变量

sudo bash | sudo sh | sudo -E sh -c辨析

我们首先需要知道Bash和Shell是什么东西

Bash是一种Shell,扩展了sh的功能,sh是一个精简的Shell,只具备基本功能

Linux大部分装载了Bash,POSIX的基础Shell是sh

  • sudo bash:特权模式启动一个bash的实例
  • sudo sh:特权模式启动一个sh的实例

值得注意的是,sudo bash 与 su — / sudo -s 不同,前者会替换某些系统变量为root的变量,介于替换与不替换之间,而后者保留了用户变量

sudo -E 保留了用户变量,不执行切换

sudo -E sh 保留了用户变量,并以特权启动一个sh实例


随手记
https://blog.sukiloli.com/2025/02/17/su与sudo辨析/
作者
QLozin
发布于
2025年2月17日
许可协议