Яка різниця між 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 перестали встановлювати корінний пароль і зробили sudoєдиний спосіб отримати доступ до кореневого облікового запису. Замість того, щоб змінити свої звички, вони просто використовували 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тому ви не можете їх видалити).

Дивись також:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.