Автентикация = кой сте вие (потребителско име и парола)
Оторизация = какво ви е позволено да правите
Оторизация = какво ви е позволено да правите
Как работи автентикацията?
Модулът mod_auth
Модулът mod_auth е подразбиращият се модул за автентификация на потребителите в Apache HTTP сървъра. Той позволява да се извърши автентикация на потребители, чийто имена и криптирани пароли са съхранени в текстов файл.
Препоръчително е модулът mod_auth да се използва за малък брой потребители. Ако текстовият файл с потребителски имена и пароли достигне няколко хиляди потребителски имена и пароли, производителността на сървъра спада значително.
Препоръчително е модулът mod_auth да се използва за малък брой потребители. Ако текстовият файл с потребителски имена и пароли достигне няколко хиляди потребителски имена и пароли, производителността на сървъра спада значително.
Защита на директория чрез basic автентикация
Инструментът htpasswd
Автентикационните директиви могат да бъдат поставени в блоковете <Directory>, <Location>, <Files>, <Proxy>. Тези блокове могат да бъдат поставени в httpd.conf, в httpd-vhosts.conf или в .htaccess конфигурационните файлове.
Инструментът htpasswd (наличен в XAMPP, намира се в директорията /opt/lampp/bin) служи за създаване и ъпдейтване на файлове, които се използват за съхраняване на потребителски имена и криптирани пароли за осъществяване на HTTP basic автентикация на потребители.
За да създадем файл с имената и паролите на потребителите, които ще имат достъп до директория opt/lampp/htdocs/my.localhost, ще приложим htpasswd инструмента, който се намира в пакета apache2-utils. За да го инсталираме, в терминала въвеждаме:
За да разгледам съдържанието на пакета apache2-utils, в терминала въвеждам:
Информация за това как се работи с инструмента htpasswd може да получите като в терминала въведете: htpasswd –help.
Файлът с паролите можем да съхраним където пожелаем на твърдия диск (стига да е на място, недостъпно от уеб). Аз избирам да го съхраня в директорията /opt/lampp/etc. Ще дам наименование на файла .htpasswd. А името на потребителя ще е imposible.
В терминала въвеждаме:
Ще бъдете подканени да въведете парола за потребителя и да я потвърдите чрез повторното й въвеждане:
А ето и съдържанието на файла .htpasswd, изведено в терминала с командата cat:
htpasswd криптира паролите като прилага bcrypt версия на MD5 алгоритъма за криптиране, SHA1 или функцията crypt(). Файловете, които се управляват от htpasswd могат да съдържат микстура от различни типове за криптиране, т.е. паролите на някои потребители могат да са bcrypt или MD5 криптирани, а други може да са криптирани с crypt(). По подразбиране паролата се криптира с MD5 алгоритъма за криптиране.
Ако искаме да добавим нов потребител с име possibly, изпускаме опция -c, защото файлът с паролите вече съществува:
Ако искаме, паролата на потребителя да се криптира с функцията crypt(), тогава можем да приложим опция -d. В терминала въвеждаме:
За създаване на файла .htpaswd, може да приложите и вградения в XAMPP инструмент htpasswd, но в този случай, за да го стартирате, в терминала ще трябва да укажете пътя до него:
Инструментът htpasswd (наличен в XAMPP, намира се в директорията /opt/lampp/bin) служи за създаване и ъпдейтване на файлове, които се използват за съхраняване на потребителски имена и криптирани пароли за осъществяване на HTTP basic автентикация на потребители.
За да създадем файл с имената и паролите на потребителите, които ще имат достъп до директория opt/lampp/htdocs/my.localhost, ще приложим htpasswd инструмента, който се намира в пакета apache2-utils. За да го инсталираме, в терминала въвеждаме:
sudo apt-get update
sudo apt-get install apache2-utils
sudo apt-get install apache2-utils
За да разгледам съдържанието на пакета apache2-utils, в терминала въвеждам:
dpkg -L apache2-utils
Информация за това как се работи с инструмента htpasswd може да получите като в терминала въведете: htpasswd –help.
Файлът с паролите можем да съхраним където пожелаем на твърдия диск (стига да е на място, недостъпно от уеб). Аз избирам да го съхраня в директорията /opt/lampp/etc. Ще дам наименование на файла .htpasswd. А името на потребителя ще е imposible.
В терминала въвеждаме:
sudo htpasswd -c /opt/lampp/etc/.htpasswd imposible
Ще бъдете подканени да въведете парола за потребителя и да я потвърдите чрез повторното й въвеждане:
А ето и съдържанието на файла .htpasswd, изведено в терминала с командата cat:
htpasswd криптира паролите като прилага bcrypt версия на MD5 алгоритъма за криптиране, SHA1 или функцията crypt(). Файловете, които се управляват от htpasswd могат да съдържат микстура от различни типове за криптиране, т.е. паролите на някои потребители могат да са bcrypt или MD5 криптирани, а други може да са криптирани с crypt(). По подразбиране паролата се криптира с MD5 алгоритъма за криптиране.
Ако искаме да добавим нов потребител с име possibly, изпускаме опция -c, защото файлът с паролите вече съществува:
sudo htpasswd /opt/lampp/etc/.htpasswd possibly
Ако искаме, паролата на потребителя да се криптира с функцията crypt(), тогава можем да приложим опция -d. В терминала въвеждаме:
sudo htpasswd -d /opt/lampp/etc/.htpasswd jones
За създаване на файла .htpaswd, може да приложите и вградения в XAMPP инструмент htpasswd, но в този случай, за да го стартирате, в терминала ще трябва да укажете пътя до него:
sudo /opt/lampp/bin/htpasswd /opt/lampp/etc/.htpasswd MyNameIs
Въпроси, свързани със сигурността, при работа с htpasswd
- Файловете с криптираните пароли не бива да бъдат достъпни от уеб.
- Инструментът htpasswd не е сигурен, ако е setuid изпълним.
- Опцията -b не е препоръчителна, защото в командния ред трябва да въведете некриптирана парола.
- Опцията -B се прилага, когато искаме да криптираме паролата с bcrypt алгоритъма. Приема се за най-надежден, защото паролите, криптирани с този алгоритъм, се декриптират много трудно.
- SHA и crypt() алгоритмите не са препоръчителни за криптиране на паролата, защото по днешните стандарти са несигурни.
Конфигуриране на автентикация за директория
Следващата стъпка, която трябва да направим е да настроим Apache уеб сървъра да изисква парола преди да покаже защитено съдържание на директория. Това може да се направи по два начина:
За да конфигурирам контрола за достъп до my.localhost, e необходимо да направя конфигурационни промени във файла httpd-vhosts.conf. За целта, в терминала въвеждам:
Отваря се файлът httpd-vhosts.conf. Добавям блок <Directory .......> и в него указвам директорията, за разглеждането на която ще е необходима автентикация.
С този блок казвам на Apache, че искам да конфигурирам Basic автентикация за директорията my.localhost. Кои са директивите, които е необходимо да бъдат поставени във вътрешността на блока <Directory>?
- Да редактираме конфигурационния файл на Apache и/или httpd-vhosts.conf. Този метод е препоръчителен.
- Да модифицираме .htaccess файла. Този файл позволява да се правят конфигурационни промени за директория. Избягвайте го, ако имате достъп до httpd.conf на сървъра. Всяка директива, която може да се включи в .htaccess файла, е по-добре да бъде поставена в блок <Directory> в конфигурационния файл на сървъра. Ефектът ще е същия, но Apache ще работи по-бързо.
За да конфигурирам контрола за достъп до my.localhost, e необходимо да направя конфигурационни промени във файла httpd-vhosts.conf. За целта, в терминала въвеждам:
sudo geany /opt/lampp/etc/extra/httpd-vhosts.conf
Отваря се файлът httpd-vhosts.conf. Добавям блок <Directory .......> и в него указвам директорията, за разглеждането на която ще е необходима автентикация.
<VirtualHost *:80>
ServerAdmin webmaster@my.localhost
DocumentRoot "/opt/lampp/htdocs/my.localhost"
ServerName my.localhost
ServerAlias www.my.localhost
ErrorLog "logs/my.localhost-error_log"
CustomLog "logs/my.localhost-access_log" common
<Directory "/opt/lampp/htdocs/my.localhost">
</Directory>
</VirtualHost>
ServerAdmin webmaster@my.localhost
DocumentRoot "/opt/lampp/htdocs/my.localhost"
ServerName my.localhost
ServerAlias www.my.localhost
ErrorLog "logs/my.localhost-error_log"
CustomLog "logs/my.localhost-access_log" common
<Directory "/opt/lampp/htdocs/my.localhost">
</Directory>
</VirtualHost>
С този блок казвам на Apache, че искам да конфигурирам Basic автентикация за директорията my.localhost. Кои са директивите, които е необходимо да бъдат поставени във вътрешността на блока <Directory>?
AuthType- тази директива определя вида на автентикационния контрол. Възможностите са две: Basic и Digest.
AuthName- задава името на ареала, в който са валидни потребителско име и парола. Ако името на този ареал съдържа интервали, трябва да го поставим в кавички, например: “Ограничен достъп!”.
AuthBasicProvider – тази директива на е задължителна. Тя определя дали файлът с имената и криптираните пароли е обикновен текстов файл или база данни. Подразбиращата се стойност за тази директива е file.
AuthUserFile- съдържа пътя до файла с потребителските имена и криптирани пароли. Файлът не трябва да бъде достъпен от уеб, т.е. трябва да е съхранен извън папката с документи на уеб сървъра. Не я поставяйте в директорията, която искате да защитите, защото в този случай потребителите, имащи достъп до тази директория, ще могат да свалят файла с имената и паролите.
Require- тази директива осъществява оторизационния процес, като определя кой е потребителят на когото е позволено да има достъп до защитената директория на сървъра. Възможните стойности за тази директива са:
[user user1 user2 ...]
[group group1 group2]
[valid- user]
[valid-user] [valid-group]
Ако изберем опцията valid-user, допускат се всички потребители, които са намерени във файла с потребителски имена и криптирани пароли.
Satisfy- тази директива се грижи за оторизацията.
AuthName- задава името на ареала, в който са валидни потребителско име и парола. Ако името на този ареал съдържа интервали, трябва да го поставим в кавички, например: “Ограничен достъп!”.
AuthBasicProvider – тази директива на е задължителна. Тя определя дали файлът с имената и криптираните пароли е обикновен текстов файл или база данни. Подразбиращата се стойност за тази директива е file.
AuthUserFile- съдържа пътя до файла с потребителските имена и криптирани пароли. Файлът не трябва да бъде достъпен от уеб, т.е. трябва да е съхранен извън папката с документи на уеб сървъра. Не я поставяйте в директорията, която искате да защитите, защото в този случай потребителите, имащи достъп до тази директория, ще могат да свалят файла с имената и паролите.
Require- тази директива осъществява оторизационния процес, като определя кой е потребителят на когото е позволено да има достъп до защитената директория на сървъра. Възможните стойности за тази директива са:
[user user1 user2 ...]
[group group1 group2]
[valid- user]
[valid-user] [valid-group]
Ако изберем опцията valid-user, допускат се всички потребители, които са намерени във файла с потребителски имена и криптирани пароли.
Satisfy- тази директива се грижи за оторизацията.
След лиричното отклонение, което направих, е време да се завърна при файла httpd-vhosts.conf. Във вътрешността на блока добавяме:
AuthType Basic
AuthName "Restricted Content"
AuthBasicProvider file
AuthUserFile /opt/lampp/etc/.htpasswd
Require valid-user
Блокът <VirtualHost> трябва да изглежда така:
Съхраняваме файла и рестартираме сървъра.
AuthType Basic
AuthName "Restricted Content"
AuthBasicProvider file
AuthUserFile /opt/lampp/etc/.htpasswd
Require valid-user
Блокът <VirtualHost> трябва да изглежда така:
<VirtualHost *:80>
ServerAdmin webmaster@my.localhost
DocumentRoot "/opt/lampp/htdocs/my.localhost"
ServerName my.localhost
ServerAlias www.my.localhost
ErrorLog "logs/my.localhost-error_log"
CustomLog "logs/my.localhost-access_log" common
<Directory "/opt/lampp/htdocs/my.localhost">
AuthType Basic
AuthName "Restricted content"
AuthBasicProvider file
AuthUserFile /opt/lampp/etc/.htpasswd
Require valid-user
Satisfy all
</Directory>
</VirtualHost>
ServerAdmin webmaster@my.localhost
DocumentRoot "/opt/lampp/htdocs/my.localhost"
ServerName my.localhost
ServerAlias www.my.localhost
ErrorLog "logs/my.localhost-error_log"
CustomLog "logs/my.localhost-access_log" common
<Directory "/opt/lampp/htdocs/my.localhost">
AuthType Basic
AuthName "Restricted content"
AuthBasicProvider file
AuthUserFile /opt/lampp/etc/.htpasswd
Require valid-user
Satisfy all
</Directory>
</VirtualHost>
Съхраняваме файла и рестартираме сървъра.
При непотвърдени потребителско име или парола или при клик върху бутон Cancel от формата:
При успешна автентикация:
А ако желанието ми е да защитя директория, която е вътрешна спрямо Document Root (в случая my.localhost) на виртуалния хост?
Въвеждам блок <Location ......> във файла httpd-vhosts.conf или блок <Directory ......> в конфигурационния файл на сървъра.
Съхраняваме файла и рестартираме сървъра.
Въвеждам блок <Location ......> във файла httpd-vhosts.conf или блок <Directory ......> в конфигурационния файл на сървъра.
<VirtualHost *:80>
ServerAdmin webmaster@my.localhost
DocumentRoot "/opt/lampp/htdocs/my.localhost"
ServerName my.localhost
ServerAlias www.my.localhost
ErrorLog "logs/my.localhost-error_log"
CustomLog "logs/my.localhost-access_log" common
ScriptAlias /cgi-bin/ “/usr/local/apache/cgi-bin/”
#<Directory "/opt/lampp/htdocs/my.localhost">
#AuthType Basic
#AuthName "Restricted content"
#AuthBasicProvider file
#AuthUserFile /opt/lampp/etc/.htpasswd
#Require valid-user
#Satisfy all
#</Directory>
<Location "/opt/lampp/htdocs/my.localhost/secret">
AuthType Basic
AuthName "Restricted content"
AuthUserFile /opt/lampp/etc/.htpasswd
Require valid-user
Satisfy all
</Location>
</VirtualHost>
ServerAdmin webmaster@my.localhost
DocumentRoot "/opt/lampp/htdocs/my.localhost"
ServerName my.localhost
ServerAlias www.my.localhost
ErrorLog "logs/my.localhost-error_log"
CustomLog "logs/my.localhost-access_log" common
ScriptAlias /cgi-bin/ “/usr/local/apache/cgi-bin/”
#<Directory "/opt/lampp/htdocs/my.localhost">
#AuthType Basic
#AuthName "Restricted content"
#AuthBasicProvider file
#AuthUserFile /opt/lampp/etc/.htpasswd
#Require valid-user
#Satisfy all
#</Directory>
<Location "/opt/lampp/htdocs/my.localhost/secret">
AuthType Basic
AuthName "Restricted content"
AuthUserFile /opt/lampp/etc/.htpasswd
Require valid-user
Satisfy all
</Location>
</VirtualHost>
Съхраняваме файла и рестартираме сървъра.
Повече информация: http://httpd.apache.org
|
Няма коментари:
Публикуване на коментар