ユーザーのホームディレクトリの決定

ユーザーのホームディレクトリの決定

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環境変数が話すディレクトリであるということです。

ログインプログラム(login、、、sshdXディスプレイマネージャなど)は通常、HOMEログインしたユーザーのホームディレクトリに環境変数を設定します。suおよびsudo変更などの「高度な」ユーザー変更プログラムHOME(設定とコマンドラインオプションに基づいてsudoを使用)。したがって、通常、「現在のユーザーのホームディレクトリ」定義は、「ユーザーのホームディレクトリ」と「現在のユーザー」の組み合わせと一致します。

ただし、chrootこれは変更されないため、HOMEchrootのセッションが親プロセスから環境変数を継承するHOMEことは驚くべきことではありません/root。他のシェルと同様に、bashでは設定されていない場合、デフォルトではユーザーデータベース検索に~設定されている値に展開されます。HOMEHOME

解決策:設定をキャンセルしてくださいHOME

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

おすすめ記事