私のUIDを含む/定義する/ etc / passwd以外にファイルがありますか?

私のUIDを含む/定義する/ etc / passwd以外にファイルがありますか?

UIDとGIDを理解してください。
さまざまなオンライン読書を通じて私のUIDがに保存されていると信じていますが/etc/passwd、私が作業しているサーバーではそうではありません。

$ whoami
user1
$ cat /etc/passwd | grep user1
$

/etc/passwd私のUIDを含めることができるこのファイル以外に他のファイルはありますか?

(どこかにUIDを含むファイルがあるため、UIDがGIDに似ているとします。そのファイルで興味のあるGIDを見つけました/etc/group。)

コマンドを使用してUIDを取得できることを知っていますが、id -uこの質問については特にUIDがあるかどうかを知りたいです。文書それを含んでいます。

ベストアンサー1

「は」/etc/passwdユーザーアカウントデータベースを保存して照会するいくつかの方法の1つです。

多くのUnixシリーズシステムでは、ネームサービススイッチ(元のSolarisでは)さまざまな方法でいくつかのシステム名をIDに変換することを担当します。

その構成は通常/etc/nsswitch.conf

ここでは、多くのデータベースのエントリとそのデータベースの処理方法(グループ、パスワード、サービス、ホスト、ネットワーク...)を見つけることができます。hostsホスト名をネットワークプロトコルアドレスに変換するために使用されるデータベースの場合/etc/hosts

プロセスがユーザー名に関する情報を要求するとき(標準機能を使用するなど)、エントリを見つけるためにgetpwnam()使用する方法をこのファイルで見つけます。passwd

これがメソッドであればfiles照会され/etc/<db>ます。 GNUシステムでは、通常、/lib/<system>/libnss_files.so.<version>動的にロードされるいくつかのモジュールによってこれが行われます。

ただし、NIS+、LDAP、SQLなど、より多くのものを持つこともできます。これらの方法のいくつかはGNU libcに含まれており、いくつかは別々にインストールできます。 Debian または派生製品では、apt-cache search 'NSS module'例の出力を参照してください。

ユーザーデータベースが集中化されたエンタープライズ環境で最も広く使用されている中央データベースはNISで、その後はNIS +であり、現在はLDAPまたはMicrosoftのActive Directory(またはUnixレプリカ)です。

存在する場合は、get{pw/host/grp}...()GNU libcの関数もクエリします。ネームサービスキャッシュデーモン/run/nscd/socket完全なNSSスタックを呼び出し、バックエンドデータベースを直接クエリする代わりに。その後、nscd将来のクエリを高速化するために、キャッシュによってクエリが完了します。一部のNSSモジュールは独自にキャッシュすることもできます。

GNU/Linux システムで広く使用されているアプローチは、以下を使用することです。システムセキュリティサービスsss)。sssd要求を処理し、それを他のデータベース(LDAP / ADなど)に転送すると同時に、一部のキャッシュも実行する別のデーモン()が付属しています。その後、ほとんどのDBで動作する方法が/etc/nsswitch.confあり、sssバックエンドはsssd構成で構成されます。sssdこの場合、PAM(認証担当)は通常クエリを実行します。

これは通常、コマンドラインクエリ/etc/passwd(または/etc/group... /etc/hosts)からアカウント(またはグループ/ホスト...)情報を取得するのが間違った理由を明確にするのに役立ちます。ほとんどの最新システムには、getentコマンドの代わりに(Solarisでも)コマンドがあるか、より便利にはperlすべての標準機能にアクセスするために使用できるインターフェースがありますget<db>*()

$ getent passwd bin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
$ perl -le 'print for getpwnam("bin")'
bin
x
2
2


bin
/bin
/usr/sbin/nologin
$ getent services domain
domain                53/tcp
$ perl -le 'print for getservbyname("domain", "tcp")'
domain

53
tcp
$ perl -le 'print for getservbyname("domain", "udp")'
domain

53
udp

おすすめ記事