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 커뮤니티 서버에서 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
그래서 필요한 그룹과 사용자를 그룹 데이터베이스에 나열하는 방법을 찾거나, 코드를 변경하고 다시 컴파일해야 합니다. 내 질문은 이제 이 질문과 관련이 없습니다. 하지만 나는 여전히 이드가 이 정보를 어떻게 얻는지 알고 싶어합니다.
답변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