Інструментарій системного адміністратора перевірка правильності конфігурації системи

Про цю серії статей

Зазвичай адміністратор UNIX® регулярно застосовує ряд утиліт, прийомів і систем. Для спрощення різних процесів можна використовувати стандартні утиліти, інтерфейс командного рядка і сценарії. Частина цих інструментів поставляється разом з операційною системою, але більша частина прийомів напрацьовується на основі практичного досвіду і бажання адміністратора спростити своє життя. Мета цієї серії статей - розповісти про більшість доступних інструментів для різних UNIX-систем, включаючи засоби спрощення адміністрування гетерогенних середовищ.

Перевірка вмісту файлів

Перевірка правильності конфігураційних файлів (і, в разі необхідності, файлів додатків), які складають основу вашої UNIX-системи і забезпечують її безперебійну роботу, може зайняти багато часу. Крім того, ця процедура є ключовим елементом безпеки, не просто гарантуючи коректність налаштувань системи, а перевіряючи, чи є система безпеки дійсно надійної.

Отже, як перевірити вміст файлів?

Існує кілька параметрів, які необхідно прийняти до уваги. Кожен з пунктів, перерахованих нижче, потенційно може привести до проблем, якщо вони будуть змінені в робочій конфігурації:

  • вміст файлу;
  • власник файлу;
  • група власника;
  • дозволу файлу;
  • час зміни;
  • час створення.

Найпростіший спосіб - це зберегти копію конфігураційних файлів (і їх відповідні параметри) на іншому комп'ютері і потім періодично виконувати порівняння локальних файлів з віддаленими. Проблема полягає в тому, що для зберігання копії конфігураційних файлів може знадобитися значні витрати дискового простору, а сама процедура копіювання і порівняння може виявитися досить довгої по часу. Крім того, за час запису копії самі конфігураційні файли можуть змінитися.

Інший часто використовуваний метод - це просто записати інформацію про розмір файлу, датою зміни, прапор і власника. Оскільки ця інформація займає набагато менше місця, її простіше зберігати і швидше перевіряти в порівнянні з повним вмістом файлів.

Проблема полягає в тому, що розмір файлу ще не гарантує збереження вмісту файлу. Розглянемо такий конфігураційний файл, що складається з одного рядка:

І той же самий файл зі зміненою рядком:

Обидві рядки файлу мають довжину 22 символу, але їх вміст різниться і, хоча перевірка розміру файлу не виявить різниці, це порівняно невинне зміна може мати серйозні наслідки.

Як і інші параметри, час зміни, прапор і інша інформація можуть бути змінені, наприклад, можна підмінити час зміни за допомогою команди touch. Навіть час створення файлу можна підробити, змінивши системний час і створивши файл заново.

Недостатньо просто записувати ці фрагменти інформації, необхідний ефективний метод порівняння вмісту файлів. Ймовірно, краще за все для цього використовувати контрольні суми файлів.

Контрольна сума файлу

Створення контрольних сум файлів - це класичний метод порівняння вмісту файлів без необхідності фізичного порівняння всіх байтів в кожному файлі.

Механізм контрольних сум заснований на обробці вмісту файлу і генерації майже унікального відбитка його вмісту. Це завдання можна виконати різними способами. Наприклад, можна додати значення кожного байта поряд з використанням алгоритму, що використовується для складного розрахунку окремих бітів або групи бітів заданого файлу. Остаточний вибір методу розрахунку контрольної суми лежить за межами цієї статті і залежить від використовуваного засоби перевірки контрольної суми.

В UNIX є проста команда для роботи з контрольними сумами - sum. Ця команда дуже обмежена за своїми можливостями, але зате вона створює досить унікальне число, яке можна використовувати для виявлення відмінностей між більшістю файлів. Однак у цього алгоритму є і обмеження. Багато сучасні програми підтримують команду md5. яка створює 128-розрядний відбиток файлу і теоретично може згенерувати унікальну підпис для будь-якого файлу будь-якого розміру.

Алгоритм md5 для генерування інформації про контрольну сумі спочатку був розроблений для створення унікальних відбитків файлів до шифрування файлів з тим, щоб гарантувати перевірку цілісності розшифрованих файлів. Контрольні суми, створені за допомогою md5, можуть бути представлені у вигляді двійковій рядки, шістнадцятковій рядка або рядка, закодованої методом base64. Останній формат використовується в MIME-повідомленнях електронної пошти, щоб забезпечити унікальний ідентифікатор для різних вкладень.

