Users
確定使用者的主目錄
我需要知道如何確定 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
環境變數所說的任何內容。登錄程序(
login
、sshd
、X 顯示管理器等)通常將HOME
環境變數設置為正在登錄的使用者的主目錄。“高級”使用者更改程序,例如su
和sudo
更改HOME
為(使用 sudo,這取決於配置和命令行選項)。所以通常情況下,“目前使用者的主目錄”的定義與“使用者的主目錄”和“目前使用者”的組合相匹配。但是
chroot
不會改變HOME
,所以你在 chroot 中的會話繼承自HOME
父程序中的環境變數,這並不奇怪/root
。在 bash 中,與任何其他 shell 一樣,~
擴展為 的值,如果未設置HOME
,則預設為使用者數據庫查找。HOME
解決方案:取消設置
HOME
。env -u HOME chroot --userspec=test path/to/subsystem/ /bin/bash