Тут я розповім про можливості Apache захищати вміст сервера або його частин.

Директиви Apache для контролю доступу

Контроль за IP

Якщо вам потрібно просто дозволити або блокувати доступ до будь-якої частини сайту або сервера в цілому для певних IP, використовуйте наступні директиви.

Увага! Якщо ви хочете використовувати ці директиви у файлі .htaccess, перевірте, що б для вашого хоста директива AllowOverride кореневого файлу конфігурації Apache включала опцію Limit

Order

Значення: Order (allow,deny | deny,allow)

Директива Order вказує порядок, в якому буде проводитися читання з директив Allow і Deny

* Allow,deny — спочатку читаються директиви Allow. Якщо користувача немає у цьому списку, то він блокується. Якщо ж він є, то далі зчитуються директиви Deny(процес ще не закінчений). Якщо ж користувач є і там, то він блокується. Якщо його там немає, то він пропускається. Тобто користувач пропускається тільки при наявності тільки в списку Allow, але не в Deny
* Deny,allow — спочатку обробляються директиви Deny і відсіюються ті користувачі, які є в цьому списку. Будь-які інші ігноруються. Тобто користувач пропускається завжди, але якщо його немає в списку Deny

Allow і Deny

Формат директив: (Allow | Deny) from (IP | IPs | all) (IP | IPs | all) : (IP | IPs | all)

Директиви Allow і Deny визначають клієнтів, яким дозволити або заборонити доступ до сервера.

Директиви допускають використання:

* Одиночного IP(IP) — звичайний вид IP, наприклад, 127.0.0.1
* Групи IP(IPs) — група IP, наприклад, для доступу, тільки з локальної мережі 192.168.1.0/24
* Будь-IP(all) — позначає будь-IP

Після слова from може йти будь-яку кількість зазначених директив, розділених пропуском

Приклади

Файл .htaccess

Order allow,deny
# Deny from all # якщо ви це напишете, то навіть ті адреси,
# які вказані в директивах Allow не буде пропущено
Allow from 192.168.1.0/24 11.11.11.12

У цьому файлі вказується доступ тільки для клієнтів з локальної мережі або з IP 11.11.11.12

Частина файлу httpd.conf


Order deny,allow
Deny from 33.250.11.25

Так ми баним сайт для якого-небудь одного IP
Контроль по імені користувача або групи

Якщо вам потрібно захистити сайт або частина сервера паролем, використовуйте наступні директиви.

Увага! Якщо ви хочете використовувати ці директиви у файлі .htaccess, перевірте, що б для вашого хоста директива AllowOverride кореневого файлу конфігурації Apache включала опцію AuthType. Так само для деяких директив(AuthUserFile і AuthGroupFile) потрібна підтримка mod_auth

AuthType

Значення: AuthType (Basic | Digest)

Apache підтримує 2 типи захисту змісту (директива AuthType):

* Basic — базова авторизація. Шифрування використовується на обох сторонах, але клієнт передає пароль не надійно зашифровані, оскільки не використовується ключ шифрування. Це великий недолік цього методу. Застосовується алгоритм шифрування Base64
* Digest — автентифікація спеціальним кодом (дайджестом), який використовує ключ, конкретно, ім’я користувача, пароль, область, вимагає аутентифікацію, різну інформацію про запит та унікальний код даного запиту, який Apache присвоює кожному з’єднанню. Це односпрямований метод, і для того, що б розшифрувати це, сторонній людині потрібно занадто багато інформації про обох сторонах. Але головний недолік цього методу в тому, що його не підтримує жодна користувальницький браузер, хоча зараз це вже, напевно, не так (дані на 2000 рік). Цей метод зазвичай використовується в спеціалізованих системах

AuthName

Формат директиви: AuthName «String»

Ця директива вказує текст підказки, яка відображається в браузері при вході на захищену частину сайту, див. малюнок вище

AuthUserFile, AuthGroupFile

Формат директив: (AuthUserFile | AuthGroupFile) «String»

Увага! Для роботи цих директив необхідний модуль Apache mod_auth, який підключається за замовчуванням

Ці директиви визначають, відповідно, шлях (абсолютний) до файлу, що зберігає зв’язки Ім’я:DES і шлях (теж абсолютний) до файлу, що зберігає зв’язки Група:Ім’я : Ім’я

AuthUserFile

Містить інформацію про допустимі імена користувачів і їхні паролі у форматі Ім’я:DES, де DES — це назва алгоритму шифрування. Файл можна створити стандартної консольною програмою, яка входить до складу Apache, htpasswd. Опис її використання дивіться нижче

