sourCEntral - mobile manpages

pdf

SU

名称

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, −−command COMMAND

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

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

, −l, −−login

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

When is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (−l and −−login) do not have this restriction.

−s, −−shell SHELL

将使用的 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,这些环境变量也会被重置。

如果使用了 −−login,环境变量 $TZ, $HZ, and $MAIL 也会根据 /etc/login.defs 中的选项 ENV_TZ, ENV_HZ, MAIL_DIRMAIL_FILE 重置 (请看下边)。

如果使用了 −−login,其它环境变量可能会根据 ENVIRON_FILE 文件来设置(请看下边)。

CAVEATS

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

配置文件

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

CONSOLE (string)

如果定义了,或者是包含设备名(没行一个)的文件的完整路径名,或者是“:”分隔的设备名列表。将只会在这写设备上允许 root 登录。

如果没有定义,可以在任何设备上使用 root。

指定的设备时不带 /dev/ 前缀。

CONSOLE_GROUPS (string)

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

DEFAULT_HOME (boolean)

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

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

ENV_HZ (string)

如果设置了,将会用于在用户登录时定义 HZ 环境变量。值必须以 HZ= 开头。Linux 上的常用值是 HZ=100

ENVIRON_FILE (string)

如果此文件存在,并且可读,将会从中读取登录环境。所有行都必须是 name=value 的格式。

以 # 开头的行将视为注释,并被忽略。

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.

ENV_TZ (string)

如果设置了,它将用于在用户登录时定义 TZ 环境变量。此值可以是以 TZ= 开头的时区名(例如 TZ=CST6CDT),或者是包含时区规则的文件完整路径(例如 /etc/tzname)。

如果将完整路径指定为了一个不存在或不可读的文件,则默认使用 TZ=CST6CDT

LOGIN_STRING (string)

此字符串用于提示输入密码。默认是 "Password: ",或者翻译了的结果(汉语中翻译为了“密码:”)。如果设置了此变量,提示不会被翻译。

如果字符串包含 %s,将会被用户名替换。

MAIL_CHECK_ENAB (boolean)

启用登录时检查和现实邮箱状态。

如果 shell 的启动文件已经检查了邮件("mailx −e" 或者其它同功能的工具),您应该禁用它。

MAIL_DIR (string)

邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。

MAIL_FILE (string)

定义用户邮箱文件的位置(相对于主目录)。

MAIL_DIR and MAIL_FILE 变量由 useraddusermoduserdel 用于创建、移动或删除用户邮箱。

如果 MAIL_CHECK_ENAB 设置为 yes,它们也被用于定义 MAIL 环境变量。

QUOTAS_ENAB (boolean)

Enable setting of resource limits from /etc/limits and ulimit, umask, and niceness from the user's passwd gecos field.

SULOG_FILE (string)

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

SU_NAME (string)

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

SU_WHEEL_ONLY (boolean)

如果为 yes,用户必须在 /etc/group 中别设定为 GID 为 0 的组(在大部分 Linux 上叫 root)的成员。

SYSLOG_SU_ENAB (boolean)

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

USERGROUPS_ENAB (boolean)

如果 uid 和 gid 相同,用户名和主用户名也相同,使非 root 组的组掩码位和属主位相同 (如:022 −> 002, 077 −> 007)。

如果设置为 yes,如果组中没有成员了,userdel 将移除此用户组,useradd 创建用户时,也会创建一个同名的默认组。

文件

/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).

pdf