Книга: Linux-сервер своими руками

21.7.2. Управление пользователями

21.7.2. Управление пользователями

Сначала разберемся, что мы подразумеваем под управлением пользователями. Обычно все управление заключается в отслеживании времени работы посетителя и когда его время вышло, сообщении ему об этом. Естественно, если пользователей много, проследить за каждым — это довольно трудная задача. Даже если у вас будет журнал, в котором вы будете записывать время работы каждого пользователя, через пару дней вам основательно надоест каждые десять минут проверять, у какого посетителя вышло время. Например, если в вашем распоряжении 30 компьютеров, вам нужно будет каждые 10 минут просматривать все 30 записей.

Управлять пользователями можно по-разному. Можно по истечении определенного времени просто «отрубить» пользователя от системы. На что в ответ вы получите массу жалоб и вряд ли ваш зал будет пользоваться популярностью при таком управлении. Вы, конечно, можете привести аргументы в свое оправдание: мол, он (посетитель) знает, что оплатил один час и должен «чувствовать» время. Однако, в нашем случае нужно учитывать тот факт, что у игрока отсутствует это самое «чувство, времени», во время игры он не ощущает, прошло полчаса или пятьдесят минут. Поэтому, скорее всего, посетитель не успеет сохранить игру до того, как его отключат от системы. Можно предупредить посетителя о таких правилах, но при этом вы заставляете его быть в постоянном напряжении, постоянно поглядывая на часы. От такой игры никто не получит удовольствие.

Мы уже пришли к выводу, что теория «жесткого» управления нам не подходит, и сейчас рассмотрим более лояльный способ управления. Через определенное время, например, за пять минут до того, как у посетителя выйдет время, мы предупредим его об этом. За это время посетитель успеет сохранить игру и доплатить, если он захочет продолжить игру. Думаю, пять минут будет вполне достаточно, чтобы дойти к столику администратора.

Все вышеописанные функции выполняются специальным программным обеспечением для игровых залов. Для игровых залов, использующих операционную систему Windows, создана масса программ такого рода. К сожалению, мне не встречался нормальный пакет программ управления игровым залом для Linux. Можно было бы использовать K12 Linux Terminal Server, но этот программный комплект больше подходит для управления учебным классом, чем для управления игровым залом. В нет есть много ненужных функций, которые вы вряд ли будете использовать. Вам нужна программа, которая:

1. Предупредила посетителя, что через определенное время ему нужно освободить место.

2. Через определенное время «отрубила» его от системы.

3. С помощью которой вы могли бы отправить сообщение любому посетителю.

Как видите, для вас вполне достаточно трех этих функций. Аналогичное программное обеспечение ведет также протокол: кто, когда и сколько работал. Нам же эта функция не нужна, потому что протоколы ведет сама Linux (точнее, программы протоколирования). В любой момент вы можете посмотреть, кто и сколько работал. Например, узнать, когда регистрировался и сколько времени отработал в системе пользователя den можно с помощью команды (см. рис. 21.11):

last den


Рис. 21.11. Журнал регистрации

Аналогично, если вы введете команду last без параметра, то увидите полный отчет о времени работы пользователей. Узнать время последней регистрации пользователя можно с помощью команды lastlog (рис. 21.12). Программы last и lastlog являются средствами просмотра файла /var/log/lastlog, который нельзя просмотреть «невооруженным глазом».


Рис. 21.12. Время последней регистрации

Вернемся к нашему программному обеспечению для управления посетителями. В силу невозможности найти какое-нибудь достойное уже созданное программное обеспечение, я решил написать свою «программу» для управления игровым залом. Данное решение не претендует на первое место среди программ такого рода, но обладает всеми необходимыми функциями и достаточно простое в обращении. Обычно программы такого рода состоят из двух частей: модуль-клиент и модуль-сервер. Модуль-клиент обычно установлен у администратора и он может управлять множеством компьютеров локальной сети. Модуль-сервер запускается на компьютере посетителя и опрашиваетнекоторый порт. Как только модуль-сервер получил от администратора команду, он выполняет определенные действия, например, при получении команды timeout он отсоединяет пользователя от системы.

