Ubuntu: настройка из командной строки

Алексей Федорчук

18 Апрель 2006 г

Средства настройки графического режима, существующие во всех дистрибутивах семейства Ubuntu, удобны и интуитивно понятны, но часто кажутся несколько тяжеловесными. И тогда самое время вспомнить о трдиционных методах настройки любых Unix-систем — утилитах командной строки и текстовом редакторе для прямой модификации конфигурационных файлов.

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

Команда sudo

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

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

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

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

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

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

$ sudo nano -w /etc/fstab

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

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

Правда, в Kubuntu (но, насколько я знаю, не в Ubuntu) есть и другой удобный способ редактирования общесисистемных конфигов: в konqueror’е щелкнуть правой кнопкой мыши на имени нужного файла, из контекстного меню выбрать пункт Действия -> Edit as root, после чего его и отредактировать — но уже в редакторе kate, введя предварительно пользовательский пароль.

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

$ sudo su

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

$ sudo passwd

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

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

$ sudo -s -H

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

$ su -

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

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

Если говорить конкретно об Ubuntu/Kubuntu в установке по умолчанию — оба вопроса получат положительный ответ. А вообще это зависит от настроек программы sudo, которые описываются в файле /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). Пользователь, создаваемый в ходе обычной установки, автоматически становится членом этой группы — и потому все административные права ему доступны без всяких дальнейших настроек.

К слову сказать — при экспертной установке Ubuntu и Kubuntu второй из приведенных строк в файле /etc/sudoers нет. Более того, нет и самой группы admin. Именно этим и вызываются осложнения с доступом к утилитам администрирования после инсталляции в режиме expert. И, соответственно, избавление от этих осложнений — в редактировании /etc/sudoers, создании группы admin (посредством команды addgroup) и причислении к ней «доверенных» пользователей.

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

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

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

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

Текстовый редактор nano

