Sudo: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
 
(не показано 5 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:sudo}}
{{DISPLAYTITLE:sudo}}
== Введение ==
== Введение ==
Команда '''sudo''' может использоваться <ref> Существует рекомендация известного эксперта в области ИТ-безопасности Александра Песляка (Solar Designer) [http://www.opennet.ru/openforum/vsluhforumID3/73378.html#18 ''не'' использовать sudo]</ref> для выполнения пользователем какой-либо команды, требующей права суперпользователя ('''root'''), то есть получение прав '''root''' для выполнения какой-либо команды  
Команда {{cmd|sudo}} может использоваться <ref> Существует рекомендация известного эксперта в области ИТ-безопасности Александра Песляка (Solar Designer) [http://www.opennet.ru/openforum/vsluhforumID3/73378.html#18 ''не'' использовать sudo]</ref> для выполнения пользователем какой-либо команды, требующей права суперпользователя ('''root'''), то есть получение прав '''root''' для выполнения какой-либо команды на время её выполнения.
на время её выполнения.


Перед выполнением команды '''sudo''' запрашивает пароль пользователя, а не пароль '''root''', как у команды '''su -'''.
Перед выполнением команды {{cmd|sudo}} запрашивает пароль пользователя, а не пароль '''root''', как у команды {{cmd|su -}}.


После выполнения '''sudo''' существует временной отрезок, в течение которого повторное выполнение команды '''sudo''' не требует пароль (что удобно для взлома вашего компьютера со стороны '''rootkits''' и хакерских атак).  
После выполнения {{cmd|sudo}} существует временной отрезок, в течение которого повторное выполнение команды {{cmd|sudo}} не требует пароль (что удобно для взлома вашего компьютера со стороны '''rootkits''' и хакерских атак).  


С другой стороны, команда '''sudo''' удобна для распределения прав между несколькими администраторами компьютера (например, кому можно обновлять и устанавливать программы, а кому настраивать работу аппаратуры компьютера), не предоставляя прав '''root''' на все другие действия и не выдавая пользователю пароля '''root'''
С другой стороны, команда {{cmd|sudo}} удобна для распределения прав между несколькими администраторами компьютера (например, кому можно обновлять и устанавливать программы, а кому настраивать работу аппаратуры компьютера), не предоставляя прав '''root''' на все другие действия и не выдавая пользователю пароля '''root'''.


== Особенности sudo в дистрибутивах ALT Linux ==
== Особенности sudo в дистрибутивах ALT Linux ==


Штатным способом временного получения прав '''root''' в большинстве дистрибутивах ALT Linux, является команда [[su| su -]].
Штатным способом временного получения прав '''root''' в большинстве дистрибутивах ALT Linux, является команда [[su| su -]].
Команда '''sudo''' в большинстве дистрибутивах ALT Linux требует предварительной настройки. Исключением является дистрибутив [[Simply]], где '''sudo''' уже настроена для первого пользователя.
Команда {{cmd|sudo}} в большинстве дистрибутивов ALT Linux требует предварительной настройки, так как в {{path|/etc/sudoers}} не описан ни один пользователь, включая '''root'''. Исключением является дистрибутив [[Simply]], где {{cmd|sudo}} уже настроена для первого пользователя. В дополнение к {{path|/etc/sudoers}} могут использоваться отдельные файлы из каталога {{path|/etc/sudoers.d/}}.


В большинстве дистрибутивах ALT Linux запрещено (через /etc/sudoers) выполнять команду '''sudo''' пользователю '''root'''.
Для ограничения прав на выполнение самой команды {{cmd|sudo}} используется особый механизм {{cmd|control}}.


Для ограничения прав на выполнение '''sudo''' используется особый механизм '''control'''
=== Настройка control для работы sudo ===
В ALT Linux {{pkg|sudo}} используется фреймворк [[control]], который задаёт права на выполнение команды {{cmd|sudo}}.


=== Настройка contol для работы sudo ===
С его помощью можно дать или отнять права на использование команды {{cmd|sudo}}.
В ALT Linux {{pkg|sudo}} используется фреймворк [[control]], который задаёт права на выполнение команды '''sudo'''.


С его помощью можно дать или отнять права на использование команды '''sudo'''.
Возможные значения '''control sudo''' можно посмотреть командой {{cmd|control sudo help}}:
<syntaxhighlight lang="bash">
$ su -
# control sudo help
</syntaxhighlight>


Возможные значения '''control sudo''' можно посмотреть командой '''control sudo help'''
На текущий момент существуют следующие '''политики''' у команды {{cmd|sudo}}:
<source lang=bash>
public — любой пользователь может получить доступ к команде /usr/bin/sudo
su -
wheelonly — только пользователи из группы wheel имеют право получить доступ к команде /usr/bin/sudo
control sudo help
restricted — только root имеет право выполнять команду /usr/bin/sudo
</source>


На текущий момент существуют следующие '''политики''' у команды '''sudo'''
Штатное состояние политики:  
<source lang=txt>
public: - любой пользователь может получить доступ к команде /usr/bin/sudo
wheelonly: только пользователи из группы wheel имеют право получить доступ к команде /usr/bin/sudo
restricted: только root имеет право выполнять команду /usr/bin/sudo
</source>


<syntaxhighlight lang="bash"># control sudo
wheelonly
</syntaxhighlight>


Штатное его состояние политики:
Означает что пользователь из группы '''wheel''' имеет  право запускать саму команду {{cmd|sudo}}, но не означает, что он через {{cmd|sudo}} может выполнить какую-то команду с правами '''root'''.


'''control sudo wheelonly'''
Для разрешения получения прав на выполнение конкретных команд с правами '''root''' надо отредактировать настройки правил {{path|/etc/sudoers}} <ref>Здесь используется редактор '''mcedit''', по умолчанию используется '''vi''' , но базовый навык работы с '''vi''' весьма полезен, для его получения установите и запустите команду {{cmd|vimtutor}}</ref> при помощи специальной команды {{cmd|visudo}} (которая не портит права на файлы):  
 
<syntaxhighlight lang="bash">
Означает что пользователь из группы '''wheel''' имеет  право запускать саму команду '''sudo''', но не означает, что он через '''sudo''' может выполнить какую-то команду с правами '''root'''
$ su -
 
# EDITOR=mcedit visudo
Для разрешения получения прав на выполнение конкретных команд с правами '''root''' надо отредактировать настройки правил '''/etc/sudoers''' <ref>Здесь используется редактор '''mcedit''', по умолчанию используется '''vi''' , но базовый навык работы с '''vi''' весьма полезен, для его получения установите и запустите команду '''vimtutor'''</ref> при помощи специальной команды '''visudo''' (которая не портит права на файлы) :  
</syntaxhighlight>
<source lang=bash>
su -
EDITOR=mcedit visudo
</source>


=== Грубая настройка sudo ===
=== Грубая настройка sudo ===
'''Раскомментировать''' (убрать '#' в начале строки) в /etc/sudoers строчку, дав права выполнять через '''sudo''' любую команду с любого компьютера (например через ssh), пользователям входящим в группу  
'''Раскомментировать''' (убрать '#' в начале строки) в {{path|/etc/sudoers}} строчку, дав права выполнять через {{cmd|sudo}} любую команду с любого компьютера (например через ssh), пользователям входящим в группу '''wheel''', запрашивая их пароль:
'''wheel''', запрашивая их пароль :


<pre>WHEEL_USERS ALL=(ALL) ALL</pre>
WHEEL_USERS ALL=(ALL) ALL


C точки зрения безопасности '''правильнее''' давать права на выполнение '''sudo''' не всей группе '''wheel''', а ''конкретному пользователю'', например '''petya''', входящего в группу с '''localhost''' :
С точки зрения безопасности '''правильнее''' давать права на выполнение {{cmd|sudo}} не всей группе '''wheel''', а ''конкретному пользователю'', например '''petya''', входящего в группу '''localhost''':


<pre>petya localhost=(ALL) ALL</pre>
petya localhost=(ALL) ALL


и не на все '''команды ''', а на те, которые ему '''необходимы ''' для быстрого получения прав '''root'''
и не на все '''команды ''', а на те, которые ему '''необходимы ''' для быстрого получения прав '''root''':
   
   
<pre>petya localhost=(ALL) /usr/bin/apt-get,/usr/bin/rpm,/sbin/fdisk</pre>
petya localhost=(ALL) /usr/bin/apt-get,/usr/bin/rpm,/sbin/fdisk


Это особенно важно потому, что после выполнения команды '''sudo''' с запросом пароля есть определённый временный отрезок, в течение которого '''sudo''' выполняет следующие команды, не запрашивая повторно пароль пользователя.
Это особенно важно потому, что после выполнения команды {{cmd|sudo}} с запросом пароля есть определённый временный отрезок, в течение которого {{cmd|sudo}} выполняет следующие команды, не запрашивая повторно пароль пользователя.


Также может понадобиться добавление требуемых пользователей в группу '''wheel''' (созданный при установке системы аккаунт добавляется в неё автоматически, (можно посмотреть в '''/etc/group''')
Также может понадобиться добавление требуемых пользователей в группу '''wheel''' (созданный при установке системы аккаунт добавляется в неё автоматически, можно посмотреть в {{path|/etc/group}}):


<source lang=bash>
<syntaxhighlight lang="bash">
gpasswd -a имя_пользователя wheel
# gpasswd -a имя_пользователя wheel
</source>
</syntaxhighlight>


{{Note|Для быстрого разрешения запуска произвольной программы пользователям группы {{term|wheel}} можно выполнить под правами суперпользователя: <source lang="text">control sudowheel enabled</source> Что является '''безрассудством''' с точки зрения безопасности ;-)}}
==== Быстрая настройка sudo  ====
<ref>Спасибо cas@</ref>
{{Note|Для быстрого разрешения запуска произвольной программы пользователям группы {{term|wheel}} можно выполнить под правами суперпользователя:
<syntaxhighlight lang="bash">
# control sudowheel enabled</syntaxhighlight>
Что является '''безрассудством''' с точки зрения безопасности ;-)}}


=== Тонкая настройка sudo ===
=== Тонкая настройка sudo ===
Для того, чтобы настроить работу '''sudo''', необходимо с применением административных привилегий отредактировать файл '''/etc/sudoers''' при помощи специальной команды '''visudo''' (подробности смотри выше) и внести туда записи о том, каким пользователям какие команды можно выполнять.
Для того, чтобы настроить работу '''sudo''', необходимо с применением административных привилегий отредактировать файл {{path|/etc/sudoers}} при помощи специальной команды {{cmd|visudo}} (подробности смотри выше) и внести туда записи о том, каким пользователям какие команды можно выполнять.
 


Пример:
Пример:
<pre>
  user1 ALL = (ALL) ALL
  user1 ALL = (ALL) ALL
  user1 ALL = NOPASSWD: /usr/bin/apt-get  update
  user1 ALL = NOPASSWD: /usr/bin/apt-get  update
</pre>


Позволяет пользователю '''user1''' запускать все приложения через '''sudo''' с правами суперпользователя ('''root''') с запросом пароля, а при выполнении команды '''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

[3]

Примечание: Для быстрого разрешения запуска произвольной программы пользователям группы wheel можно выполнить под правами суперпользователя:
# 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

Примечания

  1. Существует рекомендация известного эксперта в области ИТ-безопасности Александра Песляка (Solar Designer) не использовать sudo
  2. Здесь используется редактор mcedit, по умолчанию используется vi , но базовый навык работы с vi весьма полезен, для его получения установите и запустите команду vimtutor
  3. Спасибо cas@

Ссылки