AuthGroupFile

Цю директиву потрібно вказувати тільки, якщо ви вказали значення для директиви Request(дивіться нижче) дорівнює group

Цей файл містить інформацію про допустимі групах користувачів для входу. Формат файлу: Група:Ім’я : Ім’я. Тобто тільки ті користувачі, які існують і які входять до групи, описані в директиві Require(дивіться нижче), зможуть увійти

Require

Значення: Require (user Ім’я : Ім’я | group Група Група : Група | valid-user

Ця директива визначає принцип аутентифікації:

* User — тільки користувачі, зазначені наступними через пробіл, і вказали правильний пароль, зможуть увійти
* Group — тільки користувачі, що входять до групи, зазначені наступні через пробіл, і вказали правильний пароль, зможуть увійти. Вказівка директиви AuthGroupFile обов’язково
* Valid-user — користувач, існуючий у файлі AuthUserFile, і вказав вірний пароль, зможе ввійти

На цьому директиви, необхідні для методу AuthType Basic, перераховані. Інші директиви, що відносяться до методу AuthType Digest, я перераховувати не буду, т. до вони мають вузьконаправлене дію і в загальних системах не використовуються
Утиліта Apache htpasswd

Ця консольна програма створює файли, вказані в директиві AuthUserFile. Файл зберігає зв’язки Ім’я:Пароль для доступу до захищеної частини сайту

Зазвичай програма поставляється разом з Apache і знаходитися в папці bin її кореневої папки

Формат виклику утиліти:

htpasswd [-cdpsb] ПутьКФайлуПаролей ИмяНужногоПользователя

Параметри командного рядка

* -з — створити новий файл. Якщо цей параметр не вказаний, і файл не існує, утиліта видасть помилку і аварійно завершить роботу. Увага! Якщо файл вже існував, він буде перезаписаний
* -d — утиліта буде використовувати алгоритм шифрування DES (C це функція crypt()). За замовчуванням використовується у всіх ОС, але не Windows
* -m — використовувати алгоритм шифрування MD5, який є шифром за умовчанням в Windows
* -p — зберегти пароль у чистому вигляді, без шифрування. Працює тільки в Windows
* -s — утиліта буде використовувати алгоритм шифрування SHA
* -b — в нормальному режимі, без цієї опції, утиліта отримує пароль введенням в стандартний вхідний потік. При використанні цієї опції, після шляху до файлу паролів повинен йти пароль, і утиліта отримає пароль з цієї опції. Утиліта не буде чекати користувальницького введення, вона відразу поверне управління в оболонку. Приклад: htpasswd -b .htpasswd smhtpass

Приклади паролирования

Файл .htaccess

AuthType Basic
AuthName «You are entering Private area. Please enter your login and password»
AuthUserFile /home/Site.ua/www/PrivateDir/.htpasswd
# AuthGroupFile .htgroup # ця директива тут не потрібна,
# т. до ми використовуємо аутентифікацію користувачів, але не за групами
Require user My root UUCP hacker guest

Тут доступ дозволений по файлу .htpasswd для користувачів My, root, UUCP, hacker та guest. Тип авторизації Basic

Частина файлу httpd.conf

….
AuthType Basic
AuthName «This is only my area»
AuthUserFile /home/Site.ua/www/PrivateDir/.htaccess
AuthGroupFile /home/Site.ua/www/My/.htgroup
Require group my root
….

Тут доступ дозволений того ж файлу з користувачами, але тільки з тими, хто входить до групи my або root, визначені у файлі .htgroup

Для створення файлу паролів для першого прикладу

Входимо в shell і пишемо такі команди

; Вважаємо, що поточна папка встановлена на папку з утилітою htpasswd
; Так само вважаємо, що файл паролів, який потрібно створити, ще не існує
# htpasswd -cb /home/Site.ua/www/PrivateDir/.htpasswd root rootpasswd
# htpasswd -b /home/Site.ua/www/PrivateDir/.htpasswd UUCP pass_rootcp
# htpasswd /home/Site.ua/www/PrivateDir/.htpasswd My
Password: mypasswd
Repeat password: mypasswd
Password created OK
; Аналогічно створюємо запису для користувачів hacker та guest

Висновок

На цьому я закінчу свою опис тут засобів захисту даних web-сервером Apache. Всі побажання або запитання можете залишати на нашому координатами

На даний час (Липень 2006 року) я пишу Content Managing System(CMS) під PHP 4+ MySQL 3.23.xx+ і Apache 1.3+, всім бажаючим подивитися або приєднатися — пишіть мені сюди ж