Как sudo предназначен для использования?

24

Я уже пытался настроить sudo, но мне не повезло с этим. Чем он отличается от su -l -c "x"? Кажется, что через файл конфигурации можно сделать так, чтобы пользователь мог иметь доступ только к определенным командам и многим другим. Я всегда считал sudoспособ объединить команду в команду как другого пользователя или группу. Поскольку такие дистрибутивы, как Ubuntu и Mint, упрощают задачу, предоставляя основному пользователю простой доступ к root с помощью пароля, я не совсем уверен, для чего он предназначен.

Как добавить пользователя в файл sudo, предоставив ему права на запуск только определенных команд в корне? Я также не хочу открывать дыры в безопасности.

Нафтули Кей
источник

Ответы:

16

Для основной операции - запуска команд с правами root - наиболее заметная разница между sudo и su в том, что sudo требует пароль вызывающего пользователя (т.е. ваш пароль), тогда как su требует пароль целевого пользователя (то есть пароль root). Последствия для безопасности подробно обсуждались в предыдущем вопросе: Какой самый безопасный способ получения привилегий root: sudo, su или login? ,

У Sudo есть дополнительные функции помимо su. В частности, когда у вас есть пароль пользователя, вы можете запустить любую команду от имени этого пользователя. С другой стороны, sudo можно настроить так, чтобы вызывающий его пользователь мог запускать только определенные команды, как некоторые другие пользователи. Это возможно, потому что sudo не требует какой-либо аутентификации (кроме, возможно, подтверждения того, что вы являетесь, введя свой пароль - но это немного отличается от аутентификации вашего пользователя для задачи).

Вы можете изменить конфигурацию sudo, выполнив visudoкоманду от имени пользователя root (никогда не редактируйте конфигурацию напрямую). Убедитесь , что переменная окружения EDITORили VISUALустановлен в вашем любимом редакторе или вы можете получить незнакомого редактора. Страница sudoersman немного краткая, но содержит примеры. Чтобы разрешить пользователю bobзапускаться /bin/foo(с любым количеством аргументов) и /bin/bar --safe(но не с любым другим аргументом) как root, используйте следующие строки:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe
Жиль "ТАК - перестань быть злым"
источник
2
sudoэто потрясающее изобретение
tshepang
1
Требует ли sudo пароль root или пароль root, зависит от конфигурации. Это может быть настроено любым способом.
Джонатан М Дэвис
3
@ Tshepang Аминь, брат. Если бы мне пришлось выпустить пароль root и объяснить специалистам службы поддержки о том, как использовать SU, а не делать / что-либо / иное, чем apache2ctl gracefulя думаю, я бы предпочел разрезать мои запястья и покончить с этим.
Шадур
6

Самым большим отличием является то, что sudoвам не нужен пароль root для запуска команды от имени root, как это было бы для вас su. Вам нужен пароль root, чтобы добавить кого-то в sudoersфайл, но после этого он может запустить все или некоторые (если вы его ограничили) как root, не требуя дополнительного пароля.

Другое отличие состоит в том, что, как вы заметили, sudoгораздо более точный контроль над тем, какие команды можно запускать.

Для получения подробной информации о формате sudoersфайла запустите man sudoers. Там вы найдете примеры, позволяющие запускать только определенные команды от имени пользователя root. Базовая структура каждой строки:

user_list host_list = cmd_list

cmd_list может включать сведения о том, на какого пользователя разрешено переключаться реальному пользователю. Например, вы можете позволить веб-мастеру переключиться на wwwroot, чтобы перезапустить apache, но не на root. Он также может включать другие параметры, например, требуется ли пароль пользователя перед переключением (это значение по умолчанию).

Пример строки может быть:

joe  ALL=(ALL) ALL

что означает: пусть joe запускает любую команду на любом хосте как любой пользователь. Более жесткая линия может быть:

joe  ALL=(operator) /usr/local/ops/

что означает: пусть joe выполнит любую команду в каталоге / usr / local / ops от имени пользователя «operator».

В конце справочной страницы sudoers приведено множество примеров.

Вы должны редактировать /etc/sudoersс помощью команды visudo. Это проверяет, является ли файл легальным, и помогает предотвратить его случайный взлом.

Дэйв Дженнингс
источник
Требуется ли пароль при использовании sudo, полностью зависит от того, как sudoersнастроен файл. Он может быть настроен на запрос пароля или настроен так, чтобы не требовать пароль.
Джонатан М Дэвис
Дополнительные общие приемы, позволяющие избежать изменения основного файла / etc / sudoers, потому что IDS просматривает его и потому что его форматирование может испортить ваш день: используйте фрагменты sudo как отдельные файлы в /etc/sudoers.d. Использование группы колес для людей допускается любой командой.
bbaassssiiee
2

В дополнение к другим ответам, sudo предоставляет средства ведения журналов, чтобы вы могли отслеживать, какие команды были запущены и кем. Это не в целях безопасности, поскольку злоумышленник, получивший доступ sudo, может стереть журнал. Тем не менее, очень полезно выяснить, что именно вы или какой-либо другой админ смотрели в тупик в 2 часа ночи на прошлой неделе.

JRW
источник
3
Это делается в целях безопасности, поскольку sudo поддерживает ведение журнала в системном журнале, который в любой основной настройке, связанной с безопасностью, будет настроен на ведение журнала на отдельном удаленном компьютере, так что в случае взлома системы журналы не могут быть созданы.
Arrowmaster
Атрибут файла только для добавления может помочь немного chattr + a / var / log / secure
bbaassssiiee