Редактор nano вполне может сыграть роль своего рода амортизатора для начинающего пользователя. Да, это не Vim, не emacs, и даже не joe. Но с задачей конфигурирования справляется успешно. А в освоении и`обращении — прост, как грабли. Не случайно во многих дистрибутивах Linux он по умолчанию предлагается в качестве общесистемного.

Не след забывать о nano и пользователям Kubuntu. Конечно, с одной стороны, они имеют мощный и удобный инструмент редактирования в Иксах — Kate, с другой — и Vim’ом эта система не обделена. Но даже в этом гуманистическом дистрибутиве иногда возникает потребность в чисто консольном редакторе, а многие ли из начинающих пользователей способны сразу же смотреть на Vim без содрогания? Наконец, пользователям Ubuntu для настроечных процедур nano может подойти даже больше, чем штатный Gedit из комплекта GNOME…

Столь длинное вступление направлено к тому, что затратить толику времени на освоение nano — дело стоящее для многих линуксоидов. Тем более, что, как уже было сказано, в освоении он прост, а возможностей у него больше, чем может показаться на первый взгляд. Правда, не намного больше…

Итак, представляю: редактор nano, или, точнее, GNU nano. Генетически он связан с pico — текстовым редактором, входящим в почтовый пакет pine, но, в отличие от него, распространяется на условиях лицензии GPL (и, что немаловажно, не тянет за собой почтовой системы — возможно, не всем нужной). Характеризуется авторами как маленький и дружелюбный. Что в целом соответствует истине.

Редактор nano чисто консольный и запускается из строки шелла одноименной командой, можно — с указанием имени файла, существующего или нового (в последнем случае, как обычно, файл с таким именем будет создан). Поддерживается несколько опций командной строки, как то: -T #, устанавливающей величину (в символах) табуляции, -i, включающей автоматические отступы, -w, отключающей режим переноса строк на границе экрана (что очень важно при редактировании конфигурационных файлов), и так далее. Полный их список можно посмотреть посредством

$ man 1 nano

После запуска nano перед глазами возникает нечто вроде следующего: вверху — титульная строка, в которой выводятся номер версии программы, имя открытого файла и, в правом углу, сообщение о том, что файл был изменен. В нижней части экрана можно видеть зону подсказки — список основных из управляющих клавишных последовательностей (образованных сочетанием <Control>+литера) с пояснениями на языке установленной локали.

Область между титульной строкой и зоной подсказки — рабочая, в ней
осуществляется ввод и редактирование текста. В nano предусмотрен (в
отличие, например, от vi и vim) только один режим
работы. То есть текст вводится обычным образом, а для вызова команд
предусмотрены управляющие последовательности. Ознакомиться с ними можно, вызвав встроенную систему помощи клавишей <F1>.

В nano существуют два вида управляющих последовательностей — собственно управляющие, <Control>+литера, и мета-последовательности, <Meta>+литера. Посредством первых осуществляется редактирование текста и операции с файлами. Управляющие последовательности частично дублируются функциональными клавишами <F1>-<F16> (вызов <F13>-<F16> — посредством сочетания <Shift>+<F1>-<F4>). Meta-последовательности предназначены для изменения настроек редактора (тот же результат достигается и опциями командной строки).

Напомню, что на клавиатуре PC роль Meta-клавиши выполняет обычно нажатие клавиши <Alt> (в некоторых раскладках — конкретно <Alt>’а правого, или, напротив, левого), или нажатие и отпуск клавиши <Escape>. Перечислять управляющие последовательности не буду — о них легко прочитать в man nano.

Кроме опций командной строки, в nano предусмотрено еще и внешнее средство конфигурирования — пользовательский конфиг ~/.nanorc. Выполнив в нем некоторые манипуляции, можно несколько расширить функциональность редактора, в частности, обеспечить подсветку синтаксиса.

Правда, по умолчанию этот файл не устанавливается, и сам собой, при запуске редактора, не образуется. Пример его (nanorc.sample.gz) следует отыскать в файловом древе (например, в Kubuntu — в каталоге /usr/share/doc/nano/examples/) и поместить в свой домашний каталог:

$ zcat /usr/share/doc/nano/examples/nanorc.sample.gz > ~/.nanorc

после чего отредактировать по собственному усмотрению. Правда, для этого редактор должен быть перед сборкой сконфигурирован с опцией with --enable-nanorc, но, насколько я знаю, в большинстве дистрибутивов (в частности, в Ubuntu и Kubuntu) так оно и есть.

Описывать подробно устройство ~/.nanorc не буду — остановлюсь только на моментах, представляющихся мне самыми важными. По умолчанию все опции настройки закомментированы — чтобы сделать их действенными, с соответствующих строк требуется снять символ #. И первый кандидат на раскомметирование — строка

set nowrap

запрещающая перенос слов по достижении границы экрана. Это очень важно в том случае, если nano используется преимущественно для редактирования конфигурационных файлов, обычно болезненно реагирующих на разрывы строк в произвольных местах. Хотя того же эффекта можно достичь, запуская nano с опцией -w — я, тем не менее, предпочитаю перестраховаться.

Далее — проверка орфографии, Для обеспечения оной нужно снять комментарий со строки

set speller "aspell -x -c"

В результате по комбинации <Control>+<T> (или по <F12>) для спеллинга будет вызываться программа aspell — если она, конечно, установлена и снабжена словарем для требующегося языка. Разумеется, aspell можно заменить ispell‘ом — но в Kubuntu это делать не рекомендуется (ispell так до сих пор и не научился работать с кодировкой UTF8).

И, наконец, подсветка синтаксиса. В nano она предусмотрена для нескольких языков программирования (Си, Java, Perl) и таких языков разметки, как HTML, TeX, Groff, нужно только снять комментарии с соответствующих строк. В частности, если раскомментировать всю секцию за строкой

## Here is a short example for HTML

то есть:

syntax "HTML" "\.html$"
color cyan start="<" end=">>"
color red "&[^;[[:space:]]]*;"

то будут подсвечиваться теги HTML. А если внести в ~/.nanorc такие строки:

# Generic conf/rc/sh file syntax highlighting
#############################################
syntax "conf/rc/sh" "conf$|rc$|sh$"
color white ".+"
color green "^#.*"

то колоризуются конструкции шелл-скриптов (в «образцовом» ~/.nanorc таких строк нет).

Собственно, это и все. Функциональные возможности nano отнюдь не производят впечатления исключительно богатых. Однако со своей ролью — несложной правкой небольших конфигурационных файлов, — он вполне вполне справляется. А способность подключать программы проверки орфографии позволяет использовать его и для сочинения просто текстов.

Теперь остается сделать nano редактором по умолчанию — чтобы использовать его в командах типа sudoedit и visudo. Для чего воспользуемся им самим же, открыв в нем конфигурационный файл командной оболочки (в виртуальной консоли или терминальном окне konsole:

$ nano ~/.bashrc

Теперь вписываем в него такую вот строку:

export EDITOR=nano

определяющую переменную оболочки EDITOR. Теперь редактор nano будет вызываться при редактировании системных конфигов командой sudoedit.

Перейти к верхней панели