Мережевіслужби Linux

Деінсталюйте всі мережеві служби, які вам не потрібні. Служби, які не встановлені, не працюють і тому є абсолютно безпечними. Часто при роботі з найпотрібнішими мережевими службами буває достатньо лише надати доступ до служби лише для кількох певних клієнтів (які, зокрема, знаходяться у локальній мережі). Наприклад, практично виключено випадок, коли вам довелося б надавати доступ до служб сервера друку в Інтернеті.

Що стосується Apache, Samba, MySQL та багатьох інших «великих» служб, то заходи захисту необхідно вживати у відповідному конфігураційному файлі. На щастя, є кілька мережевих служб, які для керування доступом звертаються до бібліотеки TCP-Wrapper. Ця бібліотека дозволяє здійснювати централізовану конфігурацію.

Необхідні мережі повинні виконуватися з мінімальним набором прав. Їх виконанням займаються сценарії Init-V, які постачаються разом із дистрибутивом. Якщо це можливо і доцільно, запустіть служби без прав адміністратора з облікового запису, створеного спеціально для цих цілей, або в середовищі chroot, яке не дозволить звертатися до файлів через обмеження каталогів.

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

Бібліотека TCP-Wrapper

На сервері локальної мережі зазвичай не слід робити всі мережеві служби глобально доступними. Цілком достатньо забезпечити доступ до служб у межах локальної мережі. Деякі мережеві служби звертаються для забезпечення такого базового захисту до бібліотеки TCP-Wrapper. До подібних службвідносяться, зокрема, SSH-сервер і NFS-сервер, а в SUSE - служба CUPS. Служби, які запускаються демоном інтернет-сервісів, також користуються бібліотекою TCP-Wrapper.

Файли /etc/hosts.allow та hosts.deny

Файли /etc/hosts.allow та /etc/hosts.deny визначають, з яких комп'ютерів якими службами можна керувати. Установки діють лише для мережних служб, які використовують для контролю доступу бібліотеку TCP-Wrapper або команду tcpd. За умовчанням обидва файли порожні, тобто ніякі обмеження не діють.

Спочатку бібліотека TCP-Wrapper інтерпретує hosts.allow: якщо у цьому файлі прямо зазначено, що доступ дозволено, то здійснюється контроль. В іншому випадку бібліотека інтерпретує hosts.deny: якщо в цьому файлі доступ заборонено, клієнт отримує повідомлення про помилку. Увага: у всіх випадках, для яких відсутні правила і /etc/hosts.allow, і /etc/hosts.deny, доступ дозволяється!

Щоб забезпечити максимально безпечну конфігурацію, потрібно заборонити запуск будь-яких мережевих служб - це робиться за допомогою команди all:all /etc/hosts.deny. Завдяки команді spawn будь-яка спроба запустити мережну службу протоколюватиметься у файлі /var/log/deny.log.

Наступний крок – дозволити у файлі /etc/hosts.allow використання певних служб. Наведена далі як приклад конфігурація дозволяє: отримувати з локального комп'ютера (localhost) доступ до будь-яких служб; обмінюватися інформацією з ssh з будь-якого комп'ютера, що знаходиться в мережі

(це стосується будь-яких комп'ютерів, підключених до Інтернету); використовувати NFS та SWAT у локальній мережі.

Забезпечення підтримки бібліотеки TCP-Wrapper

Рядок cupsd у SUSE потрібний тому, що сервер друку CUPS у цьому дистрибутиві компілюється з підтримкоюбібліотеки TCP-Wrapper (чого не скажеш про більшість інших дистрибутивів). Але при цьому необхідно враховувати, що доступ до мережного принтера додатково керується CUPS-специфічним файлом /etc/cups/cups.conf.

За допомогою команди ldd ви легко можете самі визначити, чи використовує та чи інша програма бібліотеку TCP-Wrapper (libwrap). Результати для cupsd та sshd у SUSE та Ubuntu виглядають так:

user$ ldd /usr/sbin/cupsd grep wrap (SUSE)

libwrap.so.O => /lib64/libwrap.so.O (0x00007flf3fece000) user$ ldd /usr/sbin/sshd grep wrap

libwrap.so.O => /lib64/libwrap.so.O (0x00007fbfl2455000)

user$ ldd /usr/sbin/cupsd grep wrap (Ubuntu) user$ ldd /usr/sbin/sshd grep wrap

libwrap.so.O => /lib/libwrap.so.O (0xb7f85000)

Запуск мережевих служб без прав адміністратора

Для того, щоб такі програми, як Apache і MySQL без проблем виконували за вас вашу роботу, немає необхідності запускати їх з правами адміністратора. У більшості дистрибутивів таких служб передбачені спеціальні облікові записи, назви яких від дистрибутива до дистрибутиву відрізняються. Наприклад, в Ubuntu Apache виконується під обліком www-data і тому може звертатися лише до тих файлів, які доступні для читання з цього облікового запису. Ви можете в цьому переконатися за допомогою команди ps axu (але один екземпляр Apache все ж таки повинен працювати з правами адміністраторами відповідає лише за запуск інших екземплярів Apache і не виконує жодних інших завдань).

Оскільки сценарії Init-V зазвичай виконуються з правами адміністратора, для запуску мережевого демона з іншого облікового запису потрібен спеціальний механізм. У найпростішому випадку процес необхідно запустити у формі su ім'я облікового запису -c демоя.процесіввсежепередбачені більш тонкі механізми, в ході яких програма ініціалізується з правами адміністратора і тільки потім переходить до роботи з обліковим записом, для якої визначено меншу кількість прав. У деяких програмах, наприклад syslog, передбачено спеціальний параметр, що дозволяє вказати потрібний обліковий запис. У Apache, MySQL та деяких інших серверних служб, які запускаються у кількох примірниках, керуючий процес зберігає за собою права адміністратора. Але зазвичай такий процес виконує нетипові завдання (як правило, запуск та зупинку інших екземплярів).

Запуск мережевих служб у середовищі chroot

Правда, на практиці мережеві служби запускаються не за допомогою chroot, а за допомогою спеціального параметра, призначеного для вказівки chroot-каталогу. У цьому каталозі повинні бути всі необхідні бібліотеки, конфігураційні файли і т. д. Всі ці файли в потрібний каталог перед запуском скопіює сценарій Init-V.

У SUSE за замовчуванням DHCP-сервер та сервер імен запускаються у середовищах chroot. Як DHCP-сервер у цьому випадку використовується спеціальна оновлена ​​версія dhcpd, в якій chroot-каталог можна задавати за допомогою додаткового параметра - chroot. Що стосується сервера імен, то в даному випадку для вказівки chroot-каталогу використовується параметр -t.

Якщо за мережевою службою спостерігає SEEinux або AppArmor і правила безпеки сформульовані правильно, то можна обійтися і без застосування середовища chroot, а якщо воно і використовується, то ніяк не сприяє підвищенню безпеки. У Fedora і Red Hat chroot-каталоги не застосовуються за замовчуванням, а система повністю покладається на дотримання правил SEEinux.Читайте так: Налаштування та робота з брандмауером для Linux