аждый, кто активно использует виртуальные консоли в обыденной жизни, сталкивается
с необходимостью регистрации на каждой из них - от имени ли какого-либо пользователя,
или в качестве администратора. Уже при шести умолчальных консолях процесс
этот может показаться утомительным. А при существенно большем их количестве
- так и просто обременительным. Нельзя ли как-нибудь актоматизировать его?
Напрашивающееся решение - беспарольный вход в систему, - отнюдь не идеально.
Во-первых, это вопиющее нарушение техники безопасности. Конечно, на локальной
машине ею можно бы принебречь - все равно, доступ к ней легко получить, загрузившись
с любого сменного носителя. Но уже при модемном подключении к Сети и динамическом
IP-адресе беспарольный вход очень не рекомендуется. Главное же, он не избавляет
от необходимости ввода пользовательского имени, то есть техника безопасности
не только нарушается, но и нарушается неоправданно.
И потому были придуманы различные способы автоматизации входа в систему,
то есть - автоматической регистрации пользователя в момент активации виртуальной
консоли. Они работают вне зависимости от того, открывается ли консоль в момент
старта системы или на лету в ходе дальнейшей работы. При этом сами по себе
учетные записи пользователей (в том числе и их пароли) остаются в неприкосновенности,
и потому удаленный доступ к данной машине все равно требует ввода регистрационных
данных.
Несколько таких методов автоматизации входа рассмотрены в статье Адриана
Чанга . В ней упомянуты патч к программе mingetty и пакет autologin, а также
предложена автоматизация методом "правки напильником". Он основан на использовании
опции -l программ семейства getty, которая позволяет подменить выполняемую
по умолчанию команду login какой-либо альтернативной. В качестве такой альтернативы
предложена простенькая Си-программа, выполняющая все ту же команду login
в форме
login -f user_name
с предварительной аутентификацией указанного пользователя.
Метод этот не показался мне удобным. Во-первых, при необходимости регистрации
более чем одного пользователя потребуется создавать (и компилировать) по
экземпляру такой программы на каждого из них. Во-вторых (и главных), он у
меня просто не сработал - стадия аутентификации действительно пропускалась,
но пароль на вход запрашивался все равно (кстати, в man (1) login я не нашел
никаких указаний на то, что опция -f освобождает от ввода пароля).
Интуитивно понятно, что проблема автоидентификации пользователей может быть
решена каким-либо скриптовым методом. И я было занялся сочинением такого
скрипта, когда благодаря статье Владимира
Попова наткнулся на Perl-сценарий qlogin ,
специально для того и предназначенный. И к тому же подробно описанный в статье
его автора - Брайана Хендерсона.
Установка его очень проста - достаточно распаковать архив и скопировать
исполняемый сценарий (qlogin) в подходящее место (а подходящим для такого
рода программ по понятным причинам является каталог /sbin). Также неплохо
поместить и его man-страницу (qlogin.1) куда следует (у меня в системе -
в /usr/man/man1), поскольку в ней содержится исчерпывающая информация по
применению этого скрипта.
Правда, дополнительно требуется еще и установить два Perl-расширения. Первое,
в соответствие с документацией (~/qlogin/README) находим в подкаталоге ~/qlogin/setgroups,
перейдя в который, выполняем
perl Makefile.PL make make install
для помещения в должное место (по умолчанию - в /usr/lib/perl5/5.X.X/i686-linux/).
Второе расширение относится к методу контроля за авторизацией, использующему
файлы /etc/utmp и /etc/wtmp. В моей системе таковые отсутствуют за ненадобностью,
и к тому же само расширение следовало еще скачать с http://cpan.org .
Однако без него вполне можно обойтисть, для чего достаточно из qlogin удалить
строки, имеющие отношение к Utmp.
Скрипт qlogin в равной мере пригоден как для интерактивной активизации консолей "на
лету" (выступая как замена команды openvt), так и для автоматической регистрации
на них при старте системы (то есть подмены программ семейства getty). При
использовании qlogin во втором качестве автор настоятельно рекомендует предварительно "потренироваться
в тряпичный" - то есть запустить его с нужными опциями и аргументами из командной
строки. Помня при этом, что управляющим терминалом для qlogin будет та виртуальная
консоль, с которой он был запущен.
Аргументов для команды qlogin, вне заивисимости от способа ее применения,
требуется два - имя файла целевой консоли и имя пользователя:
$ qlogin /dev/vc/# user_name
Обращаю внимание, что имя файла устройства, в отличие от команды agetty,
должно сопровождаться полным путем (как в примере).
Из опций qlogin (напомню, что их вдоволь можно найти в man-странице) наиболее
важна --command, значением которой будет имя команды, запускаемой на новой
консоли вслед за ее открытием и автоидентификацией пользователя. При необходимости
команда может сопровождаться собственными опциями и агрументами:
$ qlogin /dev/vc/# user_name --command="command [options] [arguments]"
При этом очевидно, что для экранирования пробелов в этом случае должны использоваться
кавычки (одинарные или двойные - в зависимости от применяемого шелла). Полный
путь к исполняемого файлу команды при интерактивном запуске qlogin не обязателен
(если, конечно, путь этот описан в переменной окружения $PATH).
Очевидно, что интерактивный запуск qlogin возможен только от лица root'а,
посокльку ни один обычный пользователь не имеет соответствующих прав доступа
к файлам устройств неактивизированных виртуальных консолей.
Для автоматической регистрации пользователей при старте системы вызов команды
qlogin следует поместить в файл /etc/inittab вместо команды getty. Например,
если мы хотим на первой виртуальной консоли автоматически авторизовать некоего
пользователя "имя рек", следует изменить первую строку секции описания виртуальных
консолей таким образом:
c1:2:respawn:/sbin/qlogin /dev/vc/1 имя_рек
Повторяю, указание полного пути к файлу устройства при этом обязательно,
иначе init, не обнаружив оного, впадет посредством акции respawn в пятиминутный
цикл перезапуска процесса qlogin.
Опции команды qlogin можно использовать и при вызове ее из файла /etc/inittab.
Так, благодаря строке
c1:2:respawn:/sbin/qlogin /dev/vc/1 имя_рек --command="/bin/tcsh -l"
при старте системы на первой виртуальной консли будет не только зарегистрирован
пользователь "имя рек", но для него в качестве login shell загрузится командная
оболочка tcsh вместо той, что предписана ему по умолчанию (например, bash).
А строка вроде
c6:2:respawn:/sbin/qlogin /dev/vc/6 имя_рек --command=/usr/bin/top
обеспечит на шестой консоли вывод программы top для контроля над запущенными
процессами.
Следует только помнить, что вызов какой-либо программы как опции команды
qlogin при этом происходит до считывания каких-либо пользовательских (и многих
общесистемных) профильных файлов. Из чего следует, во-первых, необходимость
указания полного пути к исполняемому файлу вызываемой программы (как в примере)
- ведь переменная $PATH еще не определена. А во-вторых, сложные программы,
зависящие от многих конфигурационных файлов, запустить как опцию команды
qlogin не удастся. Так, моя попытка автоматом грузить на 6-й консоли Инксы "в
лоб", с помощью опции вида --command="/usr/X11/bin/startx" успехом не увенчалась,
вызвав только поток сообщений об отстутствии файлов типа xinit, xautority
и т.д. Вероятно, задача эта решаема, но как - пока руки не дошли...
И еще следует помнить, что консоль, на которой через /etc/inittab и qlogin
запущена какая-либо программа, уже не удастся использовать для иных целей:
попытка выйти из программы top (в приведенном выше примере) приведет, благодаря
акции respawn, к перезапуску qlogin и, через его опцию, нового экземпляра
той же программы top.
Таким образом, мы обеспечили себя достаточным количеством виртуальных консолей
и удобным способом доступа к ним. Теперь посмотрим, как создать в единичной
консоли максимальный комфорт для практической работы. Задача эта распадается
на две части - комфорт при выводе и комфорт при вводе. Поскольку глаз у нас
всего двое, и больше уже не будет (а руки на худой конец можно заменить протезами),
начнем
с вывода.
содержание назад вперед