libnss-pgsql2 - getent 그룹 실패

libnss-pgsql2 - getent 그룹 실패

원격 postgresql 데이터베이스에서 사용자와 그룹을 가져오기 위해 Linux 서버(ubuntu 16.04)에 pam 및 nss를 설정했습니다. 서버에 로그인하는 데 문제가 없지만 데이터베이스에서 그룹을 로드할 수 없습니다.

group_table 테이블에 항목이 있으면 getent group은 다음 메시지와 함께 실패합니다.'열 3이 0..2 범위를 벗어났습니다.'. nss-pgsql.conf에 사용된 SQL은 모두 괜찮은 것 같습니다.

나는 다음 데이터베이스 테이블을 사용합니다.

테이블 비밀번호

사용자 그룹

그룹 테이블

nss-pgsql.conf의 내용:

connectionstring        = hostaddr=123.456.789.10 dbname=nobodyexpects user=the password=spanishinquisition connect_timeout=1
getgroupmembersbygid    = SELECT username FROM passwd_table WHERE gid = $1
getpwnam        = SELECT username, passwd, gecos, homedir, shell, uid, gid FROM passwd_table WHERE username = $1
getpwuid        = SELECT username, passwd, gecos, homedir, shell, uid, gid FROM passwd_table WHERE uid = $1
allusers        = SELECT username, passwd, gecos, homedir, shell, uid, gid FROM passwd_table
getgrnam        = SELECT groupname, passwd, gid FROM group_table WHERE groupname = $1
getgrgid        = SELECT groupname, passwd, gid FROM group_table WHERE gid = $1
groups_dyn      = SELECT ug.gid FROM passwd_table JOIN usergroups ug USING (uid) where username = $1 and ug.gid <> $2
allgroups       = SELECT groupname, passwd, gid  FROM group_table

group_table 테이블에 데이터가 없으면 그룹 이름을 찾을 수 없으며 getent 그룹이 로컬 그룹과 함께 사용된다는 메시지가 나타납니다. 누군가가 도울 수 있기를 바랍니다.

답변1

group-SQL에는 추가 사용자 이름 목록이 필요한 것으로 나타났습니다. SQL을 다음으로 변경합니다.

getgrnam        = SELECT g.groupname, 'x' AS passwd, g.gid, ARRAY(SELECT p.username FROM passwd_table p INNER JOIN usergroups ug ON ug.uid=p.uid WHERE ug.gid = g.gid) AS members FROM group_table g WHERE g.groupname = $1
getgrgid        = SELECT g.groupname, 'x' AS passwd, g.gid, ARRAY(SELECT p.username FROM passwd_table p INNER JOIN usergroups ug ON ug.uid=p.uid WHERE ug.gid = g.gid) AS members FROM group_table g WHERE g.gid = $1
groups_dyn      = SELECT ug.gid FROM passwd_table JOIN usergroups ug USING (uid) where username = $1 and ug.gid <> $2
allgroups       = SELECT groupname, passwd, gid, ARRAY(SELECT p.username FROM passwd_table p INNER JOIN usergroups ug ON ug.uid=p.uid WHERE ug.gid = g.gid) AS members  FROM group_table

문제를 풀다.

관련 정보