SSD構成は次のとおりです。
id_provider = ad
auth_provider = krb5
access_provider = ldap
enumerate = false
ignore_group_members = true;
ご覧のとおり、私たちはユーザーとグループを列挙しないので、広告にユーザーとグループを表示しませんgetent passwd
。getent group
id -a <aduser>
これで、コマンドがユーザーとそのグループを表示する方法を理解したいと思います。私が知る限り、与えられたユーザー名をリアルタイムで取得するか、SSDキャッシュから取得します。しかし、sssdからこの情報を取得するようにidコマンドに指示するものが正確に何であるかを知りたいです。
私の質問に関する背景情報:
私はmysql 5.6 Community Serverでldap認証を設定しようとしています。これを行うには、ローカル仮想マシンの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
ただし、ADユーザーを介してのみ認証できますが、権限はありません。私の理解は、グループマッピングが機能しないことです。
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
- https://linux.die.net/man/3/getgrgid_r
そのため、必要なグループとユーザーをグループデータベースに一覧表示する方法を見つけるか、コードを変更して再コンパイルする必要があります。私の質問は今この質問とは関係ありません。しかし、私はまだidがこの情報をどのように取得するのか知りたいです。
答え1
このid
コマンドは、次のソースからCライブラリを要求してグループ情報を取得します。getent group
その後、Cライブラリはその行を調べ、group
適切な/etc/nsswitch.conf
ライブラリの関数を使用してlibnss_<name>.so
答えを取得します。
PAMライブラリはここではまったく使用されていません。
たとえば、あなたの場合は、nsswitch.conf
少なくとも次のように話す必要があります。
passwd: files sss
group: files sss
これを行うと、Cライブラリは最初にusingを使用してクエリを実行し(およびをlibnss_files.so
調べます)、そこで答えが見つからない場合はwithを使用します(尋ねます)。/etc/passwd
/etc/group
libnss_sss.so
sssd
GNU Cライブラリ()glibc
のすべてのユーザー名/グループルックアップメカニズムはこのメカニズムを使用するため、このid
コマンドとMySQLは最終的に同じ情報ソースを使用します。
ただし、お客様の場合は、行に(または)のみをnsswitch.conf
含めることができます。ファイルを確認し、必要に応じて追加する必要があります。files
compat
passwd
group
nsswitch.conf
sss