以下命令有什么区别:
su
sudo -s
sudo -i
sudo bash
Run Code Online (Sandbox Code Playgroud)
我知道su我需要知道 root 密码,而且sudo我必须在sudoers文件中,但是一旦执行有什么区别?
我知道su和之间存在差异,sudo -s因为我的主目录/root在我执行之后su,但我的主目录仍然/home/myname在sudo -s. 但我怀疑这只是我遗漏的潜在差异的症状。
War*_*ung 136
使用su,您将成为另一个用户 - 默认情况下为 root,但可能成为另一个用户。如果您说su -,您的环境也将替换为该用户的登录环境,因此您看到的内容与以该用户身份登录的内容没有区别。系统无法su通过该用户在登录时的操作来判断您对另一个用户所做的操作。
事情非常不同sudo:
你运行的命令作为目标用户sudo 执行——默认为 root,但可以更改-u——但它会记录你通过它运行的命令,用你的用户名标记它们,以便之后可以分配责任。:)
sudo非常灵活。例如,您可以限制允许给定用户或用户组运行的命令。用su,要么全有要么全无。
此功能通常用于定义角色。例如,您可以定义一个允许运行dump和的“备份”组tar,每个组都需要 root 访问权限才能正确备份系统磁盘。
我在这里提到这一点是因为这意味着您可以在不给予某人或能力的sudo情况下给予某人特权。他们只有完成工作所需的权限,而他们已经运行了整个系统。但是,您必须小心这一点:例如,如果您赋予某人说 的能力,则他们可以退出并拥有与 相同的能力。sudo -ssudo bashsusudo vivisudo -s
sudo在多个sudoer之间隔离了权限。这解决了一个管理问题su,即当 root 密码更改时,所有必须知道它才能使用的人su都必须被告知。sudo允许 sudoers 的密码独立更改。事实上,在系统上对 root 用户的帐户进行密码锁定sudo以强制所有系统管理员任务通过sudo. 在拥有许多受信任的 sudoer 的大型组织中,这意味着当其中一个系统管理员离开时,您不必更改 root 密码并将其分发给留下的那些管理员。
sudo bash和之间的主要区别在于sudo -s它-s更短,并且允许您通过以下几种方式传递命令以在用户的默认 shell 中执行:
你可以说sudo -s some-command哪个some-command在你的 shell 下运行。它基本上是sudo $SHELL -c some-command.
您可以改为将命令传递给 shell 的标准输入,例如sudo -s < my-shell-script. 您可以将其与heredoc一起使用,将多个命令发送到单个sudo调用,避免sudo重复键入。
这两种行为都是可选的。更常见的是,您-s单独提供,因此它只是以交互方式运行您的用户的 shell。在这种模式下,它的不同之处sudo bash在于它可能运行与 不同的 shell bash,因为它首先在SHELL环境变量中查找,然后如果未设置,则在用户的登录 shell 设置中,通常在/etc/passwd.
运行的 shell 会sudo -s继承您当前的用户环境。如果你真正想要的是一个干净的环境,像你刚才登录后得到的,你想要什么,而不是是sudo -i,比较近期除了sudo。粗略地说,sudo -i是sudo -s因为su -是su:它重置所有,但一些关键的环境变量,并发送你回到你的用户的主目录。如果您还没有通过标准输入或 向它发出在该 shell 下运行的命令sudo -i some-command,它将将该 shell 作为交互式登录 shell 运行,以便您的用户的 shell 启动脚本(例如.bash_profile)再次运行。
所有这些sudo -i都比sudo -s. 为什么?因为如果有人之前可以修改您的环境sudo -s,他们可能会导致执行意外的命令。最明显的情况是修改SHELL,但它也可以不那么直接地发生,例如 viaPAGER如果你说man foowhile under sudo -s。
您可能会说,“如果他们可以修改PAGER,他们可以修改PATH,然后他们就可以替换一个邪恶的sudo程序”,但是有些偏执的人可以说/usr/bin/sudo /bin/bash要避免这个陷阱。不过,您可能不会太偏执,以至于您也避免了所有其他易受影响的环境变量中的陷阱。EDITOR例如,您还记得在运行任何VCS命令之前检查吗?因此sudo -i。
因为sudo -i还将您的工作目录更改为您用户的主目录,所以您可能仍希望将其sudo -s用于那些您知道希望保留在cd运行sudo. 不过sudo -i,cd返回原处仍然更安全。
您有时会看到的所有这些的另一个变体是sudo su,它大约相当于sudo -s. 同样,sudo su -在功能上非常接近sudo -i. 由于sudo和su是竞争命令,像这样配对它们有点奇怪,所以我建议您改用sudo标志。
小智 28
来自我不久前发表的ubuntuforums 帖子:
考虑以下实验:
applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s
Run Code Online (Sandbox Code Playgroud)
以下是我发现的差异:
与sudo -s:
HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
与sudo su:
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc
Run Code Online (Sandbox Code Playgroud)
注意 中的差异$HOME。作为 root 并$HOME设置为普通用户的家可能会导致问题。例如,如果您运行图形应用程序,普通用户的~/.Xauthority可能会被 root 覆盖。这会导致以后的普通用户问题,例如无法通过 cron 运行某些图形应用程序。
总结一下:
corrupted by user's
HOME=/root uses root's PATH env vars
sudo -i Y Y[2] N
sudo -s N Y[2] Y
sudo bash N Y[2] Y
sudo su Y N[1] Y
Run Code Online (Sandbox Code Playgroud)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
可能由 /etc/environmentPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin底线是sudo -i当您想要一个不受用户环境污染的 root shell 时运行的正确命令。
Pre*_*raj 10
su(小号女巫ü SER或小号ubstitute ü SER)可以让您切换用户。su基本上以预期用户的权限启动另一个 shell 实例。默认情况下,它会将您切换到root用户,如果我们要切换特定用户,我们需要按如下方式传递用户:
$ su bob # switches to bob (requires bob's password)
Run Code Online (Sandbox Code Playgroud)
su -表示环境变量将被重置为 root,su表示环境变量为老用户。
例如:root 的主目录(如果您使用)su -或旧用户的主目录(如果您使用su.
须藤(š UPER ü SER做)是一个命令行实用程序,允许用户运行与另一用户的安全权限的程序,默认情况下是超级用户即root。它使用一个配置文件/etc/sudoers,其中列出了哪些用户有权执行特定操作
sudo 应该读作/?su?du?/。语法sudo command即小号女巫ü SER和执行该命令。
su相当于sudo -i并模拟登录到 root 帐户。您的工作目录将是/root,它将读取 root.profile等。提示将从 $ 变为 #,表明您具有 root 访问权限。
sudo -s 以 root 身份启动 shell,但不会更改您的工作目录。
sudo bash 在哪里bash运行的命令sudo。此命令bash以超级用户身份运行
。
sudo可以记录某人所做的一切。sudo可以防止用户知道 root 密码。sudo我们可以限制允许运行的命令。| 归档时间: |
|
| 查看次数: |
66948 次 |
| 最近记录: |