В предлагаемом мною решении модуль-клиент, как и модуль-сервер, отсутствуют. Сейчас разберемся почему. Мы настраиваем основной сервер так, чтобы к нему подключались все остальные компьютеры в сети — компьютеры посетителей. Поскольку, пользователь уже зарегистрирован в нашей системе, для того, чтобы отключить его, достаточно просто локально «прибить» процесс этого пользователя. Под процессом следует понимать оконный менеджер данного пользователя.

Естественно, все компьютеры сети будут X-терминалами вашего сервера. Настройка X-терминала обсуждалась в гл. 20. При настройке руководствуйтесь такими правилами. Имя пользователя должно совпадать с именем рабочей станции. Например, если имя рабочей станции game1, то на этой станции должен быть зарегистрирован пользователь game1. На сервере должны быть зарегистрированы все пользователи: game1, game2, …, gameN. Пароли установите по своему усмотрению, но пароли пользователей на сервере и на рабочих станциях тоже должны совпадать. Все это необходимо для регистрации пользователя на сервере. Если настройка Х-терминала показалась вам слишком сложной, сейчас рассмотрим более простой путь. В гл. 20 рассматривалась настройка «чистого» X-терминала, то есть загрузка X-терминала осуществлялась по сети, а на самом компьютере даже не был установлен жесткий диск. Сейчас же мы попытаемся настроить «условный» X-терминал. Почему условный? Операционная система будет устанавливаться на компьютеры посетителей как обычно, вместе с системой X Window. Затем в файле /etc/inittab вы заменяете строку:

X:123456:respawn:/usr/bin/X11/X

на строку:

X:123456:respawn:/usr/bin/X11/X –query 192.168.0.1

Данная команда (X –query 192.168.0.1) обеспечивает загрузку системы X по умолчанию (уровень выполнения 5) и при этом будет использоваться сервер X с IP-адресом 192.168.0.1. Не сложно догадаться, что компьютер с таким адресом — это и есть ваш сервер. Настройку сервера терминалов выполните так, как описано в гл. 20. При этом на сервере и клиенте желательно установить одну и ту же версию системы X Window.

Если на всех компьютерах установлено одно и то же оборудование, а в большинстве случаев это так, поступите таким образом: настройте систему X Window только на сервере, а затем обеспечьте доступ по NFS клиентам к файлам системы X Window. В этом случае на компьютере клиента вообще не нужно устанавливать систему X Window, а запускать ее непосредственно с сервера по сети, используя NFS. Настройка сетевой файловой системы (NFS) обсуждалась в гл. 8. Я рекомендую использовать именно второй способ. Запуск игр тоже можно осуществлять по сети, предварительно расположив их в каталоге, доступному по NFS. Естественно, для запуска и нормальной работы игр по сети нужна сеть, обеспечивающая скорость передачи данных 100 Мбит/с. Концентраторы (hub) в данной сети лучше заменить коммутаторами (switch).

Теперь перейдем к написанию самой программы. Данную программу мы напишем, используя «подручные» средства: стандартные программы Linux и командный язык интерпретатора shell. Во-первых, командный язык интерпретатора bash уже рассмотрен в этой книге. Во-вторых, если написать эту программу на С или Pascal, то читатель должен владеть данным языком программирования, что усложнит чтение книги.

Просмотреть всех зарегистрированных в системе пользователей можно с помощью команды w (рис. 21.13).


Рис. 21.13. Команда w

С помощью данной команды можно выяснить, сколько времени работает пользователь, использование процессора пользователем, какая программа выполняется в данный момент, а также общую загрузку системы (load average). Кроме другой полезной информации, команда w сообщает нам с какой машины произошла регистрация пользователя в нашей системе. Будем рассматривать случай, когда имя пользователя будет совпадать с именем машины, что впоследствии значительно упростит вам администрирование залом.

