Це канонічне запитання щодо закріплення стека LAMP
Які абсолютні вказівки щодо захисту LAMP-сервера?
Це канонічне запитання щодо закріплення стека LAMP
Які абсолютні вказівки щодо захисту LAMP-сервера?
Відповіді:
Відповідь Девіда - це хороша основа загальних принципів загартовування сервера. Як зазначив Девід, це величезне питання. Конкретні методи, які ви використовуєте, можуть сильно залежати від вашого оточення та того, як буде використовуватися ваш сервер. Попередження, це може зайняти багато роботи в тестовому середовищі, щоб розробити і зробити все правильно. Далі слід багато роботи над інтеграцією у виробниче середовище та, що ще важливіше, бізнес-процес.
Спочатку, проте, перевірте, чи є у вашої організації якісь політики посилення, оскільки вони можуть бути найбільш актуальними. Якщо ні, то залежно від вашої ролі, це може бути чудовий час, щоб їх розробити. Я також рекомендую братися за кожен компонент окремо знизу вгору.
L
Існує маса хороших посібників, які допоможуть вам допомогти. Цей список може чи не допоможе вам залежно від вашого розповсюдження.
Аналого
Apache може бути цікаво , щоб забезпечити. Мені легше загартувати ОС і підтримувати зручність використання, ніж Apache або PHP.
М
P
Це наштовхується на всю ідею безпечних програм програмування, яка є цілою своєю дисципліною. SANS та OWASP мають смішний обсяг інформації з цього приводу, тому я не намагатимусь повторити її тут. Я зупинюсь на конфігурації виконання та дозволю вашим розробникам хвилюватися про інше. Іноді 'P' у LAMP відноситься до Perl, але зазвичай це PHP. Я припускаю останнє.
Ви задали питання, яке, відверто кажучи, гідне кількох книг на цю тему. Але є деякі загальні основні рекомендації, які добре працюють:
Сподіваюся, що допоможе вам розпочати роботу.
Ось хороший контрольний список, з якого я люблю починати.
Якщо додати те, що пропонує Девід, тим більш модульною є ваша установка, маючи на увазі обмеження доступу до певних користувачів / груп, створених спеціально для однієї задачі та обмеження їх сфери застосування, тим більш захищений ваш стек LAMP: Приклад цього - мати користувача Apache для файлів / папок Apache з дозволами, встановленими відповідно, а не в будь-яких групах, які мають доступ до критичних системних файлів / папок. Користувач, який може отримати доступ до таблиць MySql, пов’язаних із вашими веб-сайтами, які ви збираєтеся обслуговувати, та лише до цих таблиць. Крім того, ви можете обмежити їх доступ, щоб надати мінімальний обсяг доступу від дзвінка PHP. Також переконайтесь, що ім’я користувача MySQL, яке використовується / відкривається через файл PHP, не є тим самим іменем користувача або паролем, що використовується для іншого користувача.
Що це означає: якщо або користувач apache, або користувач MySql піддаються компрометації, вони не можуть заподіяти ніякої шкоди за межами області папок (ів), з яких апаш має доступ (у випадку з користувачем apache) та поза таблицею ( s) / database (s) (у випадку користувача для бази даних MySQL).
Якщо якимось чином користувач MySQL мав би бути поставлений під загрозу, наприклад, він не зміг би отримати доступ до бази даних та скинути всі бази даних з MySQL та зруйнувати всі ваші дані. Вони МОЖУТЬ за деяких обставин мати можливість скидати таблиці або вставляти інформацію в деякі таблиці в ізольованій базі даних, тому важливо надавати доступ до таблиць лише там, де це абсолютно необхідно, і надавати лише необхідні дозволи ... якщо ви цього не зробите ' не потрібно мати привілеї для скидання таблиць або привілеї оновлення, а потім не надавати їх цьому користувачеві.
Також якщо з MySQL з якихось причин знайдено ім’я користувача та пароль вашого адміністративного акаунта, якщо ви використовуєте інше ім’я користувача, ніж будь-які імена користувачів у вашій системі, вони повинні спочатку порушити безпеку вашої системи, перш ніж потрапити у вашу базу даних, щоб зробити шкоду. Те саме стосується користувача apache та доступу до файлів.
Приклад часу! Я збираюся навести системний приклад, щоб якось спростити ідею.
скажімо, у вас у вашій системі є користувачі (root повинен бути відключений для безпеки через щось на зразок umod -l або passwd -l тощо): Джон, Барні, Теренс та Ліза.
ви можете створити користувача в MySQL з ім'ям bigbird (переконайтеся, що ви використовуєте хешований пароль). Bigbird має лише привілеї вибору та оновлення привілеїв, але не випадати та створювати, і, звичайно, ні . Крім того, ви створюєте іншого адміністративного користувача MySQL з іменем garfield для роботи над базою даних MySQL і ви видаляєте кореневого користувача з бази даних MySQL, щоб його не можна було компрометувати. гарфілд був наданий . привілеї в усьому MySQL (фактично це просто перейменування root).
Тепер ви створюєте або групу apache, або користувача, і ми називаємо її apweb2. Appweb2 не є членом інших груп, і всі файли / папки для apache зберігаються в / home / apweb2 /. Кожен віртуальний хост мав би свою папку, і кожен з цих хостів мав би корінь документа, встановлений для цієї підпапки. Символьні посилання будуть відключені, щоб випадково не забезпечити доступ до решти системи.
Крім того, ви можете обмежити доступ до ssh лише певним користувачам (або певним групам, мені подобається розміщувати їх у групі ssh і робити так, щоб єдине, що вміє використовувати ssh).
Крім того, ви можете вибрати, які користувачі мають привілеї sudo, щоб ще більше обмежити речі. Ще один крок, який ви можете зробити далі - це зробити так, щоб будь-які користувачі ssh не змогли користуватися sudo, ви можете створити спеціальних користувачів, які можуть використовувати sudo, які не можуть використовувати ssh, так що після входу в систему, ви повинні увійти до іншого користувача, щоб мати доступ до судо.
Таким чином, модулюючи кожен сегмент, якщо один зіпсований, весь стек не буде порушений, і ви можете виправити 1 проблему, замість того, щоб починати все з нуля.
Я вважаю цей документ від SANS.org справді корисним http://www.sans.org/score/checklists/linuxchecklist.pdf
В даний час не нехтуйте віртуалізацією контейнерів, а саме Docker, systemd-nspawn та механізмами віртуалізації контейнерів, на яких вони побудовані (простори імен, групи). Використання віртуалізації контейнерів дозволяє ізолювати процеси, наприклад, якщо одна зі служб порушена, зловмисник не отримає доступ до інших служб.
У випадку LAMP можна використовувати, наприклад, чотири Docker-контейнери з SSH-сервером, Apache, MySQL, PHP-FPM / Python / Perl / тощо.