Нет пароля для postgresql superuser
После установки PostgreSQL 9.1 на Ubuntu 12.04 я установил пароль для учетной записи суперпользователя postgres. Я хочу, чтобы все пользователи вводили свой пароль при входе в систему. Вот почему я настроил pg_hba.conf следующим образом:
#Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
После внесения этих изменений я перезапустил postgresql. Когда я делаю этот psql -U testuser
меня спрашивают о пароле, но когда я psql -U testuser
систему с учетной записью postgres, например psql -U postgres
я не получаю приглашение к паролю и не вошел в систему. Если я заставляю приглашение пароля с psql -U postgres -W
Я могу войти, набрав правильный пароль или не набрав ничего вообще. Ввод неправильного пароля будет отклонен.
Может ли кто-нибудь объяснить мне, почему это происходит?
Относительно примечания: я вижу много примеров, когда люди используют идентификатор в качестве метода проверки подлинности для пользователя postgres, утверждая, что для того, чтобы стать пользователем postgres, нужен корневой пароль машины. Я предполагаю, что аргументация состоит в том, что если злоумышленник получает root-доступ, все равно будет сделано. Я бы предпочел войти в систему с паролем, хотя, который не совпадает с паролем root. Я предпочитаю иметь разные пароли для разных вещей. Это разумно?
Вывод grep '^[^#]' pg_hba.conf
local all postgres md5
local all all md5
host all all 127.0.0.1/32 md5
Ответы
Ответ 1
Ваш pg_hba.conf
действительно требует пароль для подключений сокетов unix, но есть еще пути вокруг него, которые вы должны проверить:
-
файл .pgpass
в домашнем каталоге postgres, содержащем пароль (также проверьте переменную среды PGPASSFILE для нестандартного пути).
-
можно задать переменную среды PGPASSWORD.
Также существует вероятность того, что вы редактируете неправильный файл pg_hba.conf. При подключении в качестве постгеров правильный путь может быть получен для проверки командой SHOW hba_file
SQL.
Кроме того, вы можете проверить файл журнала, /var/log/postgresql/postgresql-9.1-main.log
чтобы подтвердить, что файлы конфигурации перезагружаются, когда вы его запрашиваете, и искать подозрительное сообщение во время аутентификации.
Что касается причины, по которой соединения без пароля с пользователем postgres являются общими, у debian PG-9.1 pg_hba.conf
есть этот комментарий о запрете их:
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local all postgres peer
Поскольку Debian и Ubuntu используют одни и те же пакеты postgres, это относится и к Ubuntu.
Ответ 2
Повторяю ваше странное поведение, я думаю, что вы пропустили строку pg_hba.conf
, специфичную для пользователя postgres
. Пожалуйста, покажите результат:
grep '^[^#]' pg_hba.conf
Что касается ident vs md5; лично я предпочитаю идентификатор для интерактивного использования в разработке, и это нормально для обычных пользователей, но я не думаю, что предоставление доступа к пользователю postgres
через sudo
- отличная идея. Оба sudo -u postgres psql
и psql -u postgres -W
предоставляют доступ к роли суперпользователя postgres и, следовательно, к файловой системе как к пользователю базы данных. Ни один из них не требует пароля root, и sudo
легко может быть ограничено с помощью sudoers
чтобы ограничить вызывающего пользователя простым запуском psql
. Тем не менее, с sudo -u postgres psql
клиентский код работает как postgres
тоже, поэтому он имеет большую поверхность атаки, и всегда есть шанс, что пользователь sudoer
способ обойти ваши ограничения sudoer
.
Я использую ident
в dev, md5
в процессе производства.