Kaip apsaugoti slaptažodžiu katalogus su mod_authn_dbd ir "MySQL" "Apache" (Debian 8)

 

Šiame vadove paaiškinama, kaip slaptažodžiu apsaugoti žiniatinklio katalogus (su naudotojų iš MySQL duomenų bazės) su mod_authn_dbd "Apache2" sistemoje "Debian" 8 (Jessie) serveryje. Tai yra alternatyva paprastiems teksto slaptažodžio failams, kuriuos teikia mod_auth, ir leidžia naudoti įprastą SQL sintaksę kurti / modifikuoti naudotojų ištrynimą. Taip pat galite konfigūruoti mod_authn_dbd autentifikuoti prieš esamą MySQL vartotojo lentelę. Apache mod_authn_dbd yra mod_auth_mysql pakaitalas.

1 preliminari pastaba

Aš naudoju "vhost" http://www.example.com čia su "vhost" konfigūracijos failu /etc/apache2/sites-available/example.com.vhost ir dokumento šaknimi /var/www/www.example.com/web. Noriu apsaugoti katalogą /var/www/example.com/web/protecteddir šiame vadovėlyje (verčia į http://www.example.com/protecteddir/).

Galite naudoti šią pamoką pagrindiniam LAMP serveris jei dar neturite įdiegto "Apache".

2 diegimas MySQL arba MariaDB

Aš naudoju MariaDB, "MySQL" šakutę, o ne MySQL. Tačiau "MySQL" veikia taip pat, jei to pageidaujate. Norėdami įdiegti MariaDB, paleiskime:

apt-get-įdiekite mariadb-serverį mariadb-client

Jums bus paprašyta pateikti "MySQL root user" slaptažodį:

Naujas "MariaDB" šakninio vartotojo slaptažodis: <- yourrootsqlpassword
Pakartokite "MariaDB" šakninio vartotojo slaptažodį: <- yourrootsqlpassword

Įdiekite DBD MySQL modulį:

apt-get install libaprutil1-dbd-mysql

Po to įgalinkite mod_authn_dbd modulį:

a2enmod dbd
a2enmod authn_dbd
authn_socache

Paleiskite Apache:

paslauga apache2 paleiskite iš naujo

3 konfigūravimas mod_authn_dbd

"Apache" dokumentuose rasite dokumentaciją mod_authn_dbd http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html.

Having read these two files, we create a MySQL database called examplecomdb in which we will create the table mysql_auth which will contain our users and passwords. In addition to that we create the MySQL user examplecom_admin – this user will be used by mod_auth_mysql to connect to MySQL later on:

mysqladmin -u root -p sukurti 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’;
FLUSH PRIVILEGES;

(Pakeiskite examplecom_admin_password su pasirinktu slaptažodžiu.)

USE examplecomdb;

sukurti lentelę mysql_auth (
vardas varchar (255) ne null,
passwd varchar (255),
grupės varchar (255),
pirminis raktas (vartotojo vardas)
);

(Žinoma, jūs taip pat galite naudoti esamas lenteles, kuriose saugomi jūsų vartotojo duomenys, ir jūs taip pat galite turėti papildomų laukų lentelėje, pvz., Lauką, kuris apibrėžia, ar vartotojas yra aktyvus, ar ne.)

Dabar mes įterpti vartotojo testą į mūsų mysql_auth lentelę su slaptažodžio testu; šis naudotojas priklauso grupės bandymų grupei.

Slaptažodis turi būti maišytas, aš čia naudosiu SHA1 maišą, "hash" gali būti sukurtas naudojant "Linux shell" komandą htpasswd:

htpasswd-bns bandymo testas

Rezultatas yra toks:

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

The first part is the username “test”, separated by “:” and then comes the hashed password. We need the hashed password “{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=” only to insert it into our user database. The MySQL query is this:

INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES(‘test’, ‘{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=’, ‘testgroup’);

Tada paliekame "MySQL" apvalkalą:

mesti

Mod_authn_dbd konfigūracija, kad ji būtų įtraukta į "vhost" failą, ji negali būti įtraukta į .htaccess failą. Todėl redaguojame "vhost" failą ir failo pabaigoje pridėdami šią konfigūraciją:

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

[...] # mod_dbd konfigūracija 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 ir mod_auth_basic configuration # for mod_authn_dbd AuthType Basic AuthName "My Server" # Norėdami talpinti į atmintį, prisijunkite prie socialinių tinklų dbd čia AuthBasicProvider socache dbd # Taip pat reikalinga talpyklai: pasakykite talpyklą, kad talpykloje būtų talpyklos dbd paieškos! AuthenCacheProvideFor dbd AuthenCacheContext my-server # mod_authz_core konfigūracija Reikalauti galiojančio vartotojo # mod_authn_dbd SQL užklausa autentifikuoti naudotoją AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username =% s" </ Directory>

Perkrauti Apache:

paslauga apache2 perkrauti

Jei jūsų MySQL lentelėje yra papildomų laukų, kurie apibrėžia, ar vartotojui leidžiama prisijungti, ar ne (pvz., Laukas, vadinamas aktyviu), galite jį pridėti prie tokio SQL vartotojo užklausos kaip šis:

[...] AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth KUR username =% s ir active = 'yes'" [...]

The require valid-user directive makes that each user listed in the mysql_auth table can log in as long as he/she provides the correct password. If you only want certain users to be allowed to log in, you’d use something like

[...] reikalauti, kad vartotojas jane joe [...]

instead. And if you only want members of certain groups to be allowed to log in, you’d use something like this:

[...] reikalauja grupės testų grupės [...]

That’s it! Now try to access http://www.example.com/protecteddir/, and you should be asked for a username and password:

Įveskite vartotojo vardą ir slaptažodį.

Prisijunge pavyko.

4 nuorodos

Šaltinis

Palikti atsakymą

Ši svetainė naudoja "Akismet", kad sumažintų šlamštą. Sužinokite, kaip apdorojamas jūsų komentaras.

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