Users

確定使用者的主目錄

  • October 19, 2017

我需要知道如何確定 linux 使用者的主目錄。每個人的回答都是“嘿,看看/etc/passwd然後找出來”。但這似乎並不總是正確的。看這個:

$ whoami
test
$ cat /etc/passwd
test:x:2000:2000::/home/test:/bin/bash  (relevant line)
$ echo ~
/root
$ cd
bash: cd: /root: No such file or directory

我真的不知道發生了什麼。這是我以 root 身份輸入的子系統chroot --userspec=test path/to/subsystem/ /bin/bash。有誰知道這是什麼以及如何修復它以便~擴展/home/test並按cd預期工作?

查找/etc/passwd本地使用者帳戶是正確的(除非系統管理員竭盡全力使事情變得困難)。正確的一般答案是在包含使用者帳戶的使用者數據庫中查找,例如 LDAP。大多數現代系統使用NSS來列出使用者數據庫,因此/etc/nsswitch.conf如果您認為可能存在非本地帳戶,請檢查您的系統。

從應用程序的角度來看,正確的答案是主目錄是HOME環境變數所說的任何內容。

登錄程序(loginsshd、X 顯示管理器等)通常將HOME環境變數設置為正在登錄的使用者的主目錄。“高級”使用者更改程序,例如susudo更改HOME為(使用 sudo,這取決於配置和命令行選項)。所以通常情況下,“目前使用者的主目錄”的定義與“使用者的主目錄”和“目前使用者”的組合相匹配。

但是chroot不會改變HOME,所以你在 chroot 中的會話繼承自HOME父程序中的環境變數,這並不奇怪/root。在 bash 中,與任何其他 shell 一樣,~擴展為 的值,如果未設置HOME,則預設為使用者數據庫查找。HOME

解決方案:取消設置HOME

env -u HOME chroot --userspec=test path/to/subsystem/ /bin/bash

引用自:https://unix.stackexchange.com/questions/399237