Назад | Перейти на главную страницу

В чем разница между sudo su - postgres и sudo -u postgres?

По умолчанию пользователи 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 так что вы не можете его удалить).

Смотрите также: