Энеке, бенеке, команда sudo

Команда sudo — это ещё один способ ущемления прав пользователя при доступе к аккаунту администратора. До недавнего времени в Fedora по умолчанию он не применялся: соответствующий пакет надо было установить дополнительно и на строить руками. Однако, начиная с версии 14, при начальном постинсталляционном конфигурировании появилась опциональная возможность использовать sudo для создаваемого при этом аккаунта.

По сравнению с su команда sudo она обладает рядом преимуществ, особенно сказывающихся при эпизодическом применении, и потому часто оказывается предпочтительной. Основных её отличий от su — три:

  • во-первых, sudo по умолчанию требует указания пароля того пользователя, который получает права другого, а не пароля того, чьи права приобретаются; правда, это может быть изменено;
  • во-вторых, действие sudo распространяется по умолчанию только на одну команду — ту, которая указывается в качестве её аргумента; хотя и такое поведение можно изменить с помощью соответствующих опций;
  • в-третьих, sudo обеспечивает более гибкое разграничение доступа пользователей к административным правам — не только разрешая или запрещая получение оных, но и позволяя выполнять только определённый круг действий.

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

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

$ sudo fdisk -l /dev/sda

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

Таким образом, утилита sudo в самом простом случае действует аналогично команде su -c [command], но более удобным образом. Во-первых, её команда-аргумент не нуждается ни в каком экранировании. Во-вторых, в должным образом настроенной оболочке bash (как -- было описано ранее) в отношении команд-аргументов и путей — аргументов последних, будет действовать автодополнение по нажатию клавиши Tab. Уже одно это определяет предпочтительность sudo супротив su.

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

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

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

$ sudo nano -w /etc/fstab

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

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

$ sudo su

Это делает ненужным знание административного пароля даже при его изменении — ведь для этого достаточно дать команду

$ sudo passwd

Впрочем, и тут команда sudo предусматривает “идеологически правильный” метод, и даже не один. Это — опции -s и -i, пролонгирующие, хотя и несколько по разному, действие команды sudo на неопределённый срок, вплоть до завершения “вторичного сеанса” командой exit.

Опция -s, открывая вторичный сеанс root’а, сохраняет все переменные окружения первоначального пользователя. Однако, если к ней добавить опцию -H, то переменные эти будут заново считаны из профильных файлов домашнего каталога администратора, то есть /root, как при запуске интерактивного экземпляра шелла. Однако каталог, бывший текущим в момент ввода команды, при этом не изменится, как не изменится и вид приглашения командной строки.

Опция же -i полностью воспроизводит root-окружение, запуская его командную оболочку как регистрационную (login shell). Разумеется, при этом и текущий каталог меняется на /root, а приглашение командной строки приобретает вид, описанный в соответствующей переменной профильного файла администраторского шелла (в bashPS1, см. здесь).

На практике разница между обеими формами обретения перманентных прав администратора не велика, особенно в bash. Но то, что при использовании опций -H нахождение в перманентно административном режиме никак внешне не проявляется, чревато ошибками. И делает в большинстве случаев применение опции -i предпочтительным.

Команду sudo можно запустить так, чтобы она запрашивала пароль пользователя, от имени которого будет выполняться команда (например, администратора), а не того, кто требует его полномочий. Для этого существует опция -targetpw. А чтобы сделать требование root’ового пароля постоянным, достаточно определить, например, псевдоним типа

alias sudo -targetpw

Команда sudo имеет еще немало опций — например, опцию -b, предписывающую запускать “подсудную” команду в фоновом режиме. Она может быть полезна при выполнении долговременных действий, например, при копировании образов USB на флэшку командой dd.

А некоторые подробности о работе sudo т её настройках можно прочитать здесь и здесь.


Главная
Содержание

. .