Open Way | Systems | Distro | Shell | Desktop | Applications
Network | Development | Download | OfftopicКарта сайта
FreeNotesФорум POSIX.ru
На главную страницу

Sudo

Первая команда, которую нужно освоить пользователю Kubuntu (да и Ubuntu) - это sudo. Впрочем, не повредит она и пользователю любого другого дистрибутива Linux или BSD системы, так как делает всякие настроечные и установочные мероприятия проще и безопасней. Однако для убунтийца знание ее - практически необходимость: в этом семействе дистрибутивов по умолчанию суперпользовательского аккаунта нет, и любое действие по установке программ или настройке чего бы то ни было, делается через sudo.

Итак, sudo - это программа для получения прав суперпользователя (или любого иного пользователя), подобная su. Отличий от последней - два:

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

В элементарном виде применение команды sudo - элементарно же просто: требуется лишь указать в качестве ее аргумента имя команды, требующей исполнения, со всеми необходимыми последней опциями и аргументами. После этого запрашивается пароль суперпользователя (для упрощения рассмотрим пока только такую ситуацию) - и команда исполняется. То есть, чтобы установить deb-пакет, нужно сделать следующее:

$ sudo dpkg -i pkg_name

Кстати, если от лица суперпользователя нужно выполнить подряд несколько команд, делать это следует быстро - введенный первый раз пароль "действует" в течении 5 минут. То есть в течении этого времени в ответ на команду sudo пароль запрашиваться не будет.

Аналогичным образом пользователь может отредактировать общесистемный конфигурационный файл, например:

$ sudo nano -w /etc/fstab

Впрочем, для редактирования общесистменых конфигов предназначена специальная команда sudoedit (или просто sudo с опцией -e). Она не требует указания имени вызываемого для этой цели редактора: в качестве такового используется значение переменной EDITOR из окружения того суперпользователя. Если эта переменная не определена - а это обычно делается в файлах типа /root/.bashrc (для bash), /root/.profile (для sh) и так далее, - для редактирования вызываается редактор Vim (в своей упрощенной ипостаси, эмулирующей классический vi).

Как это ни парадоксально, команда sudo не исключает запуска администраторского сеанса внутри обычного пользовательского. Потому что с ее помощью можно запустить ту же команду su:

$ sudo su

И это - даже в Ubuntu/Kubuntu, где root-аккаунта как бы и нет; точнее, по умолчанию нет его пароля. Но использование sudo делает его ненужным даже для команды su. Но и задать пароль суперпользователя не запрещается - ведь для этого достаточно дать команду

$ sudo passwd

чтобы в дальнейшем использовать su обычным образом.

Впрочем, и тут команда sudo предусматривает "идеологически правильный" метод, и даже не один. Это - опции -i и -s, имитирующие, хотя и чуть-чуть по разному, login shell суперпользователя и его переменные окружения (PATH, EDITOR и так далее). То есть после команды

$ sudo -s 

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

$ su -

Причем на неограниченный срок и с полным правом выполнять все административные команд.

Команда sudo имеет еще немало опций, но мы на них останавливаться не будем - детали, как обычно, легко посмотреть в man sudo. А зададимся лучше вопросами - любой ли пользователь может получить права администратора через команду sudo, и все ли действия по администрированию он может ее посредством выполнить?

Если говорить конкретно об Ubuntu/Kubuntu в установке по умолчанию - оба вопроса получат положительный ответ. А вообще это зависит от настроек программы, которые описываются в файле /etc/sudoers. И в нем можно задать правила, допускающие исполнение определенных команд только отдельным пользователям. В обощенном виде это выглядит так:

username        host = command

Здесь, как нетрудно догадаться, username - имя пользователя, для которого устанавливается данное правило, host - имя машины, с которой он может к этому правилу прибегнуть, command - конкретная команда, использование которой разрешается данному пользователю с данной машины. Команда должна указываться с указанием полного абсолютного пути (то есть /sbin/fdisk, а не fdisk). Поле описания команд может включать несколько значений, разделенных запятыми, например:

username	ALL = /sbin/fdisk, /bin/mount

В Kubuntu по умолчанию правила доступа пользователей к административным привелегиям описываются так:

# User privilege specification
root    ALL=(ALL) ALL

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) ALL

То есть пользователь root, как ему и положено, может исполнять любые команды с любых хостов. А вот получить права его могут только пользоваетли, входящие в группу admin (аналог группы wheel в BSD-системах и некоторых дистрибутивах Linux). Пользователь, создаваемый в ходе обычной установки, автоматически становится членом этой группы - и потому все административные права ему доступны без всяких дальнейших настроек.

К слову сказать - при экспертной установке Kubuntu второй из приведенных строк в файле /etc/sudoers нет. Более того, нет и самой группы admin. Именно этим, судя по всему, и вызываются осложнения с доступом к утилитам администрирования, о которых я говорил в одной из прежних заметок. И, соответственно, избавление от этих осложнений - в редактировании /etc/sudoers, создании группы admin и наделении ее должными правами.

Файл /etc/sudoers - обычный текстовый, и, соответственно, его можно редактировать в обычном текстовом редакторе (или, скажем, средствами ed или sed). Однако при этом существует определенный риск что-нибудь напортачить (за счет обычных опечаток), вплоть до того, что полностью закрыть самому себе доступ к привилегиям суперпользователя. Конечно, ситуации эти поправимы - например, через перезагрузку в однопользовательском режиме. Однако, лучше в них не попадать. И потому более надежным средством модификации /etc/sudoers будет использование специально предназначенной для того утилиты - visudo.

Утилита visudo не делает ничего сверхъестественного - она просто открывает /etc/sudoers в текстовом редакторе, описываемом переменной EDITOR суперпользователя (если таковая не определна, им будет опять же vi - отсюда и название) и позволяет его отредактировать обычным образом, после чего выйти из редактора с сохранением результатов штатными его средствами. Однако перед этим результат редактирования проверяется на корректность. И если обнаруживается нарушение синтаксиса, принятого для /etc/sudoers, выдается соответствующее предупреждение. После которого можно вернуться к редактированию, отказаться от сделанных изменений или все-таки принять их (разумеется, под личную ответственность).

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

Впрочем, тут уже начинаются тонкости всамделишнего администрирования. А для пользователя настольной персоналки вариант настройки /etc/sudoers, предлагаемый в Kubuntu по умолчанию, вполне подходит. По крайней мере на первых порах, а дальше он сам разберется, какие команды и для каких пользователей ему закрывать.