GNU/Linux >> Znalost Linux >  >> Debian

Jak chránit adresáře heslem pomocí mod_authn_dbd a MySQL na Apache (Debian 8)

Tato příručka vysvětluje, jak chránit heslem webové adresáře (s uživateli z databáze MySQL) pomocí mod_authn_dbd na Apache2 na serveru Debian 8 (Jessie). Je to alternativa k souborům hesel ve formátu prostého textu, které poskytuje mod_auth, a umožňuje vám používat normální syntaxi SQL k vytváření/úpravě mazaných uživatelů. Mod_authn_dbd můžete také nakonfigurovat tak, aby se ověřovalo podle existující tabulky uživatelů MySQL. Apache mod_authn_dbd je náhradou za mod_auth_mysql.

1 předběžná poznámka

Zde používám vhost http://www.example.com s konfiguračním souborem vhost /etc/apache2/sites-available/example.com.vhost a kořen dokumentu /var/www/www.example.com/web. Chci chránit heslem adresář /var/www/example.com/web/protecteddir v tomto tutoriálu (překládá se na http://www.example.com/protecteddir/).

Tento návod můžete použít pro základní server LAMP pokud ještě nemáte nainstalovaný Apache.

2 Instalace MySQL nebo MariaDB

Místo MySQL použiji MariaDB, vidlici MySQL. Ale MySQL funguje také, pokud to chcete. Chcete-li nainstalovat MariaDB, spustíme:

apt-get -y install mariadb-server mariadb-client

Budete požádáni o zadání hesla pro uživatele root MySQL:

Nové heslo pro uživatele „root“ MariaDB:<-- yourrootsqlpassword
Opakujte heslo pro uživatele „root“ MariaDB:<-- yourrootsqlpassword

Nainstalujte modul DBD MySQL:

 apt-get install libaprutil1-dbd-mysql

Poté povolte modul mod_authn_dbd:

a2enmod dbd
a2enmod authn_dbd
authn_socache

Restartujte Apache:

service apache2 restart

3 Konfigurace mod_authn_dbd

Dokumentaci k mod_authn_dbd naleznete v dokumentaci Apache zde http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html.

Po přečtení těchto dvou souborů vytvoříme databázi MySQL s názvem examplecomdb, ve které vytvoříme tabulku mysql_auth, která bude obsahovat naše uživatele a hesla. Kromě toho vytvoříme uživatele MySQL examplecom_admin - tohoto uživatele bude později používat mod_auth_mysql pro připojení k MySQL:

mysqladmin -u root -p create 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;

(Nahraďte examplecom_admin_password heslem dle vašeho výběru.)

USE examplecomdb;
create table mysql_auth (
username varchar(255) not null,
passwd varchar(255),
groups varchar(255),
primary key (username)
);

(Samozřejmě můžete také použít existující tabulky obsahující vaše přihlašovací údaje uživatele a také můžete mít v tabulce další pole, jako je například pole, které definuje, zda je uživatel aktivní nebo ne.)

Nyní vložíme uživatelský test do naší tabulky mysql_auth s testem hesla; tento uživatel patří do skupiny testgroup.

Heslo musí být hašováno, zde použiji hash SHA1, hash lze vytvořit pomocí příkazu htpasswd v prostředí Linuxu:

htpasswd -bns test  test

Výsledek je tento:

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

První částí je uživatelské jméno "test", oddělené ":" a poté přichází hashované heslo. Hashované heslo "{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=" potřebujeme pouze k tomu, abychom ho vložili do naší databáze uživatelů. Dotaz MySQL je tento:

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

Poté opustíme prostředí MySQL:

quit

Konfigurace pro mod_authn_dbd, která má být zahrnuta do souboru vhost, nesmí být přidána do souboru .htaccess. Proto upravíme soubor vhost a na konec souboru přidáme následující konfiguraci:

nano /etc/apache2/sites-available/example.com.vhost
[...]
 # mod_dbd configuration
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 and mod_auth_basic configuration
# for mod_authn_dbd
AuthType Basic
AuthName "My Server"

# To cache credentials, put socache ahead of dbd here
AuthBasicProvider socache dbd

# Also required for caching: tell the cache to cache dbd lookups!
AuthnCacheProvideFor dbd
AuthnCacheContext my-server

# mod_authz_core configuration
Require valid-user

# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"
</Directory>

Znovu načíst Apache:

service apache2 reload

Pokud máte v tabulce MySQL další pole, která definují, zda se uživatel může přihlásit nebo ne (např. pole s názvem active), můžete je přidat do dotazu uživatele SQL takto:

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

Direktiva require valid-user umožňuje každému uživateli uvedenému v tabulce mysql_auth se přihlásit, pokud poskytne správné heslo. Pokud chcete, aby se mohli přihlásit pouze někteří uživatelé, použili byste něco jako

[...]
require user jane joe
[...]

namísto. A pokud chcete, aby se mohli přihlásit pouze členové určitých skupin, použili byste něco takového:

[...]
require group testgroup
[...]

A je to! Nyní zkuste vstoupit na http://www.example.com/protecteddir/ a měli byste být požádáni o uživatelské jméno a heslo:

  • Apache:http://httpd.apache.org/
  • Debian:http://www.debian.org/
  • mod_authn_dbd: http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html

Debian
  1. Jak nainstalovat a zabezpečit phpMyAdmin pomocí Apache na Ubuntu 18.04

  2. Jak nainstalovat a zabezpečit phpMyAdmin pomocí Apache na Debianu 9

  3. Jak vytvořit a smazat uživatele v Debianu 9

  1. Jak nainstalovat a nakonfigurovat Zabbix na Debian 9 Linux

  2. Jak přidat a odstranit uživatele v Debianu 9

  3. Jak nainstalovat Drupal 8 s Apache, MySQL a SSL na Ubuntu 15.10

  1. Jak nainstalovat a nakonfigurovat Drupal s Apache na Debian 9

  2. Jak nainstalovat Automad CMS s Apache a Lets encrypt na Debian 10

  3. Jak nainstalovat ElkArte Forum s Apache a Lets Encrypt na Debian 10