su 的功能是使用替代用户和组ID运行命令。

用法

        su [options] [-] [user [argument...]]

在未指定用户的情况下调用时,su 默认以 root 身份运行交互式 shell。当用户被指定时,可以提供额外的参数,在这种情况下它们被传递给 shell。为了向后兼容,su 默认不改变当前目录,只设置环境变量 HOME 和 SHELL(如果目标用户不是 root,则加上 USER 和 LOGNAME)。建议始终使用 --login 选项(而不是其快捷方式 -)以避免混合环境引起的副作用。

选项

        -c,--command=command

                将 command 传给shell。

        -f,--fast

                仅在 csh 和 tcsh 生效,shell 不读取启动文件。

        -g,--group=group

                指定主要的组,此选项仅对 root 用户可用。

        -G,--supp-group=group

                指定一个补充组。此选项仅对 root 用户可用。如果选项 --group 未指定,则第一                    个指定的补充组也用作主要组。

        -,-l,--login

                将 shell 作为登录 shell 启动,其环境类似于真实登录:

                ① 清除除 TERM 和 --whitelist-environment 指定的变量之外的所有环境变量

                ② 初始化环境变量 HOME、SHELL、USER、LOGNAME 和 PATH

                ③ 切换到目标用户的家目录

                ④ 将 shell 的 argv[0] 设置为“-”以使 shell 成为登录 shell

        -m,-p,--preserve-environment

                保留整个环境,即不设置 HOME、SHELL、USER 或 LOGNAME。如果指定了选                  项 --login,则忽略此选项。

        -P,--pty

                为会话创建伪终端。独立终端提供更好的安全性,因为用户不与原始会话共享终                    端。这允许避免 TIOCSTI ioctl 终端注入和针对终端文件描述符的另一种安全攻                      击。所有会话也可以移动到后台(例如,“su --pty -username -c application &")。                  如果启用了伪终端,那么 su 命令将作为会话之间的代理(复制 stdin 和                                  stdout)。此功能主要用于交互式会话。如果标准输入不是终端,而是例如管道                    (echo "date" | su --pty),那么伪终端的 ECHO 标志将被禁用以避免混乱                              的输出。

        -s,--shell=shell

                运行指定的 shell 而不是默认的。根据以下规则依次选择要运行的 shell:

                ① 使用 --shell 指定的 shell

                ② 使用环境变量 SHELL 指定的 shell,如果使用了 --preserve-environment 选项

                ③ 目标用户的 passwd 信息中的 shell

                ④ /bin/sh

                如果目标用户有一个受限的 shell(即没有在 /etc/shells 中列出),除非调用用户                    是 root,否则 --shell 选项和 SHELL 环境变量将被忽略。

        --session-command=command

                类似 -c 但是不创建新的会话(不建议使用)。

        -w,--whitelist-environment=list

                清除 --login 的环境时,不要重置逗号分隔列表中指定的环境变量。环境变量                          HOME、SHELL、USER、LOGNAME 和 PATH 的白名单将被忽略。

        -V,--version

                展示版本信息后退出。

        -h,--help

                展示帮助信息后退出。

信号

        在接收到 SIGINT、SIGQUIT 或 SIGTERM 后,su 终止其子进程,然后用接收到的信            号终止自身。子进程被 SIGTERM 终止,在尝试失败并延迟 2 秒后子进程被 SIGKILL            杀死。

配置文件

        su 读取 /etc/default/su 和 /etc/login.defs 作为配置文件。下边是和 su 有关的配置参                数:

        FAIL_DELAY(数字)

                延迟的秒数,以避免认证失败。这个参数值必须是非负整数。

        ENV_PATH(字符串)

                给一个常规用户定义环境变量 PATH,默认值是 /usr/local/bin:/bin:/usr/bin。

        ENV_ROOTPATH(字符串)

        ENV_SUPATH(字符串)

                给 root 用户定义环境变量 PATH,ENV_SUPATH 优先。默认值是                                          /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin。

        ALWAYS_SET_PATH(布尔值)

                如果设置成 yes 且没有指定 --login 和 --preserve-environment,su 初始化                              PATH。

        在 /bin 和 /sbin 合并到 /usr 的系统上,环境变量 PATH 可能不同,该变量还受 --login            命令行选项和 PAM 系统设置(例如 pam_env)的影响。

退出状态

        su 通常返回它执行的命令的退出状态。如果命令被信号杀死,则 su 返回信号的编号加          上 128 的值。

        su 自身产生的退出状态:

                1        执行请求的命令之前的一般错误

                126    请求的命令无法执行

                127    请求的命令找不到

相关文件

        /etc/pam.d/su        默认 PAM 配置文件

        /etc/pam.d/su-l      指定 --login 时的 PAM 配置文件

        /etc/default/su       命令指定的 logindef 配置文件

        /etc/login.defs       全局 logindef 配置文件

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