следует использовать sudo или просто su root в управлении сервером?

8

Какой подход лучше?

Для использования на рабочем столе кажется, что sudo лучше, так как:

  • Я могу иметь более последовательную историю как обычный пользователь
  • Не нужно запоминать два пароля, что особенно актуально, когда я не занимаюсь административными делами регулярно.
  • Не нужно создавать дополнительную учетную запись root при установке.

Но как насчет управления сервером?

На сервере обычно у вас уже есть созданная учетная запись root, и вы, вероятно, будете часто выполнять административные функции. Так что преимущества sudo, похоже, больше не держатся.

Более того, в большинстве дистрибутивов легко настроить su в командной строке, просто добавьте пользователя в группу wheel. (Вы можете даже пропустить -G wheelпри useraddзагрузке.) Таким образом, настройка su может быть легко автоматизирована в сценарии оболочки.

Но для судо? Вам нужно сначала добавить пользователя, чем запустить в visudoинтерактивном режиме. Это плохо, так как вы не можете автоматизировать его в сценарии оболочки.

(Ну, вы можете. Например,

echo '%wheel    ALL=(ALL)   ALL' >> /tmp/sudoers.tmp
cp /etc/sudoers /etc/sudoers.old
visudo -c -f /tmp/sudoers.tmp &&  mv /tmp/sudoers.tmp /etc/sudoers

Но, по крайней мере, это не так просто.)

Так что ты думаешь? Для серверной среды, что вы предпочитаете, sudo или su root?

weakish
источник
Это должна быть вики, иначе она может быть закрыта, потому что она слишком субъективна.
Джон Гарденье
Я не думаю, что это слишком субъективно. Как показывает превосходный ответ Raphink, в многопользовательской среде предпочтительным является sudo.
слабый
Я не думаю, что это вообще субъективный вопрос. Дело не в том, нравится ли вам sudo или нет, а в том, адаптирован ли он для одного или другого использования.
ℝaphink
Кстати, я также немного удивлен вашей visudo -cкомандой, так как считаю, что вам нужно visudo -c -fпроверить определенный файл.
ℝaphink
@ Да, ты абсолютно прав. Я отредактировал свой вопрос.
слабое

Ответы:

16

Учетная запись root необходима на серверах, но я предпочитаю предоставлять права sudo, особенно когда на компьютере несколько пользователей, и это по нескольким причинам:

  • Я не использую sudo только для предоставления ВСЕХ прав для ВСЕХ команд, но также для предоставления определенных прав как конкретных пользователей определенным командам.
  • Назначая пользователей в функциональные группы, я могу управлять их правами с этими группами в sudoers вместо индивидуального управления пользователями.
  • Доступ к sudo регистрируется в auth.log по умолчанию, включая информацию о том, какие пользователи использовали sudo и в какое время.
  • sudo позволяет управлять конфигурацией для нескольких машин одним файлом.
  • каждый пользователь хранит свой собственный пароль, поэтому нет необходимости менять пароль root, когда пользователь уходит.

Что касается управления им с помощью скриптов, новые версии sudo поддерживают включения, но я предпочитаю использовать puppet и устанавливать классы, объединяющие содержимое sudoers.

Puppet также может быть связан с Augeas для управления файлом sudoers.

ℝaphink
источник
3
На самом деле я не рассматриваю случай с несколькими пользователями. Вы правы, очевидно, что sudo является победителем, когда есть несколько пользователей. Но для одного пользователя я все еще думаю, что su достаточно. PS Спасибо за упоминание марионетки. Просто раньше не знал о таком милом инструменте.
слабый
Кстати, если вы хотите проверить файл sudoers перед его развертыванием с помощью puppet, у меня есть функция validate, которая делает это.
ℝaphink
1
При использовании sudo root даже не должен иметь действительный пароль, поскольку вам нужно только полагаться на пароли пользователей. Наряду с тем, что нет необходимости менять пароль root, когда кто-то уходит, у вас также есть на один пароль меньше, который можно угадать / взломать / взломать.
Шеннон Нельсон
@ShannonNelson Я полагаю, что они упоминают пользователя root и пароль, поскольку арендованные серверы обычно предоставляются с ними.
AJP
1

Вы, кажется, усложняете себе задачу (когда речь идет об управлении / etc / sudoers). Просто

echo '%wheel    ALL=(ALL)   ALL' >> /etc/sudoers

было бы достаточно. Все, что делает visudo, - это блокирует файл от одновременных изменений и гарантирует, что файл все еще анализируется правильно.

rodjek
источник
Я использую visudo -c для проверки файла, если что-то не так. (Хотя это не должно быть. Но, возможно, когда я редактирую сценарий, я пропустил набранный символ, или, что еще хуже, включил какой-то специальный невидимый специальный символ.) Но я согласен, достаточно однострочного решения.
слабый