Provided by: login_4.1.5.1-1ubuntu9.5_amd64 bug

名称

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

大纲

       su [选项] [用户名]

描述

       su 用于让用户在登录期间变成另外一个用户。后边不带 username 使用时,su 默认会变成超级用
       户。可选的选项 -,可以用于提供一个类似于用户直接登录的环境,用户可能期望是这样的。

       附加参数可以在用户名之后提供,这时,将会把他们提供给用户的登录 shell。特别地,参数 -c 将会
       使下一个参数被多数命令解释器视为命令。这个命令会被 /etc/passwd 中为目标用户指定的 shell 执
       行。

       您可以使用 -- 参数将 su 选项和提供给 shell 的参数分隔开来。

       如果合适,将提示用户输入一个密码。输入无效的密码会产生一个错误消息。所有的尝试,无论成功还
       是失败,都会被记录,以检测对系统的滥用。

       当前环境会传递给新 shell。对于普通用户,$PATH 的值重置为 /bin:/usr/bin,而对于超级用户则是
       /sbin:/bin:/usr/sbin:/usr/bin。这会随 /etc/login.defs 中的 ENV_PATHENV_SUPATH 值改变。

       在登录 shell 中以第一个字符是“*”标注的是子系统登录。给定的主目录将被用于用户实际登录的新文
       件系统的根。

选项

       su 命令可以接受的选项有:

       -c, --commandCOMMAND
           通过使用其 -c 选项,指定一个由 shell 运行的命令。

           执行的命令将不会拥有控制终端。此选项不能用于执行需要控制 TTY 的交互程序。

       -, -l, --login
           提供一个类似于用户直接登录的环境,用户可能会希望这样。

           使用了 - 时,它必须是 su 的最后一个参数。其它形式(-l--login) 没有这个限制。

       -s, --shellSHELL
           将使用的 shell。

           使用的 shell 在如下中选择(高优先级在前):.PP
               通过 --shell 指定的 shell。

               如果使用了 --preserve-environment,shell 将由 $SHELL 环境变量指定。

               在 /etc/passwd 的相应项中为目标用户指定的 shell。

               如果无法通过以上办法找到一个 shell,则使用 /bin/sh。

           如果目标用户的 shell 是有限制的(即,/etc/passwd 中用户项中的 shell 字段没有在
           /etc/shells 中列出),那么 --shell 选项或 $SHELL 环境变量不会带入账户,除非 su 是被
           root 调用的。

       -m, -p, --preserve-environment
           保留当前环境,除非:.PP $PATH
               根据 /etc/login.defs 中的 ENV_PATH or ENV_SUPATH 选项重设 (请往下看)

           $IFS
               如果已经设置了,重设 “<space><tab><newline>”。

           如果用户的 shell 受限,此选项无效 (除非是 root 调用的 su)。

           注意,环境的默认行为如下:.PP
               The $HOME, $SHELL, $USER, $LOGNAME, $PATH, 和 $IFS 这些环境变量会被重置。

               如果没有使用 --login,复制环境,上述几个变量除外。

               如果使用了 --login,如果设置了 $TERM, $COLORTERM, $DISPLAY$XAUTHORITY,这些环
               境变量也会被重置。

               其它环境可能由 PAM 模块设置。

CAVEATS

       此版本的 su 有很多编译选项,在某些机器上,可能只使用了其中的一部分。

配置文件

/etc/login.defs 中有如下配置变量,可以用来更改此工具的行为:

       CONSOLE_GROUPS (string)
           在控制台登录时,添加到用户附加组集中的组列表(就如 CONSOLE 所确定的)。默认是无。 使用时
           需要注意:这可能使用户获取这些组的永久权限,甚至登录到的不是此控制台时。

       DEFAULT_HOME (boolean)
           如果不能 cd 到主目录时,说明是否允许登录。默认是否。

           如果设置为 yes,如果不能 cd 到主目录时,用户将会登录到根目录(/)。

       ENV_PATH (string)
           If set, it will be used to define the PATH environment variable when a regular user
           login. The value is a colon separated list of paths (for example /bin:/usr/bin) and
           can be preceded by PATH=. The default value is PATH=/bin:/usr/bin.

       ENV_SUPATH (string)
           If set, it will be used to define the PATH environment variable when the superuser
           login. The value is a colon separated list of paths (for example
           /sbin:/bin:/usr/sbin:/usr/bin) and can be preceded by PATH=. The default value is
           PATH=/sbin:/bin:/usr/sbin:/usr/bin.

       SULOG_FILE (string)
           如果定义了,所有的 su 活动都会记录到此文件。

       SU_NAME (string)
           如果定义了,就是运行“su -”时显示的命令名称。例如,如果定义为“su”,那么“ps”会显示此命令
           为“-su”。如果没有定义,“ps”将会显示实际执行的 shell,例如类似于“-sh”。

       SYSLOG_SU_ENAB (boolean)
           除了 sulog 文件日志,也为 su 活动启用“syslog”日志。

文件

       /etc/passwd
           用户账户信息。

       /etc/shadow
           安全用户账户信息。

       /etc/login.defs
           Shadow 密码套件配置。

退出值

       成功时,su 返回执行的命令的退出值。

       如果命令被信号结束,su 返回此信号的编号加 128。

       如果 su 必须要杀死此命令(因为已经要求它结束,可是却没有及时结束),su 返回 255。

       su 中的某些退出值与执行的命令无关:

       0
           成功 (只有 --help)

       1
           系统或者认证失败

       126
           要求的命令不存在

       127
           请求的命令不能执行

参见

       login(1), login.defs(5), sg(1), sh(1).