PAM-аутентификация + pgAdmin завершается неудачно удаленно, но локально работает

Я пытался настроить postgresql с PAM на сервере Red Hat, чтобы я мог получить удаленный доступ к серверу через pgAdmin и использовать локальную (серверную) аутентификацию с PAM.

Я отредактировал файл pg_hba.conf и изменил соответствующую строку:

host postgres all 0.0.0.0/0 md5

и добавил это:

host    pam_testing       all  0.0.0.0/0   pam    pamservice=postgresql95

Более того, я создал пользователя базы данных с тем же именем пользователя, которое я использую для входа в систему с помощью putty (без пароля, просто создайте пользователя xxx)

Когда я пытаюсь выполнить удаленный вход с помощью pgAdmin в базу данных postgres (используя md5) с моим пользователем, все работает гладко.

Но когда я пытаюсь подключиться (также удаленно, с помощью pgAdmin) к базе данных pam_testing с моим именем пользователя на сервере (к которому я вхожу через ssh с использованием putty) и выдаю пароль, я получаю следующую ошибку:

Ошибка подключения к серверу: FATAL: аутентификация PAM не выполнена для пользователя XXX

НО! Когда я вхожу локально в pam_testing при подключении через putty, это работает! Мой системный пользователь вошел в систему и прошел проверку подлинности без каких-либо проблем. И это происходит только для пользователей, которых я добавил в базу данных, используя create user.

Я предполагаю, что это должно быть какая-то проблема аутентификации (возможно, с сервером? Он принадлежит компании, и я не знаю, какие другие методы аутентификации он использует), но я не уверен. Есть идеи?

Система: Red Hat 6,8, Postgresql: 9,5

Заранее спасибо!

1 ответ

Делать systemctl | grep unix_chkpwd и если вы видите такие строки

unix_chkpwd[13081]: check pass; user unknown
unix_chkpwd[13081]: password check failed for user (<username>)

тогда вы столкнулись с той же проблемой, что и я.

Для ее решения нужно дать postgres пользовательские права на чтение /etc/shadow файл. Вы можете сделать это через acl: setfacl -m g:postgres:r /etc/shadowили путем создания некоторой группы, давая ей это разрешение, а затем добавляя postgres к этому. Тогда делай systemctl restart postgresql.service,

Механизм аутентификации с помощью pam описан в этом посте. Ключевой момент заключается в следующем: unix_chkpwd запускается под uid процесса, который хочет аутентифицировать кого-то, поэтому, если это не root (и /etc/shadow используется, что я считаю распространенным случаем), он не может делать свою работу.

Другие вопросы по тегам