Hvordan passordbeskytt kataloger med mod_authn_dbd og MySQL på Apache (Debian 8)

 

Denne veiledningen forklarer hvordan du kan passordbeskytte webkataloger (med brukere fra en MySQL-database) med mod_authn_dbd på Apache2 på en Debian 8 (Jessie) server. Det er et alternativ til passordfilene med ren tekst som leveres av mod_auth, og lar deg bruke vanlig SQL-syntaks for å opprette / endre slette brukere. Du kan også konfigurere mod_authn_dbd for å godkjenne mot en eksisterende MySQL brukertabell. Apache mod_authn_dbd er en erstatning for mod_auth_mysql.

1 Preliminary Note

Jeg bruker vhost http://www.example.com her med vhost-konfigurasjonsfilen /etc/apache2/sites-available/example.com.vhost og dokumentroten /var/www/www.example.com/web. Jeg vil passordbeskytte katalogen /var/www/example.com/web/protecteddir i denne opplæringen (oversetter til http://www.example.com/protecteddir/).

Du kan bruke denne opplæringen til grunnleggende LAMP-server hvis du ikke har Apache installert ennå.

2 Installere MySQL eller MariaDB

Jeg vil bruke MariaDB, en MySQL gaffel her i stedet for MySQL. Men MySQL fungerer også hvis du foretrekker det. For å installere MariaDB løper vi:

apt-get -y installer mariadb-server mariadb-klient

Du vil bli bedt om å oppgi et passord for MySQL root-brukeren:

Nytt passord for MariaDB "root" bruker: <- yourrootsqlpassword
Gjenta passordet for MariaDB "root" -brukeren: <- yourrootsqlpassword

Installer DBD MySQL-modulet:

apt-get install libaprutil1-dbd-mysql

Etterpå aktiver modulen mod_authn_dbd:

a2enmod dbd
a2enmod authn_dbd
authn_socache

Start Apache på nytt:

service apache2 omstart

3 Konfigurere mod_authn_dbd

Du finner dokumentasjonen for mod_authn_dbd i Apache dokumentasjonen her http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html.

Etter å ha lest disse to filene, oppretter vi en MySQL-database som heter examplecomdb, der vi skal opprette tabellen mysql_auth som vil inneholde brukerne og passordene våre. I tillegg til det oppretter vi MySQL-brukeren examplecom_admin - denne brukeren vil bli brukt av mod_auth_mysql for å koble til MySQL senere:

mysqladmin -u root -p lage examplecomdb

mysql -u rot-p

GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb. * TIL 'examplecom_admin' @ 'localhost' IDENTIFISERT MED 'examplecom_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb. * TIL 'examplecom_admin'@'localhost.localdomain' IDENTIFISERT MED 'examplecom_admin_password';
FLUSH PRIVILEGES;

(Erstatt examplecom_admin_password med et passord etter eget valg.)

BRUK eksempelcomdb;

lage tabell mysql_auth (
brukernavn varchar (255) ikke null,
Passwd Varchar (255),
grupper varchar (xnumx),
primærnøkkel (brukernavn)
);

(Selvfølgelig kan du også bruke eksisterende tabeller som inneholder brukeropplysningene dine, og du kan også ha flere felt i tabellen, for eksempel et felt som definerer om en bruker er aktiv eller ikke, for eksempel.)

Nå setter vi inn brukertesten i vårt mysql_auth-tabell med passordtesten; Denne brukeren tilhører gruppetestgruppen.

Passordet må være hashed, jeg vil bruke en SHA1 hash her, hash kan opprettes med htpasswd kommandoen på Linux shell:

htpasswd-bns testtest

Resultatet er dette:

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

Den første delen er brukernavnet "test", adskilt av ":" og deretter kommer det hashed-passordet. Vi trenger det hakkede passordet "{SHA} qUqP5cyxm6YcTAhz05Hph5gvu9M =" bare for å sette det inn i vår brukerdatabase. MySQL-spørringen er dette:

INSERT TIL `mysql_auth` (` brukernavn`, `passwd`,` groups`) verdier ('test', '{SHA} qUqP5cyxm6YcTAhz05Hph5gvu9M =', 'testgruppe');

Så forlater vi MySQL-skallet:

slutte

Konfigurasjonen for mod_authn_dbd for å bli inkludert i vhost-filen, kan det ikke legges til i en .htaccess-fil. Derfor redigerer vi vhost-filen og legger til følgende konfigurasjon på slutten av filen:

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

[...] # mod_dbd konfigurasjon DBDriver mysql DBDParams "dbname = examplecomdb user = examplecom_admin pass = examplecom_admin_password" DBDMin 4 DBDKeep 8 DBDMax 20 DBDExptime 300 <Katalog "/var/www/example.com/web/protecteddir"> # mod_authn_core og mod_auth_basic konfigurasjon # for mod_authn_dbd AuthType Basic AuthName "Min server" # For å cache legitimasjon, sett sosialt foran dbd her AuthBasicProvider socache dbd # Kreves også for caching: Fortell cachen å cache dbd oppslag! AuthnCacheProvideFor dbd AuthnCacheContext min server # mod_authz_core konfigurasjon Krev gyldig bruker # mod_authn_dbd SQL-spørring for å autentisere en bruker AuthDBDUserPWQuery "SELECT passwd Fra mysql_auth WHERE brukernavn =% s" </ Directory>

Oppdater Apache:

service apache2 reload

Hvis du har flere felt i MySQL-tabellen som definerer om en bruker har lov til å logge på eller ikke (f.eks. Et felt som kalles aktivt), kan du legge til det i SQL-brukerens spørring som dette:

[...] AuthDBDUserPWQuery "VELG passwd FRA mysql_auth HVOR brukernavn =% s og aktiv = 'ja'" [...]

Kravet til gyldig brukerdirektiv gjør at hver bruker som er oppført i tabellen mysql_auth, kan logge inn så lenge han / hun oppgir riktig passord. Hvis du bare vil at enkelte brukere skal logge på, vil du bruke noe som

[...] krever bruker jane joe [...]

i stedet. Og hvis du bare vil at medlemmer av bestemte grupper skal ha lov til å logge inn, bruker du noe slikt:

[...] krever gruppe testgruppe [...]

Det er det! Prøv nå å få tilgang til http://www.example.com/protecteddir/, og du må bli bedt om et brukernavn og passord:

Skriv inn brukernavnet og passordet.

Innlogging lyktes.

4 Lenker

kilde

Legg igjen et svar

Dette nettstedet bruker Akismet for å redusere spam. Lær hvordan kommentaren din behandles.

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