linux 使用获取管理员权限
sudo -i (推荐)
含义:-i
是 --login
的缩写,意思是“模拟 root
用户的初始登录”。
工作方式:
输入当前用户自己的密码(前提是当前用户在 sudoers
名单中)。
sudo
机制会进行权限提升。
它会完全模拟 root
用户登录系统时的过程:
切换到 root
的家目录 (/root
)。
读取 root
用户的 shell 配置文件(如 .profile, .bashrc, .bash_profile)。
设置环境变量(如 USER, HOME, SHELL, PATH 等)为 root 用户应有的值。
环境特征:
命令提示符 (prompt) 会变成 root@hostname:~#
。
whoami
和 echo $USER
都显示 root
。
echo $HOME
显示 /root
。
优点:
获得一个干净、完整的 root 用户环境。
所有 root 的配置脚本都会被执行,行为与直接以 root 登录最一致。
操作会被记录在 /var/log/auth.log
等日志中,便于审计(知道是哪个用户通过 sudo
变成了 root
)。
sudo su
含义:这是一个“嵌套”命令。先通过 sudo
获取权限,然后执行 su
命令。
工作方式:
输入当前用户自己的密码。
sudo
允许你执行 su
这个命令。
su
命令默认切换到 root
用户,但不会带 - (login)
参数。
有时系统会默认将 sudo su
等同于 sudo su -
,但这并非所有发行版都如此,行为可能不一致。
环境特征:
如果 su
后没有 -
,它会继承当前用户的大部分环境变量(如 PATH),这可能导致一些问题。
不会切换到 /root
目录,可能还在当前用户的目录。
不会读取 root
的登录配置文件(除非使用了 sudo su -
)。
为什么不推荐:
它是“画蛇添足”的。既然已经用了 sudo
,直接 sudo -i
更直接、更清晰。
环境可能不干净,混合了当前用户和 root 用户的设置,行为不可预测。
同样会被日志记录,但命令本身显得多余。
3. su root (或直接 su)
含义:su
是 “substitute user
” 或 “switch user
” 的缩写。直接使用 su 意味着需要目标用户的密码。
工作方式:
输入 root 用户的密码。
默认不会以登录方式切换。要获得登录环境,必须使用 su -
或 su -l
。
环境特征:
su:非登录 shell,继承大量旧用户环境,容易出错。
su -:登录 shell,环境干净,与 sudo -i
效果类似。
缺点:
需要知道 root 的密码。在 Ubuntu 等现代发行版中,默认是禁用 root 密码的,因此这个命令可能根本无效。
安全性差:需要共享 root 密码,无法通过 sudoers
文件对权限进行精细控制(例如限制某些用户使用 su
)。
审计性差:日志中只记录有人切换到了 root,但无法直接追溯到是哪个普通用户操作的(如果多人知道 root 密码)。
总结对比表格
|命令 |需要密码 |环境 |优点 |缺点 |推荐度| |—–|———|—–|—–|—–|—–| |sudo -i |当前用户密码 |干净、完整的 root 登录环境 |环境干净,无需 root 密码,审计性好 |- |⭐️⭐️⭐️⭐️⭐️ (最高)| |sudo su - |当前用户密码 |干净、完整的 root 登录环境 |效果类似 sudo -i |命令冗余,多了一个进程 |⭐️⭐️⭐️ (可用,但不直接)| |sudo su |当前用户密码 |不干净的混合环境(可能) |能获得 root 权限 |环境易出错,行为不一致 |⭐️ (不推荐)| |su - 或 su - root |root 用户密码 |干净、完整的 root 登录环境|环境干净 |需要 root 密码,审计性差,不安全 |⭐️⭐️ (仅在确实需要时使用)| |su 或 su root |root 用户密码 |不干净的混合环境 |能获得 root 权限 |环境易出错,且需要 root 密码,最不安全 |⭐ (极不推荐)|
核心结论与最佳实践
-
首选
sudo -i
或sudo -s
: 这是最符合现代 Linux 安全实践的方式。它利用了sudo
的机制,无需知道 root 密码,操作可审计,并且能提供一个干净的 root 环境。 -
避免使用
sudo su
: 这是一个历史遗留的用法,现在有了更优雅的替代品(sudo -i
)。它的行为在不同系统上可能略有差异。 -
谨慎使用
su
: 只有在你知道 root 密码,并且确实需要完全切换到root
环境(使用su -
)时才使用。在团队协作或生产服务器上,应尽量避免直接启用root
密码登录。
简单记忆:想要 root 环境,就用 sudo -i
。
References
- shell环境变量以及set,env,export的区别 , 凤凰舞者 qq:578989855