В прошлый раз я
обещал продолжить знакомство с системой, обратившись к укреплению её
безопасности. Однако прежде чем приступать к настройке и регулировке
системных служб, давайте всё-таки подробнее остановимся на управлении
учётными записями пользователей. Ибо снаружи домашний компьютер (не
находящийся, как правило, сутками и даже длительно часами в онлайне)
уязвим куда меньше, чем изнутри. Значит, корректное обращение с
учётными записями - первейший залог безопасности системы. С него и
начнём. Как
заводить пользователя вручную, оперируя с файлами /etc/passwd,
/etc/shadow и /etc/group, мы себе уже представляем. Другое дело, что
полностью ручной способ не слишком эффективен, когда нужно создать в
системе полноценную учётную запись. Ведь человек, входящий в среду
Linux для работы, нуждается в некотором первичном наборе инструментов и
прав. Прежде всего, пользователь сталкивается с командным
интерпретатором (если мы ведём речь о терминальном режиме, который и
рассматривали до сих пор). А командный интерпретатор (оболочка, shell)
- это не просто текстовая строка с мерцающим в ней курсором. Это - одно
из мощнейших средств работы в системе. В Red Hat Linux интерпретатором
по умолчанию является Bourne shell, оболочка Борна, исполняемый файл
которой - /bin/bash. О том, насколько широкими возможностями обладает
эта оболочка, можно получить представление, изучив её страницы
руководства (команда man bash), а также многочисленные HOWTO
(размещённые в том числе и в Интернете) и печатные справочники.
Для
первичной настройки командного интерпретатора используются так
называемые стартовые файлы, размещаемые в домашней директории каждого
пользователя. При создании новой учётной записи стандартными средствами
системы (какими именно, скоро узнаем), а не вручную, подборка стартовых
файлов копируется в домашний каталог из "скелетного" каталога
/etc/skel, созданного, в свою очередь, автоматически при инсталляции
системы. Он содержит "скрытые" файлы и каталоги, чьи имена начинаются с
точки и по умолчанию командой ls без дополнительных параметров не
отображаются.
Как
видим, три из размещённых в /etc/skel файлов имеют отношение (судя по
названию) к конфигурированию командной оболочки bash, один - к
текстовому редактору emacs (который, в отличие от vi, действительно
требует многопараметрической первичной настройки), один - к некоему GTK
(графической библиотеке gtk+), и целая директория (выделена синим)
посвящена первичным настройкам KDE - избранной нами при инсталляции
системы графической оболочке по умолчанию. Поскольку сейчас мы говорим
всё-таки о командной строке, остановимся подробнее на рассмотрении
файлов, относящихся к bash. Начнём
с .bashrc (точнее, с /etc/skel/.bashrc). Этот файл - сценарий оболочки,
то есть в нём содержатся исполняемые оболочкой команды.
Как
видим, изначально команд там практически никаких нет. Строки,
начинающиеся со знака диеза, или решётки (#) - комментарии, командной
оболочкой не обрабатываемые. Первая строка /etc/skel/.bashrc содержит
название самого файла; затем в нём отведено место для специфических
алиасов и функций пользователя. Источником глобальных определений для
bash будет являться файл /etc/bashrc, если он существует: даже не
знакомый с синтаксисом командного интерпретатора человек может понять
смысл финальной конструкции в /etc/skel/.bashrc. Проверяется наличие
файла /etc/bashrc, и если он существует, то незамедлительно исполняется
(команда "." (точка) как раз и означает исполнение в оболочке).
Очевидно, в /etc/bashrc должны содержаться какие-то совсем уж базовые
значения системных переменных и профили поведения интерпретатора. Так
оно и есть; те, кого этот вопрос заинтересует, могут заглянуть в
/etc/bashrc самостоятельно и попробовать разобраться в его устройстве,
но пока для нас оно не имеет большого значения: эти глобальные
определения задаются системой при инсталляции, и менять их сейчас
никакого резона нет. Всё, что нам потребуется поменять и переназначить,
можно сделать в /etc/skel/.bashrc и затем в .bashrc-файлах каждого
конкретного пользователя. Остановимся
на минутку на промелькнувших в прошлом абзаце терминах "алиасы и
функции". Alias можно перевести как "псевдоним", а можно и не
переводить: это довольно-таки устойчивый термин, которым обозначаются
своего рода символические ссылки на некие командные функции. Например,
если на почтовом сервере foobar.ru зарегистрирован пользователь dummy,
он в общем случае получит адрес dummy@foobar.ru. Однако никто не мешает
завести ему на этом же сервере множество алиасов, т. е. других имён
почтовых ящиков: weird@foobar.ru, prophet@foobar.ru и т. п. При этом
алиасы не будут самостоятельными логинами - система, получив почту на
дополнительные адреса, просто почерпнёт из соответствующего файла
информацию о том, что weird и prophet являются алиасами dummy, и
поместит пришедшую почту во входной спул этого пользователя. Аналогично
обстоят дела и с алиасами командного интерпретатора. Это просто
псевдонимы стандартных (быть может, с неклассическим набором
параметров) функций, которые для данного пользователя перекрывают
глобальные определения этих функций. Ну например: вам лень каждый раз
набирать для отображения в полном формате всех (включая скрытые) файлов
в каталоге команду ls -al. При этом вам духовно близка старая добрая
команда dir, памятная ещё по MS-DOS. Тогда есть смысл оставить ls для
краткой сводки информации по директории, а dir сделать алиасом команды
ls -al. Для того и предусмотрена секция User specific aliases and
functions в файле .bashrc. Просто добавьте туда строчку alias dir='ls -al'
Кстати,
в любой момент вы можете точно установить, является ли та или иная
команда исходной, системной, или же алиасом (модифицированным или не
модифицированным). На такой случай существует утилита which,
показывающая в случае системной команды полный путь к ней, а в случае
алиаса - его расшифровку.
Как
видно, dir является свежесозданным алиасом ls, но и исполняемая нами в
оболочке ls, оказывается, не есть исходная команда - она модифицирована
для применения с цветным терминалом, что мы при работе с ней успели уже
заметить. Вызов текстового редактора vi - это алиас обращения к его
усовершенствованной версии vim, и только команда which vim показывает
нам, наконец, что за исполняемый файл непосредственно запускается в
работу при вызове данной утилиты. Файл
.bashrc можно также дополнить назначением (или переназначением)
переменных окружения. Этих переменных множество, и подробнее о них (в
том случае, если они вам вообще когда-нибудь понадобятся) можно будет
узнать из соответствующих страниц руководства. Упомянем сейчас лишь
одну из них. Переменная
HISTSIZE указывает, сколько введённых пользователем с клавиатуры команд
будет сохраняться интерпретатором. Для чего? Работать с ранее
вводившимися командами иногда бывает очень удобно. Клавиши "стрелка
вверх" и "стрелка вниз" в командной строке позволяют редактировать их
по мере надобности и снова запускать на исполнение клавишей "Ввод".
Более того, напечатав в командной строке восклицательный знак и следом
- первые несколько букв (можно даже одну) команды, которую вы хотите
повторить, вы сможете сделать это.
К
тому же, команда history выводит на экран пронумерованный список
набиравшихся вами ранее команд (сколько именно, как раз и определяет
переменная окружения HISTSIZE). И напечатав сразу после
восклицательного знака номер команды, вы также сможете запустить её на
исполнение.
И
на сладкое - давайте заставим систему приветствовать нас при каждом
логине глубокомысленной (или юмористической, или саркастической - уж
кому как повезёт) фразой из набора стандартных <шуточек>, выводимых на
экран по команде /usr/games/fortune.
Достаточно
на первое время с /etc/skel/.bashrc. Остальные два отвечающие за
управление bash файла можно пока вообще оставить в покое: .bash_profile
применяется только при входе в систему (тогда как .bashrc - и при
первичном входе, и при открытии окон командного интерпретатора в X
Window System, например). .bash_logout выполняется, соответственно, при
выходе из сеанса оболочки, но для наших домашне-административных целей
полезность данной возможности, прямо скажем, сомнительна. Итак,
переходим непосредственно к созданию новой учётной записи полноценного
пользователя. Для этой цели нам пригодится утилита useradd, которая в
простейшем случае - если указать в качестве параметра один только новый
логин - создаст учётную запись и домашний каталог со стандартными
свойствами. Но ведь нам хочется сделать всё как следует, верно?
Обратимся к man useradd за описанием применяемых опций, и построим в
соответствии с ними команду.
В
данном примере мы отдали на откуп системе (оставили стандартными) все
параметры создания учётной записи, кроме комментария в файле
/etc/passwd и исходной группы, к которой принадлежит новый
пользователь. В частности, мы не указали для этого аккаунта пароль, что
означает невозможность для пользователя с таким именем войти в систему.
Исправить несправедливость поможет команда passwd с именем пользователя
в качестве аргумента, исполненная из-под логина root.
Вот
теперь под именем acolyte можно свободно входить в систему (если не
забудете пароль, конечно). А если вдруг придётся эту учётную запись
удалить - мало ли, что в жизни случается! - так на этот случай имеется
в системе команда userdel. Если исполнять её без параметров, с одним
только именем пользователя в качестве аргумента, то домашняя директория
несчастного останется нетронутой, и информацией из неё можно будет
воспользоваться в дальнейшем. Если же указать параметр -r, то исчезнет
и домашний каталог.
В
качестве задания для самостоятельной работы могу порекомендовать
полистать страницы руководств по командам useradd, usermod, userdel,
groupadd, groupdel, groupmod. А в следующий раз мы всё-таки займёмся
обеспечением Интернет-безопасности своего компьютера. Заодно и выйдем в
этот самый Интернет по модемному коммутируемому соединению - благо, и
для командной строки написаны браузеры...
К следующей статье
К оглавлению
|
|