Вывести все процессы, которые принадлежат пользователю, можно с помощью команды:

ps --user username

На рис. 21.14. показаны процессы, принадлежащие пользователю root.


Рис. 21.14. Процессы, принадлежащие пользователю root

Теперь рассмотрим исходный текст этой программы.

Листинг 21.2. Программа newclient

#!/bin/bash
#  Управление игровым залом — добавление нового клиента
#  Распространяется по лицензии GPL
# (с) 2002 Denis Kolisnichenko, dhsilabs@mail.ru
#  Шрифт для отображения сообщения
FONT="-cronyx-fixed-*-*-*-*-*-*-*-*-*-*-koi8-r"
# Размеры окна
GM="700x70"
# Сообщение
MSG="Ваше время вышло. В течение 5 минут вы можете оплатить дополнительное время"
if [ $# –It 4 ] ; then
 { echo "Usage: newclient warntime time user num";
 exit 1;
 }
fi;
# Спим
sleep $1
# Отображаем предупреждение, поскольку время warntime вышло
xmessage –display server:$4 –fn $FONT –geometry $GM –bg black –fg green $MSG
sleep $2
P=`ps -–user $3 | grep –i gnome-session | /bin/awk –F " " '{ print $1 }' `
echo $P
# Убиваем сессию пользователя
kill –9 $P
echo "Time of user $3 is out"

Запуск программы:

newclient 3540 3600 game1 1
newclient 55m 60m game2 2
newclient 55m 1h game3 3
newclient 23h 1d game4 4

При запуске программы нужно указать четыре параметра. Первый из них — это время, через которое будет отображено сообщение. Сообщение можно изменить по своему вкусу, отредактировав значение переменной MSG (также, как и другие переменные). Следующий параметр — это время, по истечению которого пользователь будет «отрублен» от системы. Время можно указывать в секундах, в минутах (суффикс т), часах (суффикс h), днях (суффикс d).

Третий и четвертый параметры — это соответственно имя пользователя и номер дисплея. Номер дисплея будет совпадать с номером пользователя, если вы настроите систему согласно моим рекомендациям. Например, если имя пользователя game1, то номер дисплея — 1.

Обратите внимание на следующую строку программы:

xmessage –display server:$4 –fn $FONT –geometry $GM –bg black –fg green $MSG

Данная строка обеспечивает отображение сообщения MSG на дисплее с номером $4 компьютера server. X-терминал посетителя будет подключен как раз к дисплею с номером $4. При этом посетитель увидит на экране примерно то, что показано на рис. 21.15.


Рис. 21.15. Предупреждение об истечении времени

Следующий аспект, на который вам нужно обратить внимание — это оконная среда пользователя. Если пользователь использует среду Gnome, то в списке процессов пользователя будет процесс gnome-session. Если завершить этот процесс, пользователь будет отключен от системы. На этом и основывается данный метод работы программы. В листинге 21.2 подразумевается, что пользователь использует среду Gnome:

Р=`ps –user $3 | grep –i gnome-session | /bin/awk –F " " '{print $1 }' `

Если ваши посетители используют среду KDE, измените эту строку на аналогичную ей:

P=`ps –user $3 | grep –i kdeinit | /bin/awk –F " " '{ print $1 }'`

Как проконтролировать, какую среду использует посетитель? Очень просто: при установке системы установите одну из сред: или KDE, или Gnome. Можно также изменить исходный текст программы newclient, добавив соответствующую проверку, но зачем усложнять себе жизнь?

Еще раз рассмотрим запуск программы. Данную программу можно запускать в фоновом режиме, освободив консоль:

newclient 55m 60m game1 1 &

Эта команда будет выполняться в фоновом режиме. Как только выйдет время (1 час), на консоли вы увидите сообщение:

Time of user game1 is out

Оглавление книги


Генерация: 0.070. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз