Tutoriel Linux

Linuxにおけるgetent:/etc/passwdから来ていないアカウントを見つける

Débutant2 min de lecture

あなたがサーバー上で id alice を実行したとき、そのアカウントは企業のディレクトリに存在しますが、 grep alice /etc/passwd は何も返さない。アカウントが存在しないと結論する前に、Linuxが実際に使用しているビューを確認してください。

getent は、NSS に宣言されているデータベースを問い合わせます。これは、ローカルファイル、SSSD、LDAP、または他のアイデンティティサービスを組み合わせることができるメカニズムです。これにより、システムがアカウント、グループ、およびその数値 ID を解決しているかどうかを確認でき、構成を変更することなく確認できます。

TuxはLinuxのアカウントをローカルファイルとネットワークディレクトリに関連付ける
Getentは、NSSによって構成されたアイデンティティソースを参照します。

なぜ/etc/passwdは常に解答を提供するわけではないのか

ローカルマシンでは、 /etc/passwd は通常、期待されるすべてのアカウントを含んでいます。LDAP や Active Directory に SSSD 経由で接続されているサーバーでは、このファイルはローカルアカウントを保持し、リモートアカウントは NSS を介して取得されます。

コマンド getent passwd は、 /etc/nsswitch.conf に定義されたソースおよび順序で NSS を介して passwd データベースを解決します。

grep '^passwd:' /etc/nsswitch.conf
grep '^group:' /etc/nsswitch.conf

passwd: files systemd sss のような行は、Linuxが最初にローカルファイルを参照し、その後システムサービス、最後にSSSDを参照することを示します。この順序をあなたの設定にコピーしないでください:それはディストリビューションや既存の統合によって異なります。

getentでアカウントを探す

正確なログイン名を使用し、全データベースを表示しません。大規模なディレクトリでは、 getent passwd だけでは長くて無意味な出力が生成される可能性があります。

getent passwd alice
getent passwd 10542

アカウントが解決されている場合、出力は通常の形式に従います:名前、パスワードマーカー、UID、GID、説明フィールド、ホームディレクトリ、シェル。したがって、LDAPまたはSSSDのアカウントがここに表示される場合、 /etc/passwd には存在しない可能性があります。

出力がない場合は、NSSが現在の構成でそのエントリを見つけられないことを意味します。この結果は、LDAPの障害、SSSDのキャッシュ、または要求された名前のミスを修正するものではありません。

グループと有効なアイデンティティを確認する

表示されるアカウントは、そのグループが正しいことを保証しません。 group データベースを確認し、その後 id を使用してこのユーザーの計算されたグループを表示します。

getent group projet-admin
id alice

id alice は、UID、主GID、追加の期待されるグループを表示する必要があります。 アカウントが getent passwd alice で表示されるが、 id alice では表示されない場合、両方の出力を保持し、SSSDまたは該当するアイデンティティサービスのログを確認してください。

この読み取りは、 id やディレクトリで設定されたサービスのように、NSSにアイデンティティを解決するよう要求するツールに役立ちます。

Linuxでユーザーをリストするためのガイドは、ローカルアカウントをインベントリするのに役立ちます。ここでの問題は異なります:システムはサービスがそれを使用する際にアイデンティティを認識しているのか?

まず探し、次に修正する

私は、SSSDを再起動したり、キャッシュをクリアしたり、 nsswitch.conf を変更する前に、最初のチェックとして getent を使用します。このコマンドは読み取り専用で、多くのLinuxプログラムと同じ視点を提供します。

  • 要求されたアカウントを /etc/nsswitch.confpasswd: 行と比較します。
  • getent passwd utilisateur および getent group groupe を実行します。
  • 計算されたグループを id utilisateur で確認します。
  • エントリが不足している場合は、設定を変更する前にアイデンティティサービスのログを確認します。

完全にローカルな端末では、 getent がしばしば /etc/passwd の内容を確認します。ディレクトリに接続されたサーバーでは、この違いが既にNSS側に存在するアカウントを削除したり再作成したりするのを防ぎます。

man7のgetent(1)ページは、利用可能なデータベースやキーによる検索の詳細を説明しています。アカウントをローカルに作成する必要がある場合は、リモートアイデンティティを除外した後、代わりにLinuxでのUseraddプロシージャを使用してください。

sudo apt update && sudo apt upgrade