我看到很多帖子说你输入后会得到具有 root 权限的交互式提示,而且我也看到同样多的帖子讨论 与的sudo su
优缺点。sudo -i
sudo su
我坐在这里摸不着头脑为什么人们不只是写作su
......毕竟su
是短缺替代用户并且默认切换到root,那么真的有必要写吗sudo su
?
答案1
如果您可以简单地使用su
,那么您应该这样做。
但是,在大多数现代(桌面)Linux 发行版(例如 Ubuntu)中,root 用户被禁用并且没有设置密码。因此你无法切换到root用户su
(你可以尝试)。您必须使用 root 权限调用 sudo:sudo su
。
答案2
sudo su
,sudo -i
所有其他都sudo
需要用户密码。
su
需要 root 密码。
答案3
两个程序都是suid root。没有理由要打字,sudo su
除非人们不熟悉 sudo-i
和-E
sudo 选项,或者习惯于以 root 身份执行操作而不了解其执行原因。 su 命令传递一些硬编码的环境变量(或者,在最近的 Linux 上,可以用来-p
传递整个环境),而 sudo 可以精确控制传递哪些变量(尝试$DISPLAY
举一个有用的示例)。 su 命令只能提示输入目标用户的密码(假设有默认的 pam 堆栈),而 sudo 可以配置为以源用户或目标用户身份进行身份验证,或者两者都不进行身份验证,或者始终为 root 用户 - 并且可以按命令执行此操作。该su
命令会重置$HOME
,而 sudo 可以根据可用的规则集来决定。这又是一个不需要存在的分叉进程。同时,sudo 会记录它运行的命令,因此只要您不只是执行sudo -i
或以其他方式启动 shell,您就可以获得方式使用 sudo 进行更好的审计跟踪。当您使用 sudo 运行命令时,它会删除.
$PATH 中的两个元素和空元素,然后检查最后的元素是否存在,从而防止人们将名为“ls”的 shell 脚本粘贴到/tmp
类似的恶作剧中。 :)
基本上,sudo su
就像把一只手钉在 sudo 背后却一无所获。 :)
答案4
这些命令之间的主要区别在于它们限制对其功能的访问的方式。
su(意思是“替代用户”或“切换用户”)- 正是这样做的,它使用目标用户的权限启动另一个 shell 实例。为了确保您有权执行此操作,它会要求您提供目标用户的密码。因此,要成为 root,您需要知道 root 密码。如果您的计算机上有多个用户需要以 root 身份运行命令,那么他们都需要知道 root 密码 - 请注意,它将是相同的密码。如果您需要撤销其中一位用户的管理员权限,则需要更改 root 密码并仅将其告诉那些需要保持访问权限的人 - 混乱。
sudo(嗯...助记符是什么?Super-User-DO?)完全不同。它使用一个配置文件(/etc/sudoers),其中列出了哪些用户有权执行特定操作(以 root 身份运行命令等)。当调用时,它会询问启动它的用户的密码 - 以确保该人在终端实际上与 /etc/sudoers 中列出的“joe”相同。要撤销某人的管理员权限,您只需编辑配置文件(或从该配置中列出的组中删除该用户)。这使得权限管理更加清晰。
因此,在许多基于 Debian 的系统中,root 用户没有设置密码 - 即无法直接以 root 身份登录。
此外,/etc/sudoers 允许指定一些附加选项 - 即用户 X 只能运行程序 Y 等。
常用的 sudo su 组合的工作原理如下:首先 sudo 询问您的密码,如果允许,则以超级用户身份调用下一个命令 (su)。由于 su 由 root 调用,因此不需要您输入目标用户的密码。因此,如果 /etc/sudoers 文件允许您进行超级用户访问,则 sudo su 允许您以其他用户(包括 root)身份打开 shell。