随手记
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辨析/