su

出自 ArchWiki

su 核心工具 (substitute user) 用于在系统上假定另一个用户的身份, 默认为 root 用户。

参见 PAM 以了解如何配置 su 的行为。

安装

suutil-linux 软件包的一部分。

用法

要假定另一个用户的登录身份,请将您想要成为的用户名传递给 su,例如

$ su username

默认情况下,当以普通用户身份运行时,系统将提示您输入您尝试成为的用户的密码。以 root 身份运行 su 时,不需要密码。

如果没有传递用户名,su 将假定为 root 用户,并且系统提示您输入的密码将是 root 用户的密码。

更多信息,请参见 su(1)

技巧与提示

登录 Shell

su 的默认行为是保留在当前目录中,并保持原始用户的环境变量(而不是切换到新用户的环境变量)。

注意以下重要的对比考虑因素

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

因此,建议管理用户以及任何其他被授权使用 su 的用户(建议很少,甚至没有)养成始终使用带有 -l/--login 选项的 su 命令的习惯。 它有两个效果

  1. 通过以该用户身份登录,从当前目录切换到新用户的主目录(例如,对于 root 用户,切换到 /root )。
  2. 根据新用户首选的 shell 设置,将环境变量更改为新用户的环境变量。 例如,对于 bash shell,他们的 ~/.bashrc 以及可能的其他点文件。 也就是说,当前目录和环境将更改为如果新用户实际登录到新会话(而不仅仅是接管现有会话)时预期的状态。

因此,管理员通常应按如下方式使用 su

$ su -l

通过添加用户名 root 产生相同的结果

$ su -l root

同样,对于任何其他用户(例如,对于名为 archie 的用户)也可以这样做

# su -l archie

要登录到无密码用户,请首先以 root 身份登录,然后从 root shell 登录到无密码用户帐户

$ su -l
# runuser -l archie
注意: 当已经具有特权时,无需使用 su。 在这种情况下,runuser 是更好的选择,可以避免另一层 setuid 进程。 有关详细信息,请参阅 su(1)
提示
  • 您有时会遇到使用 su 通过 su - 而不是 su -l/su --login 获取登录 shell 的情况。 不建议使用此简写,因为 - 选项可能会遇到解析限制,请参阅 su(1) § DESCRIPTION
  • 您可能希望为此在 ~/.bashrc 中添加别名
    alias su="su -l"

su 和 wheel

BSD su 默认仅允许 wheel 用户组的成员假定 root 的身份。 这不是 GNU su 的默认行为,但是可以使用 PAM 模仿此行为。 取消注释 /etc/pam.d/su/etc/pam.d/su-l 中相应的行

auth required pam_wheel.so use_uid

Nologin 用户

如果其他用户不允许登录 यानी (i.e. they have /bin/false or /usr/bin/nologin 设置为其 shell),则您无法通过简单地使用 su user -c command 以其他用户身份运行命令。

您可以通过指定要使用的 shell 来解决此问题

# su -s /usr/bin/bash nologin_user