For the complete documentation index, see llms.txt. This page is also available as Markdown.

su(1)

su — 切换用户身份

名称

su

概要

su [-] [-c class] [-flms] [login [args]]

描述

su 实用程序通过 PAM 请求适当的用户凭证,并切换到该用户 ID(默认用户是超级用户)。然后执行一个 shell。

PAM 用于设置 su 将使用的策略。特别是,默认情况下只有“wheel”组中的用户才能切换到 UID 0(“root”)。可以通过修改 /etc/pam.d/su 中的“pam_group”部分来更改此组要求。有关如何修改此设置的详情,参见 pam_group(8)。

默认情况下,环境保持不变,但 USERHOMESHELL 除外。HOMESHELL 设置为目标登录的默认值。USER 设置为目标登录名,除非目标登录的用户 ID 为 0,此时保持不变。调用的 shell 属于目标登录。这是 su 的传统行为。适用于原始用户登录类(参见 login.conf(5))的资源限制和会话优先级通常也会保留,除非目标登录的用户 ID 为 0。

选项如下:

-c class 使用指定登录类的设置。登录类必须在 login.conf(5) 中定义。仅允许超级用户使用。

-f 如果调用的 shell 是 csh(1),此选项阻止它读取“.cshrc”文件。

-l 模拟完整登录。环境被丢弃,但 HOMESHELLPATHTERMUSER 除外。HOMESHELL 按上述方式修改。USER 设置为目标登录名。PATH 设置为“/bin:/usr/bin”。TERM 从当前环境导入。可根据目标登录的类别,从登录类能力数据库中设置或覆盖环境变量。调用的 shell 是目标登录的 shell,su 会切换到目标登录的家目录。资源限制和会话优先级修改为目标账户登录类的设置。

- (无字母)与 -l 相同。

-m 保持环境不变。调用的 shell 是你的登录 shell,且不更改目录。作为安全预防措施,如果目标用户的 shell 是非标准 shell(由 getusershell(3) 定义)且调用者的真实 uid 不为零,su 将失败。

-s 将 MAC 标签设置为用户的默认标签,作为用户凭证设置的一部分。如果调用进程的 MAC 标签不足以转换为用户的默认 MAC 标签,则设置 MAC 标签可能失败。如果无法设置标签,su 将失败。

-l(或 -)和 -m 选项互斥;最后指定的选项覆盖之前的所有选项。

如果在命令行上提供了可选的 args,它们将传递给目标登录的登录 shell。注意,目标登录名之前的所有命令行参数都由 su 自身处理,目标登录名之后的所有内容都传递给登录 shell。

默认情况下(除非启动文件重置了提示符),超级用户的提示符设置为“#”,以提醒其强大的能力。

环境变量

su 使用的环境变量:

HOME 真实用户 ID 的默认家目录,除非按上述方式修改。

PATH 真实用户 ID 的默认搜索路径,除非按上述方式修改。

TERM 提供终端类型,可为切换后的用户 ID 保留。

USER 在执行 su 后,用户 ID 始终是有效 ID(目标用户 ID),除非用户 ID 为 0(root)。

文件

/etc/pam.d/su su 的 PAM 配置。

实例

su -m operator -c poweroff 以用户 operator 启动 shell,并运行命令 poweroff。除非你的真实 UID 为 0,否则会询问 operator 的密码。注意,由于用户“operator”默认没有有效 shell,因此需要 -m 选项。在此示例中,-c 传递给用户“operator”的 shell,而不被解释为 su 的参数。

su -m operator -c 'shutdown -p now' 同上,但目标命令包含多个单词,因此用引号括起以配合传递给 shell 的 -c 选项使用。(大多数 shell 期望 -c 的参数是单个单词。)

su -m -c staff operator -c 'shutdown -p now' 同上,但目标命令以登录类“staff”的资源限制运行。注意:在此示例中,第一个 -c 选项应用于 su,而第二个是所调用 shell 的参数。

su -l foo 为用户 foo 模拟登录。

su - foo 同上。

su - 为 root 模拟登录。

参见

csh(1), mdo(1), sh(1), group(5), login.conf(5), passwd(5), environ(7), pam_group(8)

历史

su 命令出现在 Version 1 AT&T UNIX 中。

最后更新于

这有帮助吗?