在Linux中,su有什么作用,以及如何使用它?

436 阅读4分钟

Unix/Linux 诉讼([代替用户])命令允许用户成为其他用户。这个命令被认为是通过成为特权用户来升级权限;因此,如果没有指定用户,默认用户是root。

通过执行su命令,你可以成为root或切换到任何其他用户。本教程解释了所有 su的使用方法以及与 sudo命令的所有用法和区别。

如前所述,如果你执行 su命令,你将默认成为root,如下图所示。

su

如果你在执行该 su命令后,你将成为该用户。当然,如果你在执行该命令时是root用户,那么你就不会被要求成为root用户。 su的时候,你不会被要求输入用户的密码。

su <User>

正如你在上面的例子中看到的,用户从root变成了指定的用户linuxhint。然而,当前目录仍然存在。你可以实现**-l**标志来改变当前目录为目标用户的主目录,自动将你从当前目录转移到用户的主目录。

su -l <User>

当执行 -l标志时,不仅是当前目录发生变化。这个标志的其他特点是。

  • 环境变量被清除,除了用于终端处理的TERM变量和白名单变量。
  • 加载环境变量USER、LOGNAME、HOME、SHELL和PATH。
  • 将shell变成一个登录shell。
  • 为目标用户的家改变当前目录。

重现相同行为的另一种方法是将 -l标志,只用一个连字符 (-),如下图所示。

su - <User>

正如你所看到的,用户改变了,同时也改变了当前目录。

su命令可以被用来作为另一个用户运行命令。如下面的例子所示,添加-c(Command)标志可以让你在不变成root的情况下执行具有权限的命令。

首先,让我们看看如果我们试图在没有成为root的情况下读取根目录的内容会发生什么。

正如你所看到的,该用户没有权限读取根目录。如下图所示,这可以用带有-c(命令)标志的su命令来完成。

su -c 'ls /root' root

正如你在语法中看到的,你需要调用带有 -c标志,然后在引号之间加上你想运行的命令,最后加上你想以何种用户身份运行命令,在本例中是根用户。

runuser命令。

有一个替代 su命令,名为 运行用户.这两个命令的区别在于,runuser只能由根用户使用。runuser命令不要求密码,而且它有一个不同的PAM(Linux可插拔认证模块)配置。

你可能知道,以root身份运行浏览器是被禁止的,是一种不好的做法;你的系统必须阻止你这么做。

如果你是root,你想以root身份启动一个不安全的应用程序,你可以同时使用 su命令,后面加一个 -c标志,或者使用下面这个例子中的 运行用户命令,并在后面加上标志,或者使用下面例子中的 -u标志,你想以哪个用户的身份运行命令,以及你想执行的命令。

runuser -u linuxhint firefox

sudo命令

sudo命令是最常用的以特权用户身份运行命令的方法。它是一种获得特权的有限方法。当使用sudo时,你不会成为root,但你会得到执行特定命令的权限。

当使用前面解释的 su命令时,你需要填入目标用户的密码。当使用sudo时,你需要输入当前用户的密码,而不是目标用户的密码;如果该用户在sudoers组中,他将能够运行该命令;如果该用户不在sudoers组中,他将不能。

以sudo身份运行命令非常简单,只需在命令前输入sudo,如下所示。

sudo ls /root

要让一个用户能够用sudo运行命令,你需要[把他加入sudoers组]。要将一个用户添加到sudoers组,请运行以下命令。

usermod -aG sudo <User>

现在,用户可以通过输入以下命令来运行需要权限的命令 sudo.

总结

su、runuser和sudo命令很容易实现,是任何用户必须知道的最基本的Linux命令之一。学习如何使用这些命令将增加用户方面的安全性(最脆弱的)。特权命令的sudo前缀是保证系统安全的最佳选择。一些Linux发行版会自动禁用root登录,将sudo作为默认方法。