Створення контрольних сум файлів

Оскільки рішення для роботи з інформацією про контрольні суми використовують інтерфейс командного рядка, можна створити контрольну суму будь-якого файлу прямо з командного рядка. Хорошим прикладом використання контрольної суми можуть служити згадані вище файли, які мають однакову довжину, але різний вміст.

Можна створити контрольну суму двох файлів однією командою, як показано в лістингу 1.

Лістинг 1. Створення контрольної суми двох файлів однією командою

Хоча файли відрізняються один від іншого тільки двома символами, виходять дві помітно різняться контрольні суми. У лістингу 2 показані ті ж файли, оброблені за допомогою md5.

Лістинг 2. Обробка файлів за допомогою md5

Ці контрольні суми значно різняться, і не виникає сумнівів, що ці файли якимсь чином відрізняються один від одного.

Іншим методом є використання Perl для створення інформації про контрольні суми. Для цього використовується модуль Perl Digest :: MD5. який здатний створювати контрольні суми MD5 з будь-якого рядка даних або зазначеного файлу.

У лістингу 3 показаний простий скрипт, який повертає контрольну суму MD5 для завантаженого файлу в командному рядку, у вигляді шестнадцатеричной рядки (ідентично формату, показаному в лістингу 2).

Лістинг 3. Скрипт, який повертає контрольну суму MD5

Можна запустити цей скрипт для обробки попередніх файлів. У результаті повинна вийти інформація, ідентична наведеної в лістингу 4.

Лістинг 4. Обробка тих же файлів за допомогою Digest :: MD5

Для спрощення процесу необхідно записати отриману інформацію в файл, щоб пізніше порівняти отриману інформацію. Перед цим додайте додаткову інформацію для порівняння (час зміни, розмір файлів, власник, inode і так далі).

Додавання в звіт додаткової інформації

Функція Perl stat () може отримати з заданого файлу безліч інформації, більшість якої можна використовувати. Список інформації, яку можна отримати, приведений в лістингу 5.

Лістинг 5. Функція Perl stat ()

Можна записувати майже всю цю інформацію, але частина її марна, оскільки або занадто часто змінюється, або скидається при перезавантаженні. Як правило, слід виключити такі параметри:

  • rdev-використовується тільки для спеціальних файлів (пристроїв або конвеєрів), і тому, як правило, його можна виключити.
  • atime-час останнього доступу змінюється при кожному зверненні до файлу. Це означає, що файл буде виглядати як змінений, навіть якщо в дійсності ніяк не змінювався. Відстеження цього параметра може призвести до помилкових спрацьовувань системи порівняння.
  • blksize-використовується в файлової системі вводу-виводу. Малоймовірно, що цей параметр зміниться, проте інші чинники, не пов'язані зі зміною файлу, можуть привести до зміни значення цього параметра, тому його відстеження для контролю цілісності файлів не має сенсу.
  • blocks-кількість блоків, зайнятих файлом в файлової системі. Ця інформація пов'язана з файлом, але якщо розмір файлу вже контролюється, запис цього параметра буде зайвою.

Наступні параметри використовуються для відстеження в особливих випадках:

  • dev-номер пристрою в файлової системі повинен бути постійним незалежно від перезавантажень, якщо не відбувається постійного монтування та відключення файлових систем. Якщо файлові системи монтуються в однаковому порядку при кожному перезавантаженні, номер пристрою повинен залишатися постійним.
  • nlink-кількість фіксованих посилань на файл може виявити створення фіксованої посилання на файл в місці, куди цей файл можна перезаписати і обійти початкового файлу. Не можна мати фіксовану посилання на файл з власником і дозволами, що відрізняються від вихідного файлу.
  • ctime-час зміни inode може змінюватися при створенні файлу або при зміні власника або прапора. Якщо змінився цей параметр, це може означати, що змінилися відповідні параметри файлу, навіть якщо потім вони повернулися до початкових значень.

У лістингу 6 наведено код скрипта, що виводить шлях до файлів і контрольну суму на стандартний пристрій виводу у вигляді окремих колонок. Крім контрольної суми відображається додаткова інформація, тому просто порівнявши видачі, можна зрозуміти, чи змінилися файли.

