Пользователи 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
. Но почему на меньше, чем prehisoric 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
существует. Она вам больше не нужна. Чтобы сломать привычку, псевдоним - что-то, что напечатает ошибку. (Некоторые сценарии установки init и пакетов все еще используют su
, так что вы не можете его удалить).
Смотрите также: