1、命令简介
runuser:运行一个带有替代用户和组id
的shell,类似于su
,但不会运行PAM
钩子。
2、命令语法
runuser [OPTION]... [-] [USER [ARG]...]
3、命令描述
修改生效的用户id
和组id
为user
。不会运行PAM
钩子,也不会出现密码提示。该命令在以root用户运行时非常有用。如果以非root用户身份运行,没有设置用户ID的权限,该命令将失败。runuser
命令在一些Linux发行版中可能不可用,可以尝试使用sudo -u
或su -
命令作为替代方法。
4、命令选项
选项 | 描述 |
-, -l, --login | 将shell作为登录shell |
-g, --group=group | 指定主要组 |
-G, --supp-group=group | 指定补充组 |
-c, --command=COMMAND | 传递单个命令COMMAND 到shell并使用-c |
--session-command=COMMAND | 传递单个命令COMMAND 到shell并使用-c 且不创建新会话 |
-f, --fast | 将-f传递给shell (适用于csh或tcsh) |
-m, --preserve-environment | 不重置环境变量 |
-p | 与-m相同 |
-s, --shell=SHELL | 如果/etc/shells允许, 运行指定SHELL |
--help | 显示此帮助信息并退出 |
--version | 输出版本信息并退出 |
5、使用示例
1)以指定用户执行命令
以 testuser
用户的身份执行 ls /home/testuser
命令:
runuser -u testuser -- ls /home/testuser
2)以指定用户执行脚本
有一个脚本 script.sh
,并且希望以 testuser
用户的身份执行它:
runuser -u testuser -- /path/to/script.sh
3)在 runuser 命令中传递环境变量
可以在 runuser
命令中传递环境变量。
runuser -u testuser -- sh -c 'export MYVAR=value && echo $MYVAR'
4)以指定用户执行多个命令
可以使用 sh -c
来执行多个命令:
runuser -u testuser -- sh -c 'cd /home/testuser && ls && echo "Done"'
5)以指定用户执行带有参数的命令
runuser -u testuser -- python3 /path/to/script.py arg1 arg2
6)在系统服务中使用 runuser
在某些情况下,runuser
命令可能会在系统服务脚本中使用。
[Service] User=testuser ExecStart=/usr/sbin/runuser -u testuser -- /path/to/command
7)以指定用户执行带有特殊字符的命令
当命令中包含特殊字符时,使用 sh -c
可以确保命令正确执行:
runuser -u testuser -- sh -c 'echo "This is a test" > /home/testuser/testfile.txt'