#peter находится в долговременном отпуске и вернется в следующем месяце
peter
#lulu отсутствует две недели, вернется в конце месяца
lulu
dave
pauline
Рассмотрим, как функционирует сценарий. Сначала выполняется команда trap для игнорирования сигналов. Вследствие этого пользователь не может прервать выполнение сценария. Если имеется файл lock.users, сценарий продолжает выполняться. Первым делом проверяется наличие слова "alf" Если это слово присутствует, тогда не принимаются во внимание имена всех пользователей из данного файла. Не следует применять строку комментария для устранения влияния слова "all"; этот путь не приведет к успеху. Однако можно устранить из комментария имена пользователей.
Если обнаружена запись "all", блокируются имена всех пользователей, кроме пользователя root. Чтобы удостовериться в том, что найдено точное соответствие шаблону, применяют шаблон all\> команды grep. На экран для пользователей системы выводится сообщение о том, что система в данный момент недоступна.
Основной функцией является функция get_users. Она реализует просмотр файла lockout.users, причем игнорируются все строки, начинающиеся с символа хэша. Выполняется сравнение имен и проверяется, что имя пользователя root не содержится в файле. В результате этого имя пользователя root блокируется.
Регистрационное имя пользователя, находящегося в текущий момент в системе, извлекается из переменной LOGNAME и сравнивается со значением переменной names. Переменная names сохраняет имя текущего пользователя из просматриваемого файла lockout.users. Если совпадение найдено, значение переменной LOGNAME отображается вместе с сообщением. Затем пользователь завершает работу сценария.
Этот сценарий выполнялся на нескольких машинах, которые охватывали до 40 пользователей. Во время процесса регистрации скорость выполнения сценария была довольно высока. Сценарий использовался с целью временной блокировки доступа для тех пользователей, которые отсутствовали более недели. Кроме того, доступ для отдельных пользователей блокировался ежедневно на определенное время, в течение которого обновлялись жизненно важные системы.
В файл /etc/profile следует поместить следующую строку. Эта строка может быть размешена в конце файла, тогда пользователи получат возможность просматривать это сообщение первым среди дополнительных сведений.
. /apps/bin/deny.access
Каталог /apps/bin является областью, где можно хранить все глобальные сценарии. Возможно применение другой области, однако при этом следует убедиться в том, что каждый пользователь может выполнить этот сценарий и воспользоваться каталогом, в котором он находится.
Если получено сообщение об ошибке "permission denied" ("разрешения нет"), значит, сценарий или каталог не имеют достаточного уровня разрешения.
В данном случае файл lockout.users находится в каталоге /apps/etc. Этот каталог можно изменить, поскольку ваша структура наверняка отличается от рассматриваемой. Поскольку файл является исходным, с помощью команды set можно просматривать код функции (но не фактический файл lockout.users). Если это затруднительно, примените команду unset для удаления функции после ее выполнения. Поместите команду unset непосредственно после обращения к сценарию в файл /etc/profile. Например:
unset get_users
Сценарий имеет следующий вид:
$ pg deny.access
#!/bin/sh
#deny.access
trap "" 2 3
#откорректируйте следующую строку,
#если местоположение файла LOCKOUT.USERS изменено.
LOCKOUT=/apps/etc/lockout.users
MSG="Sorry $LOGNAME, your account has been disabled, ring the administrator"
MSG2="Sorry $LOGNAME, the system ls unavailable at the moment"
check_lockout ()
#check_lockout
#проверка наличия файла, содержащего имена для блокировки
{
if [ -r $LOCKOUT ] ; then
return 0
else
return 1 fi
}
get_users ()
#get_users
#чтение файла, если содержимое LOGNAME совпадавет с именем в lockout.users
#отбросьте его!
{
while read NAMES
do
case $NAMES in
\#*);; #игнорируйте комментарии
*)
#если кто‑либо попытается блокировать root,
#в этом сценарии ему это сделать не удастся
if [ "$NAMES"="root" ]; then
break
fi
if [ "$NAMES"="$LOGNAME" ]; then