Каково различие между sudo su - пост-ГРЭС и sudo-u пост-ГРЭС?

Пользователи 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 ?

36
задан 2 June 2014 в 11:07
1 ответ

Забудьте 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, так что вы не можете его удалить).

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

40
ответ дан 28 November 2019 в 19:50

Теги

Похожие вопросы