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
используется, что я считаю распространенным случаем), он не может делать свою работу.