sudo作为其环境的另一个用户

用户名

$ whoami
admin
$ sudo -S -u otheruser whoami
otheruser
$ sudo -S -u otheruser /bin/bash -l -c 'echo $HOME'
/home/admin

为什么即使将bash作为登录shell调用也没有$HOME设置为/home/otheruser

具体来说,/home/otheruser/.bashrc不是来源。此外,/home/otheruser/.profile不是来源。-(/home/otheruser/.bash_profile不存在)

帕维尔·西默达(PavelŠimerda)

sudo只需使用即可调用登录shell -i如果未指定命令,则将显示登录shell提示,否则,将获得命令的输出。

示例(登录shell):

sudo -i

示例(具有指定的用户):

sudo -i -u user

示例(带有命令):

sudo -i -u user whoami

示例(打印用户的$HOME):

sudo -i -u user echo \$HOME

注意:反斜杠字符可确保美元符号到达目标用户的外壳,并且不会在调用用户的外壳中解释。

我刚刚检查了最后一个带有strace的示例,它可以告诉您确切的情况。如下所示,输出显示出正在使用shell--loginshell命令来调用shell ,就像您对bash的显式调用一样,但是sudo可以做自己的工作,例如设置$HOME

# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...

我注意到您正在使用-S,但我认为这通常不是一种好方法。如果要以其他用户身份运行命令而不通过键盘执行身份验证,则可能要改用SSH。它适用于localhost其他主机,并提供无需任何交互式输入即可工作的公钥身份验证。

ssh user@localhost echo \$HOME

注意:SSH不需要任何特殊选项,因为SSH服务器始终创建一个登录外壳程序,以供SSH客户端访问。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Ansible SSH作为一个用户,Sudo作为另一个用户

为另一个用户设置Linux环境变量(sudo)

以sudo身份作为另一个用户运行cd时出现问题

获取另一个用户的环境变量?

sudo访问另一个用户的帐户

Robocopy作为另一个用户

rsync作为另一个用户

如何使用我的sudo权限确认另一个用户的sudo权限?

以 root 用户身份以另一个用户身份执行 sudo Bash 脚本

为什么导入的函数“作为”另一个名称保留其原始名称______?

将对象作为参数从用户窗体传递到另一个用户窗体

如何在 Linux 的主文件夹中将命令作为另一个用途运行 + 使用用户的环境/配置变量?

Java8-为什么一个方法需要执行另一个方法作为其参数?

如何使用一个表属性或其值作为对另一个表属性的约束

一个类,其指针指向另一个类作为成员变量并将其推入向量

如何将环境变量导出为另一个用户

将文件移动到另一个用户的主目录(没有sudo)?

以另一个无密码用户身份运行命令-sudo失败?

如何sudo git clone并安全地更改对另一个用户的权限

SSH作为另一个用户,运行命令并退出

创建目录和子目录作为另一个用户

如何将用户输入作为变量返回,以供另一个脚本调用?

用户表单输入一个值,被转换并自动进入另一个表单输入作为值

如何设置将所有环境变量从root用户复制到另一个特定用户

在另一个环境上调用capistrano任务

从另一个VM(Virtualbox)访问开发环境

Swift 无法添加另一个环境视图

如何通过引用另一个批处理文件将环境变量作为参数传递?

如何在将C ++宏作为参数传递给另一个宏之前对其进行扩展