Punta de Choros

27 декември 2009

На 2009г й оставаха 120ч съществуване. От календара падна поредния лист с дата 27 декември и към 10.30ч сутринта ме събуди звън от телефона.

Инсталация на Microsoft шрифтове в Ubuntu 16.04

14 януари 2017

нсталация на Microsoft шрифтове в Ubuntu се поражда от идеята браузърите в различните системи, да показват еднакво текстовото съдържанието на интернет страниците.

Ubuntu 16.04 инсталация на USB disk on Key

19 ноември 2016

Арсеналът ми от мобилни компютри съдържа Fujitsu Lifebook AH530. Това е бюджетна машина от 2011г на Intel Core i5-480M процесор и 4GB DDR3 RAM памет.

gparted

Paragon ExtFS for Windows

30 юли 2016

ExtFS for Windows е утилита на Paragon Software разработена през 2013г. Тя представлява решение, предоставящо пълен достъп на четене и на запис до раздели ...

msvcr100.dll is missing Windows 10

04 октомври 2016

Майк Патерсън от Plixer, компания по компютърната сигурност, публикува доклад , че Windows 10 изпраща данни в криптиран вид от вашата машина на всеки пет минути. Той е направил максимума, за да спре изтичането, но системата продължавала да изпраща информация.

Уеб-сървър Apache разполага в арсенала си с опция за настройка на идентификация, аутентификация и авторизация. Това ви дава възможност да добавите зона на вашия сайт достъпна само за регистрирани потребители.

Идентификация (лат. identifico - отъждествяване) - установяване личността на субекта.
"Вашето име?"

Аутентификация (англ. authentication) - удостоверяване истинността на субекта. Процедура, при която се проверява съответствието на името с прикрепена към него уникална информация, например, парола.
"Вашият паспорт"

Авторизация (англ. authorization) - проверка на правата за достъп на субекта към ресурсите на сайта.
"Имате право на това и това, но не можете еди-какво си"

Настройка


Аутентификация се настройва в файл httpd.conf или с помощта на файл .htaccess.

Демонстрацията протича на Debian/Ubuntu сървър и ще се огранича до втория начин. В самото начало е необходимо да убедим, че директива AllowOverride е All в файл /etc/apache2/sites-enabled/000-default. Тя разрешава на Apache да зачита указанията в файл .htaccess.

Остава да създадем:
  • файл с пароли за съответните потребители;
  • да укажем защитавания ресурс.

Реализация


Примерно, в каталог my_site нека създадем зона за аутентификация. Това е каталог auth. Стартираме терминала и изпълняваме следната команда:

mkdir -p /var/www/my_site/auth


Създаваме файл .htpasswd. Този файл ще съдържа паролите на регистрираните потребители, които ще имат достъп до каталог auth. За целта се използва стандарта утилита htpasswd, входяща в състава на сървър Apache. Създаваме:

sudo htpasswd -c /var/www/my_site/auth/.htpasswd profruit

Параметър -c се използва при първоначален старт на htpasswd и указва създаване на нов файл. Ако такъв съществува ще бъде презаписан от новосъздадения. Следва посочване пълния път до файл .htpasswd, а след него потребителското име, в случая моето. Два пъти ще се поиска въвеждане на парола, която няма да се види с цел повишена безопасност (някой може да стои зад вас в този момент). Въведената парола е 123456, адската и любимата.

htpasswd

Проверяваме резултата:

cat /var/www/my_site/auth/.htpasswd
profruit:o3jEkKjqqT9BI


Файлът създаден, с права 0440 (-r--r-- 1 root www-data). Съдържа указано потребителско име и съответна паролата. Става ясно, че създадения плосък файл ще бъде списък от всеки пореден потребител, допуснат до този ресурс. Първата част в открит текстови вид съдържа ника, а след двуточието представлява паролата в зашифрован вид от модифицирана версия на MD5. Отлично.

Следва да укажем на Apache, че това е закрита зона, достъпна само за регистрирани потребители. Създаваме файл .htaccess:

cd /var/www/my_site/auth
touch .htaccess


Стартираме редактор nano

nano .htaccess

... и набираме следния текст:

AuthType Basic
AuthName "Private zone. Only for valid users!"
AuthUserFile "/var/www/my_site/auth/.htpasswd"
require valid-user

