По умолчанию пользователи PostgreSQL используют одноранговую аутентификацию в сокетах unix, где пользователь unix должен совпадать с пользователем PostgreSQL. Поэтому люди часто используют su
или sudo
стать postgres
суперпользователь.
Я часто вижу людей, использующих такие конструкции, как:
sudo su - postgres
скорее, чем
sudo -u postgres -i
и мне интересно, почему. Точно так же я видел:
sudo su - postgres -c psql
вместо того
sudo -u postgres psql
Без ведущего sudo
в su
версии имели бы смысл, если бы вы работали на старой платформе без sudo
. Но почему на менее доисторических UNIX или Linux вы бы использовали sudo su
?
sudo su
Нет никакой пользы от использования sudo su
, это анахроническая привычка тех времен, когда люди привыкли использовать su
. Люди начали лавировать sudo
впереди, когда дистрибутивы Linux перестали устанавливать пароль root и сделали sudo
единственный способ получить доступ к учетной записи root. Вместо того, чтобы менять свои привычки, они просто использовали sudo su
. (До недавнего времени я был одним из них, когда использовал коробки с sudoers
конфиги заставили меня поменять привычку).
sudo -u
Для оболочки входа sudo -u postgres -i
предпочтительнее sudo su - postgres
. Не требуется, чтобы у пользователя был root-доступ в /etc/sudoers
, им нужно только право стать пользователем postgres
. Это также позволяет улучшить контроль доступа.
Для выполнения команды
sudo -u postgres psql -c "SELECT 1"
превосходит альтернативу:
sudo su - postgres -c "psql -c \"SELECT 1\""
в том, что вам не нужно использовать двойные экранирующие кавычки и другие метасимволы оболочки, а также другие преимущества безопасности, связанные с отсутствием необходимости в root. Вероятно, вы случайно напишете:
sudo su - postgres -c psql -c "SELECT 1"
иногда, что не работает должным образом.
Наконец, гораздо проще установить переменные среды с помощью sudo
, например
sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster
чем через su
. (Здесь PATH
требуется настройка, чтобы initdb
могу найти правильный postgres
исполняемый файл).
Так. Забудь su
команда существует. Тебе это больше не нужно. Чтобы избавиться от этой привычки, присвойте ей псевдоним, который будет выводить ошибку. (Некоторые сценарии инициализации и установки пакетов по-прежнему используют su
так что вы не можете его удалить).
Смотрите также: