私の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

答え2

技術的にはそうですどこかにファイルがあります。これには、与えられた各ユーザー名の uid が含まれます。

Linuxで単純なローカルアカウントを作成する場合、そのアカウントは/etc/passwdフィールド#3にあります:

ただし、LinuxがActiveDirectory認証を使用している場合は、他のサーバーからすべてのユーザー名/ uid情報を取得し、それをLinuxシステムの一部の[テキスト]ファイルに保存します。わかりません。メモリに保存することもできます。私はこれの詳細を知りたいです。

Linuxは複数のログインまたは認証方式をサポートしていますが、そのうちの1つはADとLDAPです。 LDAPがユーザー名とUIDマッピングをどこに保存するのかわかりません。しかし、私も知りたいです。

だから...私のUIDを含む/定義する/ etc / passwd以外にファイルがありますか? はい。これは、単純な既存のローカル/etc/passwdメソッドと使用される方法に加えて、Linuxがサポートするさまざまなログイン/認証方法によって異なります。それでは、次の質問はLinuxでは、どのログイン認証方法をサポートし、どの方法が使用されているかを確認する方法について説明します。

関連情報