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命令行中的任何其他开关或定义。
如果您使用 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)
您需要将以下行添加到 sudoers 命令环境部分(带有sudo visudo)。
Defaults env_keep -= "HOME"
Run Code Online (Sandbox Code Playgroud)
然后您就可以使用您的脚本而无需更改。
Debian 和 Ubuntu 之间的区别在于sudo命令默认处理HOME变量的方式(特别是这个变量,而不是整个环境):
在 Debian 中HOME,值被替换为 root(目标用户)的主目录;
Ubuntu 保留调用用户的设置。
Unix.SE 上的这个答案包含更多详细信息。
| 归档时间: |
|
| 查看次数: |
3437 次 |
| 最近记录: |