Как да пароли защитете директории с mod_authn_dbd и MySQL на Apache (Debian 8)

 

Това ръководство обяснява как да се защитават паролите за уеб директории (с потребители от MySQL база данни) с mod_authn_dbd на Apache2 на сървър Debian 8 (Jessie). Това е алтернатива на файловете с парола за обикновен текст, предоставени от mod_auth, и ви позволява да използвате нормален SQL синтаксис, за да създавате / променяте потребители на изтриване. Можете също така да конфигурирате mod_authn_dbd за удостоверяване на съществуваща таблица с потребители на MySQL. Apache mod_authn_dbd е заместител на mod_auth_mysql.

Предварителна бележка 1

Използвам vhost http://www.example.com тук с конфигурационния файл vhost /etc/apache2/sites-available/example.com.vhost и корена на документа /var/www/www.example.com/web. Искам да защитя с парола директорията /var/www/example.com/web/protecteddir в този урок (превежда на http://www.example.com/protecteddir/).

Можете да използвате този урок за основното LAMP сървър ако все още нямате инсталиран Apache.

2 Инсталиране на MySQL или MariaDB

Ще използвам MariaDB, MySQL вилица тук, вместо MySQL. Но MySQL работи и ако предпочитате това. За да инсталирате MariaDB, стартираме:

apt-get -y инсталирате mariadb-server mariadb-client

Ще бъдете помолени да предоставите парола за root потребител на MySQL:

Нова парола за потребителя "root" на MariaDB: <- yourrootsqlpassword
Повторете паролата за потребителя "root" на MariaDB: <- yourrootsqlpassword

Инсталирайте DBD MySQL модула:

apt-get инсталирате libaprutil1-dbd-mysql

След това активирайте модула mod_authn_dbd:

a2enmod dbd
a2enmod authn_dbd
authn_socache

Рестартирайте Apache:

сервиз apache2 рестартиране

3 Конфигуриране на mod_authn_dbd

Тук можете да намерите документацията за mod_authn_dbd в документацията на Apache http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html.

След като прочетем тези два файла, създаваме MySQL база данни, наречена examplecomdb, в която ще създадем таблицата mysql_auth, която ще съдържа нашите потребители и пароли. В допълнение към това създаваме MySQL потребител examplecom_admin - този потребител ще бъде използван от mod_auth_mysql, за да се свърже по-късно с MySQL:

mysqladmin -u root -p създайте examplecomdb

mysql -u root -p

GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb. * TO 'examplecom_admin' @ 'localhost' IDENTIFIED BY 'examplecom_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb. * TO 'examplecom_admin'@'localhost.localdomain' IDENTIFIED BY 'examplecom_admin_password';
ПРАВИТЕЛСТВА ЗА ПОВЪРХНОСТ;

(Замени examplecom_admin_password с парола по ваш избор.)

USE examplecomdb;

създаване на таблица mysql_auth (
потребителско име varchar (255) не е null,
passwd varchar (255),
групи varchar (255),
първичен ключ (потребителско име)
);

(Разбира се, можете също така да използвате съществуващите таблици, съдържащи потребителските ви пълномощия, и можете също така да имате допълнителни полета в таблицата, например поле, което определя дали даден потребител е активен или не).

Сега вкараме потребителския тест в нашата таблица mysql_auth с теста на паролата; този потребител принадлежи към груповата тестова група.

Паролата трябва да бъде хеширана, ще използвам SHA1 хеш тук, хешът може да бъде създаден с командата htpasswd на Linux обвивката:

htpasswd -bns тест за тестване

Резултатът е това:

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

Първата част е потребителското име "test", разделено от ":" и след това идва хешираната парола. Нуждаем се от хешираната парола "{SHA} qUqP5cyxm6YcTAhz05Hph5gvu9M =", за да я вмъкнем в нашата потребителска база данни. Заявката в MySQL е следната:

Вмъкнете в "mysql_auth" ("потребителско име", "passwd", "групи") VALUES ('test', '{SHA} qUqP5cyxm6YcTAhz05Hph5gvu9M =', 'testgroup');

След това оставяме MySQL shell:

напускам

Конфигурацията на mod_authn_dbd, която трябва да бъде включена във файла vhost, може да не бъде добавена във файла .htaccess. Следователно редактираме файла vhost и добавим следната конфигурация в края на файла:

nano /etc/apache2/sites-available/example.com.vhost

[...] # mod_dbd конфигурация DBDriver mysql DBDParams "dbname = examplecomdb user = examplecom_admin pass = examplecom_admin_password" DBDMin 4 DBDKeep 8 DBDMax 20 DBDExptime 300 <Directory> /var/www/example.com/web/protecteddir "> # mod_authn_core и mod_auth_basic конфигурация # за mod_authn_dbd AuthType Basic AuthName "Моят сървър" # За да кеширате идентификационните данни, поставете socache пред dbd тук AuthBasicProvider socache dbd # Също така се изисква за кеширане: кажете кеш паметта да кешира dbd търсения! AuthnCacheProvideЗа dbd AuthnCacheContext my-server # mod_authz_core конфигурация Изисква валиден потребител # mod_authn_dbd SQL заявка за удостоверяване на потребител AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username =% s" </ Directory>

Презареди Apache:

услуга apache2 презареждане

Ако имате допълнителни полета в таблицата MySQL, които определят дали даден потребител има право да влиза или не (например поле, наречено активно), можете да го добавите към заявката за SQL заявка по този начин:

[...] AuthDBDUserPWQuery "SELECT passwd ОТ mysql_auth WHERE потребителско име =% s и активно =" да "" [...]

Изискването за валидна потребителска директива прави всеки потребител, посочен в таблицата mysql_auth, да може да влезе, докато предостави правилната парола. Ако искате да позволите на определени потребители да влизат в системата, бихте използвали нещо подобно

[...] изискват от потребителя jane joe [...]

вместо. Ако искате само членовете на определени групи да бъдат допуснати да влязат, бихте използвали нещо подобно:

[...] изискват групова група за изпитване [...]

Това е! Сега опитайте да получите достъп до http://www.example.com/protecteddir/ и трябва да получите потребителско име и парола:

Въведете потребителското име и паролата.

Входът бе успешен.

4 Връзки

източник

Оставете коментар

Този сайт използва Akismet за намаляване на спама. Научете как се обработват данните за коментарите ви.

GTranslate Your license is inactive or expired, please subscribe again!