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

36

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

Крейг Рингер
источник

Ответы:

40

забывать 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поэтому вы не можете удалить их).

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

Крейг Рингер
источник