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 인증을 설정하려고 합니다. 이를 위해 로컬 가상 머신의 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

그러나 AD 사용자를 통해서만 인증할 수 있지만 권한은 없습니다. 내 이해는 그룹 매핑이 작동하지 않는다는 것입니다.

mysql이 그룹 멤버십을 어떻게 확인하는지 잘 모르겠습니다. 이 정보 세트를 검색하기 위해 PAM에 특정 모듈을 추가할 수 있는지 확인하려고 합니다.

편집 1:

소스 코드에서 mysql 플러그인이 내장 Linux 함수를 사용하고 있음을 알 수 있습니다 getgrouplist.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/grouplibnss_sss.sosssd

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

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

답변2

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

관련 정보