以下命令之间有什么区别:
su
sudo -s
sudo -i
sudo bash
我知道,因为su我需要知道root密码,并且sudo必须在sudoers文件中,但是一旦执行,有什么区别?
我知道su和之间有区别,sudo -s因为我的主目录/root在执行之后su,但是我的主目录仍然/home/myname在执行之后sudo -s。但是我怀疑这只是我所缺少的根本差异的征兆。
以下命令之间有什么区别:
su
sudo -s
sudo -i
sudo bash
我知道,因为su我需要知道root密码,并且sudo必须在sudoers文件中,但是一旦执行,有什么区别?
我知道su和之间有区别,sudo -s因为我的主目录/root在执行之后su,但是我的主目录仍然/home/myname在执行之后sudo -s。但是我怀疑这只是我所缺少的根本差异的征兆。
Answers:
使用su,您将成为另一个用户-默认情况下是root,但可能是另一个用户。如果您说su -,您的环境也将被该用户的登录环境所替换,因此您所看到的内容与以该用户身份进行的登录是无法区分的。系统无法su通过该用户登录时该用户的操作来告诉您该用户在做什么。
事情大不相同sudo:
您运行的命令以目标用户身份sudo 执行 -默认情况下是root,但可以更改-u-但它会记录您在其中运行的命令,并用您的用户名对其进行标记,以便以后可以进行指责。:)
sudo非常灵活。例如,您可以限制允许给定用户或用户组运行的命令。使用su,全部或全部消失。
此功能通常用于定义角色。例如,您可以定义一个允许运行dump和的“备份”组tar,每个组都需要root用户访问权限才能正确备份系统磁盘。
我在这里提到这一点是因为它意味着您可以授予某人sudo特权而无需给予他们sudo -s任何特权sudo bash。他们只有执行工作所需的权限,而su他们拥有整个系统的运行权。不过,您必须对此小心谨慎:sudo vi例如,如果您赋予某人说的能力,那么他们可以脱颖而出,vi并且具有与with相同的能力sudo -s。
因为它使用的是sudoer的密码而不是root密码,所以可以sudo隔离多个sudoer 之间的权限。
这解决了的管理问题su,即当root密码更改时,su必须告知所有必须知道使用该密码的人。sudo允许sudoers的密码独立更改。实际上,通常密码锁定系统上的root用户帐户,并sudo通过强制执行所有sysadmin任务sudo。在拥有许多受信任的sudoers的大型组织中,这意味着当一名sysadmin管理员离开时,您无需更改root密码并将其分发给剩下的管理员。
之间的主要区别sudo bash和sudo -s是-s更短,让你通过在一对夫妇的方式为自己的用户默认的shell执行命令:
您可以说sudo -s some-command哪个some-command在您的外壳下运行。它基本上是的简写sudo $SHELL -c some-command。
您可以改为将命令传递到Shell的标准输入,例如sudo -s < my-shell-script。您可以将其与heredoc一起使用,以将多个命令发送给单个sudo调用,而无需sudo重复键入。
这些行为都是可选的。更常见的是,您只给-s一个,所以它只是交互式地运行用户的外壳程序。在这种模式下,它的不同之处sudo bash在于,它可能运行的外壳程序不同于bash,因为它首先在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,但修改也可能不那么直接,例如,PAGER如果您man foo在while下说,则可能会通过sudo -s。
您可能会说:“如果他们可以进行修改PAGER,他们可以进行修改PATH,然后就可以替代一个邪恶的sudo程序了,”但是有些偏执狂的人可以说/usr/bin/sudo /bin/bash避免这种陷阱。不过,您可能并不那么偏执,因此也避免了所有其他易受影响的环境变量中的陷阱。您还记得EDITOR例如在运行任何VCS命令之前进行过检查吗?这样sudo -i。
因为sudo -i也改变了你的工作目录到用户的主目录,你仍然可能要使用sudo -s的那些你知道你想留在你同一个目录的情况cd倒是到,当你跑了sudo。它仍然是比较安全的sudo -i,并cd回到原来的地方,虽然。
vi,键入:sh并按Enter。现在,您处于子外壳程序中,具有vi生成该外壳程序的所有特权。如果vi运行时具有root特权,那么外壳程序也将运行。或者,您可以通过运行Shell以外的其他东西:!cmd,通过:r !cmd等将命令的输出读取到编辑缓冲区中。如果所有这些都被锁定,则Makefile目标是shell脚本,而Vim具有该:make命令,可以有效地运行任意shell编辑器中的脚本。恶作剧的可能性实在太大,以至于此注释框无法容纳。
                    /usr/bin/sudo
                    PATH不是唯一的问题。
                    请考虑以下实验:
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
这是我发现的差异:
与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
与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
请注意中的差异$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
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是,当您需要不受用户环境污染的根外壳程序时,可以运行该命令。
sudo(在/etc/sudoers及相关文件中)的配置。配置设置,例如always_set_home,env_reset,env_keep,env_check和env_reset,并且这些可以根据用户和命令而变化。请参见sudoers(5)联机帮助页的“命令环境”和SUDOERS OPTIONS部分。
                    sudo -Hs当我想要不受设置影响的环境时,我会选择使用,因为我使用zsh和可能要更改为使用bash的所有应用程序帐户。这确实使一定数量的环境变量不受干扰地传递,但是我通常会发现重要的变量被/etc/profile.d/*覆盖。
                    su(小号女巫ü SER或小号 ubstitute ü SER)可以让您切换用户。su基本上是使用目标用户的特权启动另一个Shell实例。默认情况下,它会将您切换到root用户,如果我们要切换特定用户,则需要按以下方式传递用户:
$ su bob  # switches to bob (requires bob's password)
su -意味着环境变量将被重置为root,并且su意味着环境变量作为旧用户。  
例如:如果使用root的主目录,或者使用su -老式用户的主目录su。
须藤(小号 UPER ü SER 做)是一个命令行实用程序,允许用户运行与另一用户的安全权限的程序,默认情况下是超级用户即root。它使用一个配置文件/etc/sudoers,其中列出了哪些用户有权执行特定操作  
sudo应该读为/ ˈsuːduː /。语法sudo command即小号女巫ü SER和执行该命令。  
su等效于sudo -i并模拟到根帐户的登录。您的工作目录将是/root,它将读取root的.profile等。提示符将从$更改为#,表示您具有root访问权限。
sudo -s  以root身份启动Shell,但不更改您的工作目录。 
sudo bash  在何处bash运行命令sudo。该命令bash以超级用户身份运行
 。
sudo记录可以记录某人所做的一切。sudo可以防止用户知道root密码。sudo我们可以限制允许运行的命令。
sudo su -这种方式,您不需要root密码,并且-可以确保主目录设置正确。