确定用户的主目录

确定用户的主目录

我需要知道如何确定 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预期工作?

答案1

对于本地用户帐户,查找是/etc/passwd正确的(除非系统管理员不遗余力地让事情变得困难)。正确的一般答案是在包含用户帐户的用户数据库中查找,例如 LDAP。大多数现代系统使用国家安全局列出用户数据库,所以检查/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

相关内容