Sudo: различия между версиями
мНет описания правки |
|||
(не показано 36 промежуточных версий 8 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:sudo}} | {{DISPLAYTITLE:sudo}} | ||
== Введение == | |||
Команда {{cmd|sudo}} может использоваться <ref> Существует рекомендация известного эксперта в области ИТ-безопасности Александра Песляка (Solar Designer) [http://www.opennet.ru/openforum/vsluhforumID3/73378.html#18 ''не'' использовать sudo]</ref> для выполнения пользователем какой-либо команды, требующей права суперпользователя ('''root'''), то есть получение прав '''root''' для выполнения какой-либо команды на время её выполнения. | |||
Перед выполнением команды {{cmd|sudo}} запрашивает пароль пользователя, а не пароль '''root''', как у команды {{cmd|su -}}. | |||
После выполнения {{cmd|sudo}} существует временной отрезок, в течение которого повторное выполнение команды {{cmd|sudo}} не требует пароль (что удобно для взлома вашего компьютера со стороны '''rootkits''' и хакерских атак). | |||
С другой стороны, команда {{cmd|sudo}} удобна для распределения прав между несколькими администраторами компьютера (например, кому можно обновлять и устанавливать программы, а кому настраивать работу аппаратуры компьютера), не предоставляя прав '''root''' на все другие действия и не выдавая пользователю пароля '''root'''. | |||
== Особенности sudo в дистрибутивах ALT Linux == | |||
Штатным способом временного получения прав '''root''' в большинстве дистрибутивах ALT Linux, является команда [[su| su -]]. | |||
Команда {{cmd|sudo}} в большинстве дистрибутивов ALT Linux требует предварительной настройки, так как в {{path|/etc/sudoers}} не описан ни один пользователь, включая '''root'''. Исключением является дистрибутив [[Simply]], где {{cmd|sudo}} уже настроена для первого пользователя. В дополнение к {{path|/etc/sudoers}} могут использоваться отдельные файлы из каталога {{path|/etc/sudoers.d/}}. | |||
Для ограничения прав на выполнение самой команды {{cmd|sudo}} используется особый механизм {{cmd|control}}. | |||
=== Настройка control для работы sudo === | |||
В ALT Linux {{pkg|sudo}} используется фреймворк [[control]], который задаёт права на выполнение команды {{cmd|sudo}}. | |||
С его помощью можно дать или отнять права на использование команды {{cmd|sudo}}. | |||
С помощью | |||
Возможные значения '''control sudo''' можно посмотреть командой | Возможные значения '''control sudo''' можно посмотреть командой {{cmd|control sudo help}}: | ||
< | <syntaxhighlight lang="bash"> | ||
su - | $ su - | ||
control sudo help | # control sudo help | ||
</ | </syntaxhighlight> | ||
На текущий момент существуют следующие '''политики''' у команды | На текущий момент существуют следующие '''политики''' у команды {{cmd|sudo}}: | ||
public — любой пользователь может получить доступ к команде /usr/bin/sudo | |||
public | wheelonly — только пользователи из группы wheel имеют право получить доступ к команде /usr/bin/sudo | ||
wheelonly | restricted — только root имеет право выполнять команду /usr/bin/sudo | ||
restricted | |||
Штатное состояние политики: | |||
<syntaxhighlight lang="bash"># control sudo | |||
wheelonly | |||
</syntaxhighlight> | |||
Для разрешения | Означает что пользователь из группы '''wheel''' имеет право запускать саму команду {{cmd|sudo}}, но не означает, что он через {{cmd|sudo}} может выполнить какую-то команду с правами '''root'''. | ||
< | |||
su - | Для разрешения получения прав на выполнение конкретных команд с правами '''root''' надо отредактировать настройки правил {{path|/etc/sudoers}} <ref>Здесь используется редактор '''mcedit''', по умолчанию используется '''vi''' , но базовый навык работы с '''vi''' весьма полезен, для его получения установите и запустите команду {{cmd|vimtutor}}</ref> при помощи специальной команды {{cmd|visudo}} (которая не портит права на файлы): | ||
EDITOR=mcedit visudo | <syntaxhighlight lang="bash"> | ||
</ | $ su - | ||
# EDITOR=mcedit visudo | |||
</syntaxhighlight> | |||
=== Грубая настройка sudo === | === Грубая настройка sudo === | ||
''' | '''Раскомментировать''' (убрать '#' в начале строки) в {{path|/etc/sudoers}} строчку, дав права выполнять через {{cmd|sudo}} любую команду с любого компьютера (например через ssh), пользователям входящим в группу '''wheel''', запрашивая их пароль: | ||
WHEEL_USERS ALL=(ALL) ALL | |||
С точки зрения безопасности '''правильнее''' давать права на выполнение {{cmd|sudo}} не всей группе '''wheel''', а ''конкретному пользователю'', например '''petya''', входящего в группу '''localhost''': | |||
petya localhost=(ALL) ALL | |||
и не на все '''команды ''', а на те, которые ему '''необходимы ''' для быстрого получения прав '''root''' | и не на все '''команды ''', а на те, которые ему '''необходимы ''' для быстрого получения прав '''root''': | ||
petya localhost=(ALL) /usr/bin/apt-get,/usr/bin/rpm,/sbin/fdisk | |||
Это особенно важно | Это особенно важно потому, что после выполнения команды {{cmd|sudo}} с запросом пароля есть определённый временный отрезок, в течение которого {{cmd|sudo}} выполняет следующие команды, не запрашивая повторно пароль пользователя. | ||
Также может понадобиться | Также может понадобиться добавление требуемых пользователей в группу '''wheel''' (созданный при установке системы аккаунт добавляется в неё автоматически, можно посмотреть в {{path|/etc/group}}): | ||
{{Note|Для быстрого разрешения запуска произвольной программы пользователям группы {{term|wheel}} можно выполнить под правами суперпользователя: < | <syntaxhighlight lang="bash"> | ||
# gpasswd -a имя_пользователя wheel | |||
</syntaxhighlight> | |||
==== Быстрая настройка sudo ==== | |||
<ref>Спасибо cas@</ref> | |||
{{Note|Для быстрого разрешения запуска произвольной программы пользователям группы {{term|wheel}} можно выполнить под правами суперпользователя: | |||
<syntaxhighlight lang="bash"> | |||
# control sudowheel enabled</syntaxhighlight> | |||
Что является '''безрассудством''' с точки зрения безопасности ;-)}} | |||
=== Тонкая настройка sudo === | === Тонкая настройка sudo === | ||
Для того, чтобы настроить работу '''sudo''', необходимо с применением административных привилегий отредактировать файл {{path|/etc/sudoers}} при помощи специальной команды | Для того, чтобы настроить работу '''sudo''', необходимо с применением административных привилегий отредактировать файл {{path|/etc/sudoers}} при помощи специальной команды {{cmd|visudo}} (подробности смотри выше) и внести туда записи о том, каким пользователям какие команды можно выполнять. | ||
Пример: | Пример: | ||
user1 ALL = (ALL) ALL | user1 ALL = (ALL) ALL | ||
user1 ALL = NOPASSWD: /usr/bin/apt-get update | user1 ALL = NOPASSWD: /usr/bin/apt-get update | ||
Позволяет пользователю '''user1''' запускать все приложения через {{cmd|sudo}} с правами суперпользователя ('''root''') с запросом пароля, а при выполнении команды {{cmd|sudo apt-get update}} пароль не будет спрашиваться. | Позволяет пользователю '''user1''' запускать все приложения через {{cmd|sudo}} с правами суперпользователя ('''root''') с запросом пароля, а при выполнении команды {{cmd|sudo apt-get update}} пароль не будет спрашиваться. | ||
Полная документация по формату конфигурационного файла находится в '''man-странице <tt>sudoers</tt>''', начинать читать может быть проще с секции '''EXAMPLES'''. | Полная документация по формату конфигурационного файла находится в '''man-странице <tt>sudoers</tt>''', начинать читать может быть проще с секции '''EXAMPLES'''. | ||
== Хранение правил sudo в LDAP (MSAD/SAMBA) == | |||
Отдельная статья - [[Sudo/Domain]] | |||
== Примечания == | == Примечания == |
Текущая версия от 11:13, 5 декабря 2023
Введение
Команда sudo может использоваться [1] для выполнения пользователем какой-либо команды, требующей права суперпользователя (root), то есть получение прав root для выполнения какой-либо команды на время её выполнения.
Перед выполнением команды sudo запрашивает пароль пользователя, а не пароль root, как у команды su -.
После выполнения sudo существует временной отрезок, в течение которого повторное выполнение команды sudo не требует пароль (что удобно для взлома вашего компьютера со стороны rootkits и хакерских атак).
С другой стороны, команда sudo удобна для распределения прав между несколькими администраторами компьютера (например, кому можно обновлять и устанавливать программы, а кому настраивать работу аппаратуры компьютера), не предоставляя прав root на все другие действия и не выдавая пользователю пароля root.
Особенности sudo в дистрибутивах ALT Linux
Штатным способом временного получения прав root в большинстве дистрибутивах ALT Linux, является команда su -. Команда sudo в большинстве дистрибутивов ALT Linux требует предварительной настройки, так как в /etc/sudoers не описан ни один пользователь, включая root. Исключением является дистрибутив Simply, где sudo уже настроена для первого пользователя. В дополнение к /etc/sudoers могут использоваться отдельные файлы из каталога /etc/sudoers.d/.
Для ограничения прав на выполнение самой команды sudo используется особый механизм control.
Настройка control для работы sudo
В ALT Linux sudo используется фреймворк control, который задаёт права на выполнение команды sudo.
С его помощью можно дать или отнять права на использование команды sudo.
Возможные значения control sudo можно посмотреть командой control sudo help:
$ su -
# control sudo help
На текущий момент существуют следующие политики у команды sudo:
public — любой пользователь может получить доступ к команде /usr/bin/sudo wheelonly — только пользователи из группы wheel имеют право получить доступ к команде /usr/bin/sudo restricted — только root имеет право выполнять команду /usr/bin/sudo
Штатное состояние политики:
# control sudo
wheelonly
Означает что пользователь из группы wheel имеет право запускать саму команду sudo, но не означает, что он через sudo может выполнить какую-то команду с правами root.
Для разрешения получения прав на выполнение конкретных команд с правами root надо отредактировать настройки правил /etc/sudoers [2] при помощи специальной команды visudo (которая не портит права на файлы):
$ su -
# EDITOR=mcedit visudo
Грубая настройка sudo
Раскомментировать (убрать '#' в начале строки) в /etc/sudoers строчку, дав права выполнять через sudo любую команду с любого компьютера (например через ssh), пользователям входящим в группу wheel, запрашивая их пароль:
WHEEL_USERS ALL=(ALL) ALL
С точки зрения безопасности правильнее давать права на выполнение sudo не всей группе wheel, а конкретному пользователю, например petya, входящего в группу localhost:
petya localhost=(ALL) ALL
и не на все команды , а на те, которые ему необходимы для быстрого получения прав root:
petya localhost=(ALL) /usr/bin/apt-get,/usr/bin/rpm,/sbin/fdisk
Это особенно важно потому, что после выполнения команды sudo с запросом пароля есть определённый временный отрезок, в течение которого sudo выполняет следующие команды, не запрашивая повторно пароль пользователя.
Также может понадобиться добавление требуемых пользователей в группу wheel (созданный при установке системы аккаунт добавляется в неё автоматически, можно посмотреть в /etc/group):
# gpasswd -a имя_пользователя wheel
Быстрая настройка sudo
# control sudowheel enabled
Тонкая настройка sudo
Для того, чтобы настроить работу sudo, необходимо с применением административных привилегий отредактировать файл /etc/sudoers при помощи специальной команды visudo (подробности смотри выше) и внести туда записи о том, каким пользователям какие команды можно выполнять.
Пример:
user1 ALL = (ALL) ALL user1 ALL = NOPASSWD: /usr/bin/apt-get update
Позволяет пользователю user1 запускать все приложения через sudo с правами суперпользователя (root) с запросом пароля, а при выполнении команды sudo apt-get update пароль не будет спрашиваться.
Полная документация по формату конфигурационного файла находится в man-странице sudoers, начинать читать может быть проще с секции EXAMPLES.
Хранение правил sudo в LDAP (MSAD/SAMBA)
Отдельная статья - Sudo/Domain
Примечания
- ↑ Существует рекомендация известного эксперта в области ИТ-безопасности Александра Песляка (Solar Designer) не использовать sudo
- ↑ Здесь используется редактор mcedit, по умолчанию используется vi , но базовый навык работы с vi весьма полезен, для его получения установите и запустите команду vimtutor
- ↑ Спасибо cas@