Антропологи
утверждают, что эволюция человека как биологического вида прекратилась
давным-давно: от кроманьонцев мы уже мало чем отличаемся. Но сам
эволюционный потенциал никуда не делся - он трансформировался в
развитие общества, которое всегда (по крайней мере, напротяжении своей
письменной истории) складывается как динамическое равновесие
составляющих его групп. Может, именно животворная и слепая эволюционная
мощь заставляет нас быть такими непримиримыми к тем, чьи взгляды мы не
разделяем?
Я
не говорю даже о политике или социальных явлениях. Возьмите сисадминов
и юзеров... Линуксоидов и адептов *BSD... Да что далеко ходить - даже в
такой, казалось бы, беспочвенной для конфликтов области, как текстовые
редакторы, пользователи Linux/*NIX разделены, оказывается, на
враждебные одна другой группировки - как футбольные фаны, честное
слово. Понятно, что процент выраженно фанатичных экстремистов, как и в
мире спортивных болельщиков, не слишком велик, но именно они задают
основной тон конфликта. Хотя, казалось бы, тут-то о чём спорить?
Открывай редактор и пиши. Вот
именно те люди, которым позиция "открывай и пиши" ближе, чаще всего
склоняются к использованию редактора vi. Это первый по-настоящему
полнофункциональный и полноэкранный текстовый редактор для UNIX,
благополучно перекочевавший на Linux и имеющийся в любой инкарнации
этой операционной системы. Уметь обращаться с ним необходимо, если,
конечно, вы не склонны к использованию антикварных продуктов - таких,
как старый добрый ed, разрабатывавшийся ещё во времена телетайпных
терминалов, когда ни о каких мониторах у компьютеров и речи не было. Другое
дело - редактор emacs, созданный основателем Фонда свободного ПО (Free
software foundation) и основным идеологом лицензии GNU Ричардом
Столманом. Emacs - крупная, постоянно совершенствуемая система, которую
горячие её сторонники называют даже интегрированной средой, а не просто
каким-то там редактором. В её состав входят собственный интерпретатор
языка LISP, расширения для компиляции и отладки программ, учебник (не
справка по основным командам, а полноценный учебник), море
документации. Версия GNU Emacs ориентирована в основном на
использование в текстовом режиме, а в графической среде X Window System
лучше использовать XEmacs - как правило, обе версии редактора имеются в
любой уважающей себя системе.
Что
касается личных предпочтений, то для повседневных административных
забот мне вполне хватает vi. В идеале, кстати, административные заботы
должны занимать время не каждый день, а существенно реже - и в случае
домашнего компьютера, и в случае локальной сети: следует стремиться к
тому, чтобы максимально автоматизировать рутинную работу. Другое дело,
что если бы мне пришлось постоянно жить и работать с текстовой
консолью, я бы, наверное, предпочёл всё-таки emacs. Просто полная мощь
этого редактора являет себя только тем, кто достаточно широко
использует его богатейшие возможности. А для решения локальных
административных задач с лихвой хватает vi. Вот потому мы и
познакомимся сейчас именно с ним. Редактор
vi тоже прошёл долгий исторический путь: в современных дистрибутивах
Linux не часто встретишь его исконную инкарнацию - как правило, при
обращении к vi вызов перенаправляется редакторам vim (Vi IMproved) или
nvi. Однако все добавления и усовершенствования (сделанные, по большей
части, ради удобства работы в графической оболочке) не затрагивают
базовых возможностей и способов управления vi. Набрав
vi с именем файла вслед за ним и нажав на Enter, вы очутитесь в окне
редактора. Однако немедленно приступить к правке или набору текста не
получится: по умолчанию документ (существующий, если вы указали
соответствующее имя, или вновь созданный, если файла с таким именем не
было) открывается в командном режиме. Помимо командного, vi работает в
режиме редактирования, куда мы вскоре перейдём, а также в специальном
режиме ex.
В
режиме редактирования производится набор и смысловая правка текста.
Модификация же текста в целом и операции с его фрагментами (абзацами,
строками, словами, манипуляции с поиском и заменой и т. п.)
производятся в командном режиме. Переход из исходного, командного, в
режим редактирования осуществляется нажатием клавиши i, что можно
интерпретировать как insert - "вставка". Действуя
в рамках стандартного vi, в режиме вставки можно вводить текст
(разделяя строки нажатиями клавиши Enter), а также править своевременно
замеченные опечатки, стирая символы перед курсором с использованием
клавиши Backspace. Вообще говоря, современная инкарнация vi, vim,
поставляемая с Red Hat Linux, позволяет уже в этом режиме применять
курсорные стрелки для перемещений по тексту, однако следует помнить,
что реализация vi на другой системе может и не быть настолько удобной.
Будьте внимательны, используя стрелки вниз и вверх: каждое нажатие на
них сдвигает курсор по вертикали не на соседнюю видимую в окошке
редактора строку, а в соответствующую позицию соседней истинной строки
(той, что отделена от текущей нажатием на клавишу Enter). С непривычки
это может показаться неудобным - но ведь наверняка вы не станете
вручную набивать в vi "Илиаду", а для нужд системного администрирования
такое поведение оказывается более чем полезным. Закончив
набор текста, возвращайтесь в командный режим при помощи клавиши
Escape. В каком именно режиме вы находитесь в каждый конкретный момент,
поможет понять нижняя строка на экране: в командном она отображает имя
файла, число строк (L) и символов (C) в нём, позицию курсора (строка и
колонка истинной строки), а также долю объёма файла от его начала до
текущего экрана (в процентах; если файл помещается на экране целиком,
на этой позиции в правом нижнем углу размещается слово ALL). В режиме
редактирования слева внизу указывается, как именно производится
внесение правки в текст: вставкой нового (--INSERT--) или заменой
присутствующего (--REPLACE--). В конце концов, если вы что-то забыли и
запутались, полезно нажать лишний раз на Escape: в командном режиме это
никакого действия не окажет, а из редактирования выведет. Командный
режим уже и в классическом vi предоставляет возможности перемещения по
тексту: можно использовать курсорные стрелки или клавиши h, j, k, l
(перемещения влево, вниз, вверх, вправо соответственно). Для сдвига
курсора на целое слово назад используйте клавишу b, для сдвига вперёд -
w. Клавиша 0 (ноль) переместит курсор к началу текущей строки, а $ (то
есть одновременное нажатие Shift и 4) - к её концу. Пролистывание целых
экранов вперёд осуществляется комбинацией клавиш Ctrl и f (forward), а
назад - Ctrl и b (back). Заглавная G (то есть нажатие клавиш Shift и g
одновременно) переместит курсор к последней странице документа. Можно
комбинировать эту команду с цифрами: нажав последовательно клавиши 1, 0
и G, то есть, отдав команду "10G", вы установите курсор на десятую
истинную строку текста. К началу документа, таким образом, можно
перейти при помощи команды 1G.
Если
требуется отыскать в тексте какой-либо фрагмент, с его поиском поможет
команда /, вслед за которой надо набрать искомую комбинацию символов:
отобразится она в нижней, служебной строке редактора. После нажатия на
Enter курсор установится в позицию, соответствующую первому включению
этого фрагмента в текст; чтобы перейти к следующему, введите / (то есть
нажмите /, а потом - Enter), а к предыдущему - ? (Shift и /
одновременно, а затем уже Enter). Все фрагменты при этом выделятся в
тексте цветом: простой инверсией в случае классического vi, или
светло-серым на оранжевом фоне для vim и стандартного цветного
терминала.
Уже
находясь в командном режиме, можно вносить в текст некую глобальную
правку, а именно - удалять его фрагменты. Нажмите x, чтобы исчез
символ, находящийся прямо в позиции курсора (текст в строке сдвинется
влево). Чтобы уничтожить текущую строку, дважды нажмите клавишу d.
Команда dG удалит весь текст за курсором до конца файла; команда d$ -
весь текст до конца строки. Пользуйтесь этими возможностями крайне
аккуратно. Команда p вернёт на место удалённый текст, но только
тот, что был уничтожен прямо сейчас - многошагового буфера удаления в
vi не существует. Впрочем,
некая страховка от неудачных действий у нас всё же имеется: все
операции, проводимые над текстом в vi, воздействуют не на сам файл, а
на его рабочую копию (так называемый буфер редактирования). И если не
подтвердить специальной командой запись этих изменений, файл останется
нетронутым. Для этих и некоторых других операций в vi имеется третий
режим работы: ex (и-экс). Для перехода в него нажмите в командном
режиме (именно в командном) : (двоеточие), то есть Shift и клавишу ;
одновременно. О
переходе в режим ex свидетельствует очистившаяся служебная строка в
самом низу экрана, в начале которой появляется двоеточие - приглашение
ко вводу ex-команд. Две основные, без которых нам никак не обойтись,
это q (выход) и w (запись буфера редактирования, окончательное внесение
правки в исходный файл). Напечатав команду в служебной строке, нажмите
Enter, и она исполнится. Маленькое замечание: выйти из vi, если в буфер
редактирования были внесены изменения, которые потом не подтвердились
записью, просто так не получится. Если вы сделали с текстом явно
что-то не то, и проще начать заново, чем переправлять собственную
правку, используйте команду q! (перейти в режим ex, напечатать в
служебной строке q и !, нажать Enter). Если же придирчивый взгляд не
выявил в исправленном тексте никаких несообразностей, смело используйте
комбинацию wq - запись буфера в файл с последующим выходом из
редактора. Кстати, аналогом wq в ex-режиме служит команда ZZ в
командном (двойное нажатие на клавишу z при удерживаемом Shift'е). Конечно,
у vi есть масса других полезных возможностей, но на первое время вполне
достанет и этих. Помните, в прошлый раз мы сетовали на то, что файл
/etc/fstab был создан системой при установке, и неудачное расположение
точки монтирования Windows-разделов (в корневом каталоге, а не в /mnt)
пришлось изменять вручную? Так вот, настала пора расставить всё по
местам. Войдите
в систему суперпользователем: вы окажетесь в /root,
суперпользовательской домашней директории (можно убедиться в этом при
помощи команды pwd). Прежде чем приступать к работе с каким-либо
системным файлом, полезно - не полагаясь только на встроенные в
редактор средства защиты от необдуманных изменений - скопировать этот
файл в известное место, чтобы точно знать в случае чего, где находится
его априори рабочий вариант. Давайте создадим каталог с прозрачным
наименованием etc-backups и спасём туда текущую версию /etc/fstab,
прибавив к названию файла ещё и дату - чтобы проще было ориентироваться
при надобности.
Директории
/mnt/c и /mnt/d уже были созданы нами в прошлый раз, то есть правильные
точки монтирования уже есть. Какие параметры указывать, чтобы русские
наименования файлов/директорий отображались корректно в и в Linux, мы
теперь тоже знаем. Остаётся всё это внести в файл. Ну что же,
бесстрашно наберём vi /etc/fstab и примемся за дело. Вместо /dos-c и
/dos-d во второй колонке (для /dev/hde1 и /dev/hde5 соответственно)
укажем /mnt/c и /mnt/d; вместо defaults в четвёртой пропишем параметры
iocharset и codepage... А также по три дополнительных: uid, gid и umask. Ну,
с umask всё ясно: маска 007 означает, что монтироваться эти разделы
будут с полными правами для владельца и группы, а все остальные - то
есть все, кто не входят в указанную группу - доступа к ним иметь не
будут даже на чтение. С точки зрения безопасности - полезно. В системе
заведётся (совсем скоро!) особый пользователь, от имени которого и
будут монтироваться разделы Windows. И если, паче чаяния, каким-нибудь
невероятным образом на одном из них окажется написанный для Linux
вредоносный код (вирусы и под Linux бывают, а вы как думали?), то
скорее всего, он не сможет нанести системе вообще никакого вреда. Если
грамотно ограничить права Windows-пользователя, конечно. В таком
случае, очевидно, uid и gid задают идентификаторы этого самого
пользователя и его группы. Но почему именно такие и откуда они взялись? Вообще
говоря, хорошо, что внесённые в /etc/fstab изменения автоматически не
вступают в силу. А то могло бы оказаться, что у вас в системе уже есть
пользователь и группа с идентификаторами 502... Давайте это проверим, и
если нет, то заведём их. Выходите из редактора с сохранением (ZZ в
командном или wq в ex-режиме) и посмотрите на самый хвостик своего
файла /etc/passwd. Какой идентификатор присвоен последнему
зарегистрированному в системе пользователю?
В
моём случае это - 501 для пользователя dummy; значит, 502-й пока
свободен. По умолчанию, первой учётной записи пользователя (не root'а!)
присваивается номер 500, второй - 501 и так далее. С этим номером
связывается имя пользователя, отображаемое, скажем, командой ls с
параметром -l, однако реально принадлежность файла пользователю и
группе характеризует именно номер.
Именные
идентификаторы групп пользователей система берёт из файла /etc/group.
Подробную информацию о том, как оба этих файла устроены, можно
почерпнуть из соответствующих руководств (команды man 5 passwd и man 5
group). Более того, в системе имеются стандартные средства для создания
новых учётных записей пользователей и групп - утилиты useradd и
groupadd (см. их страницы руководств). Однако перед нами не стоит
сейчас задача завести полноценного пользователя: напротив, нужно
создать учётную запись с весьма ограниченными правами. А для этого
вполне достаточно будет подредактировать системные файлы вручную.
Заодно и в применении vi попрактикуемся.
Прежде
всего, создайте, как и для /etc/fstab, резервные копии /etc/passwd и
/etc/qroup. Открываем в vi /etc/passwd, переходим к концу файла (G -
помните?) - и видим, что курсор установился в первую позицию последней
строки. Если нажать сейчас клавишу i, именно с этой позиции и начнётся
правка. Но нам ни к чему корёжить существующую строчку, надо начать
новую. Перейти в режим вставки начиная со строки ПОД текущей позволит
нам команда o. Нажмём эту клавишу и приступим.
Так;
первым в строке, соответствующей каждой учётной записи, стоит имя
пользователя. Те, что составляют большую часть файла - с
идентификаторами меньше сотни - это служебные эккаунты (или аккаунты?
О, великий и могучий...); с пятисот начинается именование пользователей
настоящих. Хорошо; раз опция загрузки Windows-системы обозначается
загрузчиком GRUB как DOS, пусть и владеющий подмонтированными разделами
Windows пользователь называется doser. Запишем его имя с новой строки. Поставим
вслед за тем двоеточие: это разделитель полей в файле /etc/passwd. В
следующем поле у каждой из записей наличествует крестик (буква х) - как
обозначение того факта, что в файле /etc/shadow хранится настоящий
пароль данного пользователя, доступ к просмотру которого имеет только
root, тогда как /etc/passwd открыт для чтения всем и каждому (команда
ls, например, устанавливает соответствие между именем учётной записи и
идентификационным номером именно в соответствии с ним). Поставим в этом
поле иксик и мы; двинемся затем дальше. Два последующих поля (не
забывайте разделять их двоеточиями!) - идентификаторы пользователя и
группы; поставим те же, что уже применили в /etc/fstab для
Windows-разделов, - 502. Затем идёт поле описания: как правило, в нём
размещается полное имя пользователя или некое пояснение для служебного
эккаунта. Содержание - произвольное (осторожнее с двоеточиями!).
Следующее поле - домашний каталог для данной учётной записи. Данной
записи домашний каталог не потребуется: под именем doser никто не будет
входить в систему. Поэтому укажем в качестве каталога традиционную
"чёрную дыру", устройство /dev/null, официально называемую в
руководстве "мусорной корзиной для данных": документ, записываемый в
этот файл, исчезает. И наконец, последний штрих: командный
интерпретатор пользователя. Та среда, в которой выполняются все прочие
команды. По умолчанию в Red Hat Linux это /bin/bash, но мы даже консоли
пользователю doser не доверим, и потому укажем вместо интерпретатора
очередную затычку - программу /sbin/nologin, которая вежливо сообщает
пытающемуся войти в систему пользователю с соответствующим именем, что
логин невозможен. Впрочем, степень вежливости тут настраиваемая; за
подробностями обращайтесь к man nologin.
Всё!
Переходим в ex-режим (Escape, чтобы вернуться в командный, и затем
двоеточие); ещё раз убеждаемся, что все поля заполнены верно, и набрав
комбинацию wq, нажимаем Enter - выходим из редактора, сохранив файл. Теперь
- самое время внести правку в /etc/shadow, чтобы уж точно убедиться,
что ни под каким паролем входа doser'у в систему не будет. Снова
перемещаемся в конец файла, входим в режим редактирования...
Посмотрите: у учётной записи, предназначенной для пользовательского
входа в систему, здесь находится зашифрованный пароль. У всех остальных
в соответствующем поле - по два восклицательных знака. Так сделаем и
для doser'a. Пусть вас не смущает множество очевидно пустых полей: там
хранится информация о сроках истечения действия паролей, и в системах с
большим количеством пользователей поля эти работают вовсю. Мы сейчас
можем даже не разбираться, каков смысл каждого из них, а просто
скопировать их у любого другого (кроме "полноценного"!) пользователя.
Страница руководства man 5 shadow поможет заинтересовавшимся вникнуть в
вопрос глубже; скажу только, что формат дат в этом файле очень
интересен и крайне показателен для Linux/*NIX. Эти целые числа
обозначают дни, прошедшие до указанной даты с 1 января 1970 года.
Кстати, файл /etc/passwd мало того что скрыт от непривилегированных
взоров, - он ещё и для root'а снабжён опцией "только для чтения". Когда
вы решитесь сохранять изменения в нём, система напомнит вам об этом и
попросит подтвердить запись, напечатав в ex-режиме не w, а w!.
А
теперь давайте и с группой разберёмся, наконец. Уже привычным нам
способом создаём резервную копию /etc/group, открываем его в vi и в
конце, с новой строки, записываем имя вновь создаваемой группы -
dosers. Логично, верно? Ставим двоеточие-разделитель, иксик на месте
пароля (да, и использование группы, а не только учётной записи, можно
защищать паролем, - но нам на уровне домашнего ПК это ни к чему), снова
двоеточие, номер группы (тот же, что фигурировал в gid, указанном нами
в обновлённом /etc/fstab) и затем - список её членов через запятую. Всё
достаточно логично.
Вот, собственно, и всё с корректным монтированием Windows-разделов. Остаётся пара финальных штрихов. Отмонтируем
от нынешних точек диски C и D, после чего уничтожим за ненадобностью
сами точки - директории /dos-c и /dos-d в корневом каталоге. Для этой
цели существует команда rmdir, удаляющая ТОЛЬКО пустые каталоги.
Пользоваться ей спокойнее, чем стандартной rm, оперирующей и
каталогами, и файлами: всегда точно знаешь, что если она сработала, в
директории точно ничего важного забыто не было.
А
затем исполним команду mount -a, которая монтирует файловые системы в
соответствии с указаниями /etc/fstab/. И удостоверимся, что всё с
нашими системами в порядке. Именно так они и будут монтироваться теперь
сами после очередной загрузки.
И
теперь с ними действительно всё в порядке: являясь участником группы
dosers, пользователь dummy, от имени которого мы занимаемся тут
изучением возможностей системы, в состоянии не только свободно читать
файлы с Windows-разделов, но и создавать их там.
Ну
что же, вот и сделан первый шаг в сторону обеспечения внутренней
системной безопасности. Достаточно разумный комплекс мер по ней
рассмотрим с вами в следующий раз, а там уже примемся за Интернет и
графическую оболочку системы. Командная строка хороша, но жизнь
всё-таки слишком коротка, чтобы провести её всю в командной строке...
К следующей статье
К оглавлению
|
|