runuser命令
runuser命令使用一个替代的用户或者组ID运行一个Shell。这个命令仅在root用户时有用。

仅以会话PAM钩子运行,并且没有密码提示。如果用一个非root用户,并且该用户没有权限设置user ID,这个命令将会因为程序没有setuid而失败。因runuser不会运行认证和账户PAM钩子,它比su更底层。

语法:


复制代码

代码如下:

runuser -l userNameHere -c 'command'
runuser -l userNameHere -c '/path/to/command arg1 arg2'


举例来说,作为一个root用户,你也许想检查下oracle用户下的shell资源限制,输入:



复制代码

代码如下:

# runuser -l oracle -c 'ulimit -SHa'


或者监察下nginx或lighttpd web服务器限制:



复制代码

代码如下:

# runuser -l nginx -c 'ulimit -SHa'


或 

复制代码

代码如下:

# runuser -l lighttpd -c 'ulimit -SHa'


有时,root用户由于权限(安全)问题不能浏览NFS挂载的共享:



复制代码

代码如下:

# ls -l /nfs/wwwroot/cyberciti.biz/http




复制代码

代码如下:

# cd /nfs/wwwroot/cyberciti.biz/http


可能的输出:



复制代码

代码如下:

-bash: cd: /nfs/wwwroot/cyberciti.biz/http/: Permission denied


尽管如此,apache用户被允许浏览或访问挂载在/nfs/wwwroot/cyberciti.biz/http/下基于nfs的系统:



复制代码

代码如下:

# runuser -l apache -c 'ls -l /nfs/wwwroot/cyberciti.biz/http/'




复制代码

代码如下:

# runuser -l apache -c 'cd /nfs/wwwroot/cyberciti.biz/http/; vi index.php'


使用runuser命令,无需使用密码,并且,只能在root用户下使用。


可用选项:

-l: 让shell成为登录shell,用 runuser -l PAM 文件替代默认的
-g:指定主要的组
-G 追加组
-c:命令,要传到shell的单个命令
--session-command=COMMAND:使用-c传递单个命令道shell中并且不创建新的会话
-m: 不重置环境变量