Perl для системного администрирования


Обращаем внимание на неожиданные или несанкционированные изменения - часть 4


print "\t".$statnames[$i]." is now ".$current->[$i];

print " (should be ".$saved->[$i].")\n":

} }

Для использования этой программы можно набрать checkfile -p /etc/passwd » checksumfile. В файле checksumfile теперь будет храниться строка, которая выглядит так:

/etc/passwd|1792|11427]33060)1|0|0|24959|607|921016509|921016509|8192|2

Этот шаг нужно повторить для каждого файла, за которым мы наблюдаем. Затем вызов сценария с аргументом checkfile -с checksumfile будет сообщать обо всех изменениях. Например, если я удалю один символ из /etc/passwd, сценарию это не понравится, и он выведет такое сообщение:

/etc/passwd:

size is now 606 (should be 607)

mtime is now 921020731 (should be 921016509)

сtime is now 921020731 (should be 921016509)

Перед тем как двигаться дальше, необходимо сказать об одном приеме, который мы применили в программе. В следующей строке проверяется равенство двух списков (сделано это на скорую руку):

if ("®savedstats[1..12]' ne "@currentstats"):

Perl автоматически преобразовывает список в строку, склеивая элементы списка через пробел:

joint" ",ssavedstats[1. . 12]))

и затем уже сравнивает получившиеся строки. Этот прием хорошо работает для коротких списков, в которых имеет значение порядок и количество элементов. В большинстве других случаев необходимо использовать итеративный подход или хэши, как описано в списках часто задаваемых вопросов perlfaq, входящих в состав Perl.

Теперь, когда вы выяснили атрибуты файлов, я вынужден вас огорчить. Проверка того, что атрибуты файлов не изменились, - это хорошая идея, но не больше. Не представляет большого труда изменить файл, оставив неизменными такие атрибуты, как время доступа и модификации. В Perl даже есть функция, предназначенная для изменения времени доступа и модификации. Так что пришло время применить более мощные инструменты.

Обнаружение изменений в данных - это одна из сильных сторон алгоритмов, известных как криптографические хэш-функции («message-di-gest algorithms»). Вот как Рон Райвест (Ron Rivest) описывает алгоритм «RSA Data Security, Inc. MD5 Message-Digest Algorithm» в RFC1321:




- Начало -  - Назад -  - Вперед -



Книжный магазин