원격 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
문제를 풀다.