# сообщение об отказе в регистрации
echo $MSG
sleep 2
exit 1
else
# нет совпадения, следующая итерация
continue
fi;;
esac
done < $LOCKOUT
}
if check_lockout; then
if grep 'all\>' $LOCKOUT >/dev/null 2>&1
then
#сначала проверьте, имеется ли слово "all". Если это слово
#присутствует, все, кроме root, должны держаться подальше
if [ "$LOGNAME" != "root" ]; then
echo $MSG2
sleep 2
exit 2
fi
fi
# обработка информации об обычных пользователях
get_users
fi
27.5. Сценарий logroll
Некоторые системные журнальные файлы увеличиваются довольно быстро. Становится затруднительным вручную уточнять размеры журнальных файлов и выполнять прокрутку определенного журнала (обычно, с помощью отметки даты). Поэтому назрела необходимость создания сценария для автоматизации этой процедуры. Сценарий выполняется с помощью утилиты cron, и если какой‑либо журнальный файл достигает определенного размера, осуществляется прокрутка данного журнала и создание нового журнального файла.
Этот сценарий может быть легко обновлен для работы с иными журнальными файлами. Например, при обработке системных журнальных файлов можно применить другой сценарий, который выполняется еженедельно и усекает журнальные файлы. Если необходимо просмотреть более ранние сообщения, нужно проверить резервную копию; при работе в 16–недельном цикле это нетрудно.
Ограничение размера устанавливается с помощью переменной BLOCKLIMIT. Эта переменная указывает размер блока, который в данном случае равен восьми и соответствует 4 Кб, При необходимости можно установить большее значение. Информация обо всех журнальных файлах, подлежащих проверке, хранится с помощью переменной logs.
Затем с помощью этой переменной и цикла for выполняется проверка каждого журнального файла. Применяя команду du, можно оценить размер журнального файла. Если размер файла превышает значение blocklimit, журнальный файл копируется и с добавлением временной метки присоединяется к этому файлу. Затем исходный файл обнуляется, и изменяются права владения на группу файлов.
Сценарий выполняется с помощью утилиты cron два раза в неделю; при этом создается резервная копия файла с указанием временной метки. Поэтому при возникновении проблем можно быстро отследить выполненные действия.
$ pg logroll
#!/bin/sh
#logroll
#усечение журнальных файлов, размеры которых более MARK
#может использовать и для почтовых ящиков?
#максимальный размер журнального файла 4096 к
BLOCK_LIMIT=8
MYDATE=`date +%d%m`
# список журнальных файлов для проверки…ваш список может быть другим!
LOGS="/var/spool/audlog /var/spool/networks/netlog /etc/dns/named_log"
for LOG_FILE in $LOGS
do
if [ -f $LOG_FILE ]; then.
# определение размера блока
F_SIZE=`du -a $LOG_FILE | cut -f1`
else
echo "`basename $0` cannot find $LOG_FILE" >&2
#можно выйти здесь, но следует убедиться, что проверены все
#журнальные файлы
continue
fi
if [ "$F_SIZE" -gt "$BLOCK_LIMIT" ]; then
#копирование журнального файла и присоединение к нему даты в формате ddmm
cp $LOG_FILE $LOG_FILE$MYDATE
#создание нового пустого журнального файла
>$LOG_FILE
chgrp admin $LOG_FILE$MYDATE
fi
done
27.6. Сценарий nfsdown
Если в вашей системе имеется файловая система nfs, вы наверняка оцените преимущества приведенного ниже сценария. Иногда приходится следить за работой нескольких компьютеров и перезагружать их во время работы. Эту задачу следует выполнять как можно скорее.
Если везде смонтированы удаленные каталоги, не следует рассчитывать на то, что процесс демонтирования nfs будет выполнен в ходе перезагрузки. Желательно выполнять все вручную; кроме того, такой подход экономит время.
При выполнении сценария (на всех компьютерах) демонтируются все каталоги nfs, что позволяет довольно быстро выполнить перезагрузку.