В прошлый раз я обещал продолжить знакомство с системой, обратившись к укреплению её безопасности. Однако прежде чем приступать к настройке и регулировке системных служб, давайте всё-таки подробнее остановимся на управлении учётными записями пользователей. Ибо снаружи домашний компьютер (не находящийся, как правило, сутками и даже длительно часами в онлайне) уязвим куда меньше, чем изнутри. Значит, корректное обращение с учётными записями - первейший залог безопасности системы. С него и начнём.
Как заводить пользователя вручную, оперируя с файлами /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. А в следующий раз мы всё-таки займёмся обеспечением Интернет-безопасности своего компьютера. Заодно и выйдем в этот самый Интернет по модемному коммутируемому соединению - благо, и для командной строки написаны браузеры...