当前位置: 首页>>技术教程>>正文


“su”,“sudo -s”,“sudo -i”,“sudo su”有什么区别?

, ,

问题描述

我已经从手册中读到了它,但我看不出差别..

su – 更改用户ID或成为超级用户

sudo -s [command]

-s(shell)选项运行由SHELL环境变量(如果已设置)指定的shell或passwd(5)中指定的shell。如果指定了一个命令,它将被传递给shell执行。否则,执行交互式shell。

sudo -i手册中的消失说明

最佳解决方法

这些命令之间的主要区别在于它们限制对其功能的访问。

su(意味着”substitute user”或”switch user”) – 完全是这样,它使用目标用户的特权启动另一个shell实例。为确保您有权这样做,它会要求您输入目标用户的密码。因此,要成为root用户,您需要知道root密码。如果您的计算机上有多个用户需要以root用户身份运行命令,他们都需要知道root密码 – 请注意,它将是相同的密码。如果您需要撤销其中一位用户的管理员权限,则需要更改root密码并将其仅告诉给需要保持访问权限的人员 – 乱七八糟。

sudo(嗯…什么是助记符?Super-User-DO?)是完全不同的。它使用一个配置文件(/etc /sudoers)列出哪些用户对特定操作具有权限(以root用户身份运行命令等)。当调用时,它会要求启动它的用户的密码 – 以确保终端实际上​​是在/etc/sudoers中列出的”joe”。要撤消某个人的管理员权限,只需编辑配置文件(或从该配置中列出的组中删除该用户)。这导致特权的更清洁管理。

因此,在许多Debian-based系统中,root用户没有设置密码 – 即无法直接以超级用户身份登录。

此外,/etc/sudoers允许指定一些附加选项 – 即用户X只能运行程序Y等。

often-used sudo su组合的工作方式如下:首先sudo询问您的密码,如果允许,请将下一个命令(su)作为super-user调用。由于suroot调用,因此不需要输入目标用户的密码。因此,如果允许/etc/sudoers文件访问super-user文件,sudo su允许您以另一个用户(包括root)的身份打开shell。

次佳解决方法

sudo允许您以自己的用户帐户以root权限运行命令。 su允许您切换用户,以便您实际上以root身份登录。

sudo -s以root权限运行一个shell。 sudo -i还获取root用户的环境。

要查看susudo -s之间的区别,请在cd ~pwd之后执行每个cd ~。在第一种情况下,您将位于root的主目录中,因为您是root用户。在第二种情况下,您将位于您自己的主目录中,因为您拥有root权限。

还有更多关于这个确切问题here的讨论。

第三种解决方法

这个答案是我在a dupe of this question上的答案的一个骗局,放在这个规范的答案,以便人们可以找到它!

sudo -isudo -s的主要区别在于:

  • sudo -i为您提供了根环境,即您的~/.bashrc被忽略。

  • sudo -s为您提供用户环境,因此您的~/.bashrc得到了尊重。

下面是一个示例,您可以看到我的~/.bin/目录中有一个应用程序lsl,该目录可通过sudo -s访问,但无法通过sudo -i访问。还要注意,Bash提示符随sudo -i而改变,但与sudo -s不一致:

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

虽然sudo -s可以方便地为您提供您熟悉的环境,但我建议使用sudo -i有两个原因:

  1. 视觉提示您处于’root’会话中。

  2. 根环境不太可能被恶意软件毒害,例如.bashrc中的流氓线。

第四种方法

su询问用户”root”的密码。

sudo要求输入您自己的密码(还要检查是否允许以root身份运行命令(通过/etc/sudoers配置) – 默认情况下,允许属于”admin”组的所有用户帐户都使用sudo)。

sudo -s以root身份启动一个shell,但不会更改您的工作目录。 sudo -i模拟登录到root帐户:您的工作目录将是/root,并且root的.profile等将在登录时获得。

第五种方法

在Ubuntu或相关系统中,对于传统的super-user意义上的su,我找不到太多用处。 sudo处理这种情况要好得多。但是,su非常适合在one-off情况下成为另一个用户,在这种情况下配置sudoers会很愚蠢。

例如,如果我从Live CD /USB修复我的系统,我经常会将我的硬盘驱动器和其他必要的东西以及chroot安装到系统中。在这种情况下,我的第一条命令通常是:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

这样,我不是以root身份运行,而是以我的普通用户身份运行,然后根据情况使用sudo

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/442.html,未经允许,请勿转载。