Управління доступом до web-серверу apache
Раніше було розглянуто HTTP-доступ з боку клієнта, тепер подивимося на нього з іншого боку - з боку сервера.
Якщо ж все-таки потрібно вказати ім'я вузла, тоді розглянемо наступний приклад:
Allow from example.com
Це зовсім не те, що потрібно: це правило буде збігатися з іменами example.com, lan.example.com, sales.example.com, myexample.com і навіть cracker.evilexapmle.com - тобто з усіма іменами, які містять рядок «example.com». Щоб дати доступ тільки домену (і його піддоменів) example.com, застосовується наступний блок:
Allow from .example.com
Доступ по імені користувача і паролю.
Раніше були розглянуті два способи аутентифікації користувача - Basic Authentication і Digest Authentication. Перший спосіб є самим застосовуваним в силу своєї простоти, але і самим небезпечним, так як паролі кодуються за допомогою алгоритму Base-64, який легко розкодовується хакером. Другий спосіб бере за основу алгоритм MD5, що робить його набагато безпечніше, однак він більш складний в налаштуванні.
Незважаючи на недоліки базової аутентифікації, вона залишається найбільш популярним способом пральний захисту Web-серверів. Напевно, це найстаріший, добре документований метод і адміністратори до нього просто звикли. Так, він дає можливість обмежити доступ користувачів до конкретних документів сервера. Користувачів, але не крекеру.
Зараз, коли сучасні браузери (починаючи з IE v5.0 і Netscape v7.0) цілком підтримують Digest-аутентифікацію, сенсу в вживанні базової аутентифікації немає.
Синтаксис цих обох форм аутентифікації істотно відрізняється від директив Deny і Allow, розглянутих в попередньому прикладі. В даному випадку використовуються чотири директиви:
- AuthName <строка> - назва області, яку потрібно захистити. Ця назва буде показано у вікні, що запрошує у користувача логін і пароль. Це ж ім'я області застосовується і для ідентифікації різних областей (якщо їх декілька).
- AuthType
- визначає застосовуваний метод аутентифікації. - AuthUserFile <файл> - файл, який містить імена користувачів і належні їм паролі. Часто застосовується ім'я .htpasswd.
- Require
- кому може бути надано доступ: допустимому користувачеві (який вказаний у файлі AuthUserFile і ввів правильний пароль) або тільки конкретним (перерахованим в директиві) користувачам, за умови, що вони теж вказали правильну пароль.
AuthName "Employee Timetables"
Файл .htpasswd рекомендується зберігати за межами каталогу DocumentRoot сервера, наприклад, в каталозі /etc/httpd/.htpasswd. Звичайно, сучасні версії Apache блокують доступ до файлів .htpasswd, але краще не ризикувати. Сучасні версії Apache містять директиву, що обмежує доступ до файлів, що починається на .ht:
Опції і доступ користувача.
Кожному каталогу всередині DocumentRoot потрібно призначити конкретні опції, що керують індексуванням, виконанням CGI і т.д. Зазвичай дані опції «прописують» в основному файлі конфігурації, але якщо він досить величезною і його незручно правити, дозволено застосування файлу .htaccess. Даний файл поміщається безпосередньо в той каталог, опції якого потрібно модифікувати. Переважно, звичайно, зберігати опції в основному файлі конфігурації - так буде безпечніше.
Опції каталогу поміщаються в директиву
Даний приклад взятий з файлу конфігурації Apache за замовчуванням. Тому що опції успадковуються для всіх підкаталогів, то ці опції будуть присвоєні всім каталогам дерева DocumentRoot. Перевизначити опції потрібно за допомогою директиви Directory - окремо для кожного каталогу.
З точки зору безпеки найцікавіші наступні опції:
Метод застосування директив перш здається незрозумілим. Як було відзначено, всі вони успадковуються, тому включення Indexes для / var / www / htdocs означає і включення даної директиви і для / var / www / htdocs / images (якщо, звичайно, опції для каталогу images також не буде перезаписано її).
Якщо в директиві Options вказувати тільки одну опцію, це означає, що вимикаються всі інші опції, наприклад:
Ця директива включає опцію FollowSymLinks і вимикає всі залишилися - Indexes, ExecCgi і ін. Якщо можна вимкнути лише одну опцію (наприклад, Includes), але залишити в спокої всі інші, то перед опцією треба вказати знак «-».
Аналогічно для включення виразної опції можна вказати перед нею знак «+». наприклад:
Директива AllowOverride дає можливість вказати, які опції треба перевизначати при вживанні файлу .htaccess, а які - ні. Але цим можна дозволити користувачеві перевизначити дуже важливі з точки зору безпеки опції, тому краще її вимкнути:
Треба встановити список опцій, які можуть бути перевизначені:
AllowOverride ExecCGI Indexes Includes
Рекомендується заборонити користувачам перевизначення директив: