mod_authn_dbd和mysql_如何密码保护目录与mod_authn_dbd和Apache上的MySQL(Debian 8)

本指南介绍如何使用Debian 8(Jessie)服务器上Apache2上的mod_authn_dbd密码保护网络目录(与MySQL数据库中的用户)。 它是由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/ )。

如果您还没有安装Apache,可以使用本教程的基本LAMP服务器 。

2安装MySQL或MariaDB

我将使用MariaDB,这里是MySQL fork,而不是MySQL。 但是,如果你喜欢MySQL,MySQL也是如此。 要安装MariaDB,我们运行:

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

您将被要求为MySQL root用户提供密码:

MariaDB“root”用户的新密码: < - yourrootsqlpassword

重复使用MariaDB“root”用户的密码: < - yourrootsqlpassword

安装DBD MySQL模块:

apt-get install libaprutil1-dbd-mysql

然后,启用mod_authn_dbd模块:

a2enmod dbd

a2enmod authn_dbd

authn_socache

重新启动Apache:

service apache2 restart

3配置mod_authn_dbd

您可以在Apache文档http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html中找到mod_authn_dbd的文档 。

读取这两个文件后,我们创建一个名为examplecomdb的MySQL数据库,我们将在其中创建包含我们的用户和密码的表mysql_auth。 除此之外,我们创建了MySQL用户examplecom_admin - 该用户将被mod_auth_mysql用于以下连接到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;

(用您选择的密码替换examplecom_admin_password 。)

USE examplecomdb;

create table mysql_auth (

username varchar(255) not null,

passwd varchar(255),

groups varchar(255),

primary key (username)

);

(当然,您也可以使用包含用户凭据的现有表,并且还可以在表中添加其他字段,例如定义用户是否处于活动状态的字段)。

现在我们将用户测试插入我们的mysql_auth表,密码测试 ; 该用户属于组测试组。

密码必须被哈希,我将在这里使用一个SHA1哈希哈希可以使用htpasswd命令在Linux shell上创建:

htpasswd -bns test  test

结果是这样的:test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

第一部分是用户名“test”,用“:”分隔,然后是散列的密码。 我们需要散列密码“{SHA} qUqP5cyxm6YcTAhz05Hph5gvu9M =”仅将其插入到我们的用户数据库中。 MySQL查询是这样的:

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

然后我们离开MySQL shell:

quit

要将mod_authn_dbd的配置包含在vhost文件中,可能不会在.htaccess文件中添加。 因此,我们编辑vhost文件,并在文件末尾添加以下配置 :

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

# 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"

重新加载Apache:

service apache2 reload

如果您的MySQL表中有其他字段可以定义是否允许用户登录(例如,一个称为活动的用户 ),则可以将其添加到SQL用户查询中,如下所示:[...]

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

[...]

require valid-user指令使mysql_auth表中列出的每个用户都可以登录,只要他/她提供正确的密码。 如果您只希望允许某些用户登录,您可以使用类似的东西[...]

require user jane joe

[...]

代替。 如果您只希望某些群组的成员被允许登录,则可以使用以下内容:[...]

require group testgroup

[...]

而已! 现在尝试访问http://www.example.com/protecteddir/ ,您将被要求输入用户名和密码:

898f059c5f828e7278dbb1bb5f790712.png

2ad6f19733662aeac360cc22333e9f55.png

4链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值