Linux의 id 명령은 어떻게 사용자 그룹을 가져오거나 어떤 pam 모듈이 사용됩니까?

Linux의 id 명령은 어떻게 사용자 그룹을 가져오거나 어떤 pam 모듈이 사용됩니까?

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_dbaldap 그룹으로 매핑했습니다. 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

따라서 그룹 데이터베이스에 필요한 그룹과 사용자를 나열하거나 코드를 변경하고 다시 컴파일하는 방법을 찾아야 합니다. 내 질문은 이제 이 문제와 관련이 없어졌습니다. 하지만 나는 여전히 ID가 이 정보를 어떻게 얻는지 알고 싶습니다.

답변1

이 명령은 C 라이브러리에 요청하여 : id과 동일한 소스에서 그룹 정보를 가져옵니다 . 그런 다음 C 라이브러리는 해당 라이브러리의 행을 보고 해당 라이브러리의 함수를 사용하여 답을 얻습니다.getent groupgroup/etc/nsswitch.conflibnss_<name>.so

여기서는 PAM 라이브러리가 전혀 사용되지 않습니다.

예를 들어, 귀하의 상황에서는 nsswitch.conf최소한 다음과 같이 말해야 합니다.

passwd: files sss
group: files sss

그러면 C 라이브러리가 먼저 ( and를 libnss_files.so조사할 것임 ) 을 사용하여 쿼리를 만들고 , 거기에서 답변을 찾을 수 없으면 (질문할 것임 )을 사용하게 됩니다./etc/passwd/etc/grouplibnss_sss.sosssd

GNU C 라이브러리( glibc)의 모든 사용자 이름/그룹 조회 메커니즘은 이 메커니즘을 사용하므로 id명령과 MySQL 모두 결국 동일한 정보 소스를 사용하게 됩니다.

그러나 귀하의 경우에는 및 행 에 (또는 ) nsswitch.conf만 포함될 수 있습니다 . 파일을 확인하고 필요한 경우 추가 해야 합니다 .filescompatpasswdgroupnsswitch.confsss

답변2

id는 일부 핵심 유틸리티를 사용하여 정보를 얻습니다. 당신이 보면id.cmgetgroups.h 파일이 포함되어 있고 xgetgroups 함수를 호출하는 것을 볼 수 있습니다.mgetgroups... 계속 추적하면 호출되는 함수와 해당 함수가 포함되는 위치를 추적할 수 있습니다. 기본적으로 그룹 데이터베이스에서 관련 정보를 검색하는 시스템 호출이 있습니다. 이론적으로는 "group: " 줄에 지정된 소스에서 db를 구성하기 위해 nsswitch.conf 정보를 사용하여 구축됩니다.

관련 정보