了解sudo和su之间的区别

在我们之前的一篇文章中 ,我们详细讨论了“sudo”命令。 在该教程的末尾,在一个小笔记中提到另一个类似的命令“su”。 那么在这篇文章中,我们将详细讨论'su'命令以及它与'sudo'命令的区别。

但在我们这样做之前,请注意,本教程中提到的所有说明和示例已在Ubuntu 14.04LTS上进行了测试。

Linux中的su命令

su命令的主要工作是让您在登录会话期间切换到其他用户。 换句话说,该工具可让您假设某个其他用户的身份,而无需注销,然后登录(作为该用户)。

su命令主要用于切换到超级用户/ root帐户(因为在命令行上工作时通常需要root权限),但是如上所述,您可以使用它来切换到任何其他非root用户好。

以下是使用此命令切换到root用户的方法:

该命令所需的密码也是root用户。 所以一般来说,su命令需要输入目标用户的密码。 输入正确的密码后,该工具将在终端上的现有会话内启动一个子会话。

苏 -

有另一种方法切换到root用户:运行'su - '命令:

现在,“苏”和“苏”有什么区别? 那么,即使在切换到根目录之后,前者仍然保留旧/原始用户的环境,而后者创建了一个新的环境( 由root用户的〜/ .bashrc指定) ,类似于您以root用户的身份从登录屏幕显式登录。

“su”的手册页也明确表示:

The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

所以,你同意用'su - '登录更有意义。 但是,由于'su'命令也存在,可能会想知道什么时候有用。 以下摘录 - 从ArchLinux维基网站获取 - 对“su”命令的好处和陷阱提出了一个好主意:

  • 系统管理员有时会使用普通用户的shell帐户而不是自己的shell帐户。 特别地,有时解决用户问题的最有效方法是登录该用户的帐户,以便重现或调试问题。
  • 然而,在许多情况下,root用户从普通用户的shell帐户和该帐户的环境变量而不是自己的环境变量来操作是不可取的,甚至是危险的。 虽然无意中使用普通用户的shell帐户,但root可以安装程序或对系统进行其他更改,而不会像使用root帐户时那样执行相同的结果。 例如,可以安装可以使普通用户意外地损坏系统或获得未经授权的访问某些数据的能力的程序。

注意:如果你想在'su - '之后传递更多的参数,那么你应该使用命令提供的-l命令行选项(而不是 - )。 以下是 - 和-l命令行选项的定义:

-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.

When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.

su -c

还有另外一个选项是'su'命令,值得一提:-c。 它允许您在切换到目标用户后提供要运行的命令。

'su'的手册页解释为:

-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

请考虑以下示例模板:

su [target-user] -c [command-to-run]

所以在这种情况下,“命令运行”将被执行为:

[shell] -c [command-to-run]

其中'shell'将被/ etc / passwd文件中定义的'target-user'shell替换。

苏多vs苏

既然我们也讨论了'su'命令的基础,那么现在是讨论'sudo'和'su'命令之间的区别的时候了。

密码

两者之间的主要区别是他们需要的密码:'sudo'需要当前用户的密码,'su'需要您输入root用户密码。

很清楚,就安全而言,“sudo”是两者之间的一个更好的选择。 例如,考虑到计算机正在被同时需要root访问的多个用户使用的情况。 在这种情况下使用'su'意味着与所有这些共享root密码,这通常不是一个很好的做法。

此外,如果要撤消特定用户的超级用户/ root访问权限,唯一的方法是更改​​root密码,然后在所有其他用户之间重新分发新的根密码。

与Sudo,另一方面,您可以毫不费力地处理这两种情况。 鉴于“sudo”要求用户输入自己的密码,所以您不需要共享所有用户的root密码。 并且要阻止特定用户访问root权限,您只需要调整“sudoers”文件中的相应条目即可。

默认行为

两个命令之间的另一个区别是它们的默认行为。 虽然'sudo'仅允许您以提升的权限运行单个命令,但'su'命令启动新的shell,允许您根据root权限运行尽可能多的命令,直到您明确退出该销售。

因此,“su”命令的默认行为是潜在的危险,因为用户可能会忘记它们以root身份工作的可能性,并且可能会无意中进行一些不可恢复的更改(例如,运行“rm -rf”命令错误目录)。 要详细讨论为什么不鼓励总是以root身份工作,请到这里

记录

虽然通过“sudo”运行的命令作为目标用户执行(默认情况下是“root”),但是用sudoer的用户名标记。 但是在“su”的情况下,不可能直接跟踪用户在root用户帐户之后执行的操作。

灵活性

'sudo'命令更加灵活,你甚至可以限制你想要访问的命令。 换句话说,访问“sudo”的用户只能访问他们的工作所需的命令。 但是,“su”是不可能的,无论你有权做任何事情都没有。

苏多苏

大概是由于使用“su”或直接以root用户身份登录的潜在风险,一些Linux发行版(如Ubuntu) 默认情况下会禁用root用户帐户。 鼓励用户在需要root权限时使用“sudo”。

但是,您仍然可以“su”成功,即不输入root密码。 所有您需要做的是运行以下命令:

sudo su

由于您使用'sudo'命令运行,所以只需输入密码即可。 所以一旦完成,'su'命令将以root身份运行,这意味着它不会要求任何密码。

PS :如果您想要启用系统上的root帐户(尽管这是非常不鼓励的,因为您可以随时使用'sudo'或'sudo su'),您必须手动设置root密码,您可以这样做使用以下命令:

sudo passwd root

结论

这两个以及我们以前的教程(重点是“sudo”)都应该让您了解可用的工具,让您可以执行需要升级(或完全不同的)特权的任务。 如果你有分享关于'su'或'sudo'的东西,或想分享你自己的经验,欢迎你在下面的评论中做到这一点。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