
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 인증을 설정하려고 하는데 이를 위해 로컬 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
- https://linux.die.net/man/3/getgrgid_r
따라서 그룹 데이터베이스에 필요한 그룹과 사용자를 나열하거나 코드를 변경하고 다시 컴파일하는 방법을 찾아야 합니다. 내 질문은 이제 이 문제와 관련이 없어졌습니다. 하지만 나는 여전히 ID가 이 정보를 어떻게 얻는지 알고 싶습니다.
답변1
이 명령은 C 라이브러리에 요청하여 : id
과 동일한 소스에서 그룹 정보를 가져옵니다 . 그런 다음 C 라이브러리는 해당 라이브러리의 행을 보고 해당 라이브러리의 함수를 사용하여 답을 얻습니다.getent group
group
/etc/nsswitch.conf
libnss_<name>.so
여기서는 PAM 라이브러리가 전혀 사용되지 않습니다.
예를 들어, 귀하의 상황에서는 nsswitch.conf
최소한 다음과 같이 말해야 합니다.
passwd: files sss
group: files sss
그러면 C 라이브러리가 먼저 ( and를 libnss_files.so
조사할 것임 ) 을 사용하여 쿼리를 만들고 , 거기에서 답변을 찾을 수 없으면 (질문할 것임 )을 사용하게 됩니다./etc/passwd
/etc/group
libnss_sss.so
sssd
GNU C 라이브러리( glibc
)의 모든 사용자 이름/그룹 조회 메커니즘은 이 메커니즘을 사용하므로 id
명령과 MySQL 모두 결국 동일한 정보 소스를 사용하게 됩니다.
그러나 귀하의 경우에는 및 행 에 (또는 ) nsswitch.conf
만 포함될 수 있습니다 . 파일을 확인하고 필요한 경우 추가 해야 합니다 .files
compat
passwd
group
nsswitch.conf
sss
답변2
id는 일부 핵심 유틸리티를 사용하여 정보를 얻습니다. 당신이 보면id.cmgetgroups.h 파일이 포함되어 있고 xgetgroups 함수를 호출하는 것을 볼 수 있습니다.mgetgroups... 계속 추적하면 호출되는 함수와 해당 함수가 포함되는 위치를 추적할 수 있습니다. 기본적으로 그룹 데이터베이스에서 관련 정보를 검색하는 시스템 호출이 있습니다. 이론적으로는 "group: " 줄에 지정된 소스에서 db를 구성하기 위해 nsswitch.conf 정보를 사용하여 구축됩니다.