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

問題を解決する。

おすすめ記事