Лістинг 6. Висновок шляху до файлів, контрольної суми і інших даних на стандартний пристрій виводу

Скрипт використовує модуль Perl File :: Find. який обробляє каталог і шукає всі файли і каталоги в зазначеному місці. Для кожного файлу викликається функція wanted (). а в цій функції для всіх файлів викликається функція genchksuminfo (). Вона отримує інформацію за допомогою stat () і повертає рядок з інформацією про шляхи до файлу, контрольної сумою і додатковими даними. В цьому скрипті інформація просто виводиться на стандартний пристрій виводу.

Каталог для сканування вказується як параметр команди. Для отримання даних про контрольних сумах файлів в каталозі / etc використовуйте команду, показану в лістингу 7.

Лістинг 7. Сканування / etc

Заключна стадія процесу складається в збереженні інформації та забезпеченні способу порівняння поточного стану з еталонним.

Перевірка інформації контрольної суми

Підсумковий скрипт (лістинг 8) заснований на коді з лістингу 6. ​​Цей скрипт значно доповнений в порівнянні з оригіналом, і включає в себе кілька нових функцій:

  • Обробка параметрів командного рядка за допомогою модуля Getopt :: Long. З їх допомогою можна вказати файл контрольної суми (сховище контрольної суми і інший отриманої інформації), порівнювати чи ні нову інформацію з попередньої (за допомогою зчитування вмісту chksumfile) і можливість призначити основний каталог для пошуку. При порівнянні файлів дані оновлюються і відображаються тільки відмінності.
  • Функція loadchksumdata () для завантаження і обробки існуючого файлу даних дозволяє без праці порівняти стару і нову інформацію.
  • Функція gendiff report (). яка безпосередньо порівнює окремі поля поточного і збереженого станів, щоб повідомити про зміни. Ця функція викликається тільки в тому випадку, якщо відомо, що мав місце певний тип змін.
Лістинг 8. Підсумковий скрипт

Для використання цього скрипта спочатку необхідно створити файл з еталонною контрольною сумою і іншими даними, які будуть служити в якості основи для порівняння. Наприклад, для отримання даних про контрольних сумах файлів в каталозі / etc можна використовувати наступну команду:

Тепер, коли є ця інформація, якщо ви внесете зміни в файли і запустіть скрипт повторно, буде створений звіт про зміни. У лістингу 9 можна побачити звіт про зміну файлу / etc / hosts.

Лістинг 9. Звіт про зміну файлу / etc / hosts

Зверніть увагу, що в звіті виведена інформація про зміну файлу і про видалення файлу. При створенні нових файлів в звіт також додається інформація.

Використання інформації контрольної суми

За допомогою скрипта з лістингу 6 можна створити файл, який можна використовувати для тестування і перевірки цілісності системи. Існування цього файлу має на увазі, що необхідно зберігати цю інформацію в безпечному місці, інакше хто-небудь може оновити цю інформацію, в тому числі ті, хто зловмисно використовував комп'ютер і зраджував файли, які ви хочете захистити.

Немає чітких і простих правил щодо цієї інформації, але має бути ясно, що не варто зберігати отриманий файл на тій же машині, де він створений, інакше він може бути знайдений і змінений. Те ж саме відноситься до зберігання файлу на іншій машині в тій же мережі. Як тільки файл буде виявлено, він може бути модифікований або підмінений. Ймовірно, найкращим рішенням буде записати файл на CD або DVD і зберігати його окремо від комп'ютера.

Хоча це трохи ускладнює процес, переваги захисту інформації в цих файлах - безцінні.

висновок

У цій статті ми розглянули створення скрипта, який можна використовувати для перевірки цілісності файлів або каталогу з файлами. Контрольована інформація включає в себе шлях до файлу і контрольну суму, отже, можна порівняти вміст файлів і унікальну інформацію файлів (inode, дозволу, інформацію про власника) і виявити відмінності, якщо вони є.

Використання цього скрипта залишається на ваш розсуд. Можна зберігати інформацію і запускати скрипт періодично, після появи проблем відразу або використовувати цей файл як засіб подальшого діагностики, щоб зрозуміти, які файли змінилися, і створити список файлів для перевірки.

Отримати продукти і технології