プロセスの uid が /etc/passwd にありません

プロセスの uid が /etc/passwd にありません

私は、 から複数のファイルを解析するおもちゃのシステム モニターを作成しています/proc。他の値の中でも、uidからすべてのプロセスの を解析します/proc/$pid/status。その後、 から解析したユーザー名にプロセスの uid をマップします/etc/passwd。しかし、ユーザー名が見つからないため、まれにプログラムがクラッシュすることがあります。完全な uid -> ユーザー名のマッピングを取得するには、他のファイルも解析する必要がありますか?

答え1

Linux はモジュール式のアカウント データベースをサポートしています。'files' データベース (/etc/passwd) に加えて、ユーザー アカウントは SSSD、BDB、ネットワーク データベース (LDAP、YP、NIS、Hesiod、Active Directory、SQL) に保存できます。また、データベース モジュール自体 (systemd DynamicUsers) によって動的に生成することもできます。

これを機能させるには、一度もない/etc/passwd やその他のファイルを直接解析します (ただし、ローカル ユーザー管理ツールを特に作成している場合を除きます)。

libcが提供する次のような関数を使用する必要があります。取得pwuid()またはgetgrgid()ユーザー名と UID を検索するには、getentまたはidCLI ツールを使用してシェル スクリプトから検索を実行する必要があります。

一般に、マッピングが失敗した場合もクラッシュすることはありません。アカウントが削除されたか、プロセスが独自の UID 範囲を持つコンテナーに属している可能性があるためです。その場合は、UID を表示するだけです。

関連情報