作为 sudo,我可以为自己拥有一个不同的 $HOME 吗?

Fri*_*dFX 5 sudo home-directory

在我们的网络中,所有用户和组 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
Run Code Online (Sandbox Code Playgroud)

如何更改最后一行的结果(即 的sudo版本$HOME)指向本地文件夹machine而不是安装的网络路径?

编辑:

感谢您的回答。原来我的问题与unix.stackexchange.com上的这个问题几乎相同。

我还发现我遇到的问题apt-get update实际上与HOME环境变量无关,而是与我sudo apt-get update从我的 ( user's) 主文件夹调用的事实有关,类似于这个问题,可以通过简单地解决sudo apt-get update从另一个文件夹调用,例如/.

但是由于我在这里的问题更多是关于HOMEseen by sudo,我接受了techraf 的回答,因为它不需要sudo命令行中的任何其他开关或定义。

Ste*_*hen 6

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

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

所以,要么使用sudo -i command要么做HOME=/wherever sudo command

例如:

sudo -i sh -c 'echo $HOME'
Run Code Online (Sandbox Code Playgroud)

这给了你:

/root
Run Code Online (Sandbox Code Playgroud)

或者:

HOME=/foo sudo sh -c 'echo $HOME'
Run Code Online (Sandbox Code Playgroud)

这给了你:

/foo
Run Code Online (Sandbox Code Playgroud)


tec*_*raf 5

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

Defaults        env_keep -= "HOME"
Run Code Online (Sandbox Code Playgroud)

然后您就可以使用您的脚本而无需更改。


Debian 和 Ubuntu 之间的区别在于sudo命令默认处理HOME变量的方式(特别是这个变量,而不是整个环境):

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

  • Ubuntu 保留调用用户的设置。

Unix.SE 上的这个答案包含更多详细信息。