Linux の id コマンドはどのようにしてユーザー グループを取得するのでしょうか、またはどの pam モジュールが使用されるのでしょうか?

Linux の id コマンドはどのようにしてユーザー グループを取得するのでしょうか、またはどの pam モジュールが使用されるのでしょうか?

sssd の構成は次のとおりです。

id_provider = ad
auth_provider = krb5
access_provider = ldap
enumerate = false
ignore_group_members = true;

ご覧のとおり、ユーザーとグループを列挙していないため、getent passwd広告getent groupのユーザーとグループは表示されません。

ここで、コマンドがユーザーとそのグループを表示する方法を理解したいと思いますid -a <aduser>。このコマンドは、指定されたユーザー名をリアルタイムで取得するか、SSSD キャッシュから取得することは理解しています。しかし、id コマンドにこの情報を SSSD から取得するように指示するものを正確に知りたいのです。

私の質問の背景情報:

私は、mysql 5.6 コミュニティ サーバーで LDAP 認証を設定しようとしており、そのためにローカル VM の percona サーバーからコピーした auth_pam.so を使用しています。

プロキシ ユーザーを作成しました:ad_dbaおよび LDAP グループにマッピングしました:mysql_dba そして、次の PAM サービスを作成しました:

# cat /etc/pamd./mysqld
#%PAM-1.0
auth    include  password-auth audit
account include password-auth audit

したがって、私の auth_string は次のようになります。mysqld, ad_dba=mysql_dba

ここで、プロキシ ユーザーに完全な権限を付与しました。ad_dba

ただし、私は自分の広告ユーザーでしか認証できず、権限がありません。グループ マッピングは機能しないというのが私の理解です。

mysql がユーザー グループのメンバーをどのようにチェックするのかわかりません。このグループ情報を取得するためだけに、PAM に特定のモジュールを追加できるかどうかを確認しようとしています。

編集-1:

ソース コードから、mysql プラグインが組み込みの Linux 関数を使用していることがわかりますgetgrouplistgetgrgid_r

したがって、必要なグループとユーザーをグループ データベースにリストする方法を見つけるか、コードを変更して再コンパイルする必要があります。私の質問は、この問題とは無関係になりました。しかし、ID がこの情報を取得する方法を知りたいという気持ちはまだ残っています。

答え1

このidコマンドは、C ライブラリに問い合わせることで、 : と同じソースからグループ情報を取得します。次に、の行getent groupを調べ、対応するライブラリ内の関数を使用して回答を取得します。group/etc/nsswitch.conflibnss_<name>.so

ここでは PAM ライブラリはまったく使用されません。

たとえば、あなたの状況では、nsswitch.conf少なくとも次のように言うべきです。

passwd: files sss
group: files sss

libnss_files.soすると、C ライブラリは最初に(および を参照/etc/passwd)を使用してクエリを実行し/etc/group、そこで回答が見つからない場合はlibnss_sss.so( を要求sssd)を使用します。

GNU C ライブラリ ( glibc) のすべてのユーザー名/グループ検索メカニズムはこのメカニズムを使用するため、idコマンドと MySQL の両方が最終的に同じ情報ソースを使用することになります。

しかし、あなたの場合、と の行には(または )nsswitch.confだけが含まれている可能性があります。ファイルを確認し、必要に応じて を追加する必要があります。filescompatpasswdgroupnsswitch.confsss

答え2

idは情報を取得するためにいくつかのコアユーティリティを使用します。id.cmgetgroups.hファイルをインクルードし、xgetgroups関数を呼び出していることがわかります。グループを取得... 追跡を続けると、呼び出される関数と、それらがどこからインクルードされるかを追跡できます。基本的に、グループ データベースから関連情報を取得するためのシステム コールがあり、理論的には、nsswitch.conf 情報を使用して構築され、「group:」行で指定されたソースからデータベースが構築されます。

関連情報