程序如何检测主目录($HOME 除外)

程序如何检测主目录($HOME 除外)

我在一个组织工作,其中包含的文件服务器/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]暂时使用其他目录作为主目录

答案1

你的问题引起了我的兴趣,但我没有现成的答案。我尝试过的 Unix、Linux 或 *BSD 都没有与“主目录”相关的系统调用。我无法通过谷歌搜索任何有关了解用户主目录的 Linux 内核的信息。所以,我相信,价值$HOME是 shell 确定“主目录”的官方记录源。登录程序根据登录程序分叉并执行用户 shell 时HOME的内容进行设置。/etc/passwd

正如您所注意到的,如果 的值与$HOME目录名称不匹配,事情就会变得有点糟糕,主要是在 shell 便利性方面,但实际上没有什么会彻底中断 - 您仍然可以主要使用登录 shell。我通过设置 进行了实验export HOME=/var/tmpbash似乎并不介意这一点,并cd ~直接将您带到/var/tmp。

相关内容