# достъп закрит
<Files /var/www/my_site/auth/.htpasswd>
deny from all
</Files>


Съхраняваме.

Пробваме да влезем в защитения каталог auth, набирайки адреса му в браузър. Изпълнението ще генерира форма за достъп, която е индивидуална за модела браузър. Под Opera изглежда така.

логин-форма

Набираме своето име, но грешна парола. Нищо. Браузърът презарежда и подканва отново да въведем потребителско име и парола в формата. И така до безкрай. Ако натиснем бутон Cancel се генерира следното съобщение:

Authorization Required

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.
Apache/2.2.14

(Ubuntu) Server at localhost Port 80

При набор на коректно име и парола получаваме достъп.

Подводни камъни


Какво следва да знаем, за подобен род реализация към закрит ресурс?
За целта ще ползваме add-ons Live HHTP headers в браузър Firefox. Това е подобие на снифер, прихващаш диалога между браузъра и сървъра. Стартираме Firefox, стартираме Live HТTP headers. Набираме адреса на закрития каталог. Генерира се формата с полета за аутентификация. Четем диалога в Live HТTP headers.
http://localhost/my_site/auth/

GET /my_site/auth/ HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

HTTP/1.1 401 Authorization Required
Date: Sat, 04 May 2013 11:42:35 GMT
Server: Apache/2.2.14 (Ubuntu)
WWW-Authenticate: Basic realm="Private zone. Only for valid users!"
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 340
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
Чрез метод GET браузърът иска от localhost ресурс my_site/auth/ по протокол HTTP/1.1. Сървърът честно отговаря 401 Authorization Required, на което браузърът генерира формата. Следва бла-бла-бла до специална заглавка WWW-Authenticate: Basic realm, тоест, начина по които иска Apache, да получи логин и парола.

Basic е базова авторизация. Кодирането е налично на двата края, но клиента предава паролата недостатъчно зашифрована. Причината е в алгоритъм Base64.

realm на пръв поглед се очаква да бъде предупредителния израз, който се генерира в модалния прозорец на формата. Да речем, че имаме форум, а към него админ зона. Потребител, авторизиран на форума не следва да премине в админ зоната. Това разпределение на нещата осигурява realm. За да бъде ясно, просто израза "Private zone. Only for valid users!", чието съдържание е по хрумване на администратора, напомня за този преход.

ОК, нека въведем правилен ник: profruit и парола: 123456 и отново прочетем заглавките:
http://localhost/my_site/auth/

GET /my_site/auth/ HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Authorization: Basic cHJvZnJ1aXQ6MTIzNDU2
Connection: keep-alive

HTTP/1.1 200 OK
Date: Sat, 04 May 2013 13:06:59 GMT
Server: Apache/2.2.14 (Ubuntu)
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 403
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=UTF-8
Този път Apache отговаря с статус 200 или моля, заповядайте. Но, аутентификация е предадена в този хедър Authorization: Basic cHJvZnJ1aXQ6MTIzNDU2. Копираме я и пускаме в първия online Base64 decoder.

Base64 decoder

От снимката черно на бяло се вижда как моята парола може да се изведе на дневна светлина и още веднъж да ви накара да се загледате в червения предупреждаващ надпис на Operа от снимката горе. Този начин с лекота може да бъде компрометиран от "човек по средата".

И още.
В вашия браузър се изпраща срита сесионна бисквитка и вие сте авторизирани до закриване на сеанса/затваряне на браузъра. Паралелно се създава променлива на обкръжението REMOTE_USER. Тя може да бъде използвана за приветствие на логнатия потребител getenv("REMOTE_USER")/apache_getenv("REMOTE_USER").
<html>
 <head>
  <title>REMOTE_USER</title>
 </head>
 <body>
  <?php 
   echo 'Здравейте '. apache_getenv("REMOTE_USER") . "\n";
   echo "Вашата парола е: {$_SERVER['PHP_AUTH_PW']}";
  ?>
 </body>
</html>
авторизация






до нови срещи   ^.^
04.05.2013 profruit 

0 Response to "Базова аутентификация в Apache"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: Ubuntu, WEB, Photoshop, Фотография, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога