
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 関数を使用していることがわかりますgetgrouplist
。getgrgid_r
- 参考: https://github.com/percona/percona-server/blob/5.6/plugin/percona-pam-for-mysql/src/groups.c
- http://man7.org/linux/man-pages/man3/getgrouplist.3.html
- 参考:
したがって、必要なグループとユーザーをグループ データベースにリストする方法を見つけるか、コードを変更して再コンパイルする必要があります。私の質問は、この問題とは無関係になりました。しかし、ID がこの情報を取得する方法を知りたいという気持ちはまだ残っています。
答え1
このid
コマンドは、C ライブラリに問い合わせることで、 : と同じソースからグループ情報を取得します。次に、の行getent group
を調べ、対応するライブラリ内の関数を使用して回答を取得します。group
/etc/nsswitch.conf
libnss_<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
だけが含まれている可能性があります。ファイルを確認し、必要に応じて を追加する必要があります。files
compat
passwd
group
nsswitch.conf
sss