我在一个组织工作,其中包含的文件服务器/home
有时无法在早上启动。我仍然可以登录控制台,但收到类似 的错误消息$HOME not available, using /
。在这种情况下我的解决方法是
cd /tmp
mkdir home
chmod 700 home
export HOME=/tmp/home
# wget a copy of my "emergency" rc files that I keep online
# xinit, twm etc.
所以我仍然可以通过网络浏览器阅读电子邮件,如果文件服务器长时间关闭,请将我当前的项目从 gitlab 签入 /tmp 并在那里继续。
Xterm 和 twm 似乎尊重$HOME
并愉快地在我的临时设置中工作,cd
没有参数,并且~
在 bash 中工作正常。chromium-browser
没有,并且仍然抱怨/home/organisation-specific-stuff/my-username
无法提供服务。 (Chromium 将运行,--user-data-dir=/tmp/home/chromium
但启动它仍然会导致 dbus 对不存在的 /home 发脾气)。
我的问题:
除此之外,程序还有哪些其他方式
$HOME
来引用“主目录”,以及为什么某些程序选择其中一种而不是另一种,是否有充分的理由(例如安全隐患)?有没有办法告诉例如 chromium、dbus 暂时使用
/tmp/home
?由于缺乏 root 权限,我无法使用 [1] 中的解决方案。出于同样的原因,chroot
似乎也是不可能的。或者这是一件愚蠢/危险的事情吗?
如果这有什么区别的话,我的系统是“精确”的 Ubuntu。
答案1
你的问题引起了我的兴趣,但我没有现成的答案。我尝试过的 Unix、Linux 或 *BSD 都没有与“主目录”相关的系统调用。我无法通过谷歌搜索任何有关了解用户主目录的 Linux 内核的信息。所以,我相信,价值$HOME
是 shell 确定“主目录”的官方记录源。登录程序根据登录程序分叉并执行用户 shell 时HOME
的内容进行设置。/etc/passwd
正如您所注意到的,如果 的值与$HOME
目录名称不匹配,事情就会变得有点糟糕,主要是在 shell 便利性方面,但实际上没有什么会彻底中断 - 您仍然可以主要使用登录 shell。我通过设置 进行了实验export HOME=/var/tmp
。bash
似乎并不介意这一点,并cd ~
直接将您带到/var/tmp。