我可以以 sudo 身份为自己设置不同的 $HOME 吗?

我可以以 sudo 身份为自己设置不同的 $HOME 吗?

在我们的网络中,所有用户和组 ID 都通过 NIS 从中央服务器分发,并且每个用户的$HOME目录都位于该中央服务器上的已安装文件夹中。

显然,用户的 GID 不同于root,因此root无权访问已挂载的$HOME文件夹,这使得用户很难(如果不是不可能的话)运行类似这样的操作,sudo apt update因为这需要访问$HOME所见sudo

我的问题是,我是否可以为需要访问的$HOME文件和文件夹设置一个机器本地文件夹,而我的其他(非)工作则始终指向已安装的文件夹?sudo$HOMEsudo

附加信息:

[user@machine ~]$ id
uid=544(user) gid=40(src) groups=40(src),101(systemd-journal)

[user@machine ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root),40(src),101(systemd-journal),600(visitors),13010(hlcc),19016(identhw),51107(cadadm)

[user@machine ~]$ sh -c 'echo $HOME'
/net/server/home/user

[user@machine ~]$ sudo sh -c 'echo $HOME'
/net/server/home/user

我怎样才能将最后一行的结果(即的sudo版本$HOME)指向本地文件夹machine而不是已挂载的网络路径?

编辑:

谢谢您的回答。结果发现我的问题几乎与unix.stackexchange.com 上的这个

我还发现我遇到的问题apt-get update实际上与环境变量无关,而是与我从我的( )主文件夹HOME调用有关,类似于sudo apt-get updateuser这个问题sudo apt-get update只需从另一个文件夹调用即可解决,例如/

但由于我的问题更多是关于HOME看到的sudo,所以我接受了techraf 的回答因为它不需要sudo命令行中的任何额外的开关或定义。

答案1

如果您使用 sudo 调用,-i您将获得 root 的主目录。

如果您希望 sudo 从当前环境继承,您可以将 home 设置为其他内容。

因此,要么使用,sudo -i command要么执行HOME=/wherever sudo command

例如:

sudo -i sh -c 'echo $HOME'

这给你:

/root

或者:

HOME=/foo sudo sh -c 'echo $HOME'

这给你:

/foo

答案2

您需要将以下行添加到 sudoers 命令环境部分(带有sudo visudo)。

Defaults        env_keep -= "HOME"

然后您就可以不经任何修改地使用您的脚本。


sudoDebian 和 Ubuntu 在命令默认处理HOME变量(特别是这个变量,而不是整个环境)的方式上存在差异:

  • 在 Debian 中,HOME值被替换为 root(目标用户)的主目录;

  • Ubuntu 保留呼叫用户的设置。

Unix.SE 上的这个答案包含更多细节。

相关内容