Linux中使用runuser命令实现用其他用户身份执行命令

在Linux中用其他用户身份执行命令,常见的方式有:  su、sudo、runuser ,详细的说明,大家可以参考  linux下以其他用户身份执行命令 · linux开发 · 看云

本文重点介绍runuser命令。

runuser命令的优势在于不需要输入密码,而劣势在于该命令只能在root模式下使用。也就是说,在root模式下,可以使用runuser命令以其他任何用户身份执行命令,而不需要输入密码。这种应用场景通常是一些后台进程、服务中需要以某个用户身份运行一段脚本的情况。

runuser命令的详细说明请参考:

runuser(1) - Linux manual page

所有参数中,比较难理解的是-l参数,文档中对其描述如下:

Start the shell as a login shell with an environment similar
           to a real login:

           •   clears all the environment variables except for TERM and
               variables specified by --whitelist-environment

           •   initializes the environment variables HOME, SHELL, USER,
               LOGNAME, and PATH

           •   changes to the target user’s home directory

           •   sets argv[0] of the shell to '-' in order to make the
               shell a login shell

也就是说,-l表示会重新设置环境变量,并且会切换目录到用户的主目录。

下面通过几个例子来说明-l参数:

先用sudo -i命令进入root状态,然后输入env命令查看当前的环境变量。变量太多,截图没有显示完。

下面执行 runuser -u ubuntu env ,可以看到,没有使用-l参数时,环境变量是没有变化的。

而如果是 runuser -l ubuntu -c "env"

 环境变量明显变少了很多,说明使用-l参数,对环境变量进行了重新设置。

再来看看目录改变的情况:

 当前是在/root目录,不使用-l参数时,相当于ubuntu用户在/root目录执行ls命令,是没有权限的。使用-l参数后,相当于进入了ubuntu用户的主目录,然后执行ls命令,就能显示/home/ubuntu目录下的文件列表。这里需要注意的是:由于环境变量变化了,目录下的中文文件夹就没有正常显示出来。

以上就是对runuser命令中-l参数的一些理解和验证,希望能对大家理解runuser命令提供一点帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值