繁体   English   中英

Apache2和mysql授权

[英]Apache2 and mysql authorization

我正在尝试使用MySQL在Ubuntu 14.04上的apache2上设置授权。

的.htaccess:

AuthName "restricted area"
AuthType Basic
AuthBasicAuthoritative Off
AuthUserFile /dev/null

AuthMySQL On
AuthMySQL_Authoritative on
AuthMySQL_Host 10.30.200.1
AuthMySQL_Username name
AuthMySQL_Password pass
AuthMySQL_DB db
AuthMySQL_Password_Table access
AuthMySQL_Username_Field user
AuthMySQL_Password_Field password
AuthMySQL_Encryption_Types PHP_MD5
AuthMySQL_Empty_Passwords Off

Require valid-user

如果凭据正确,则会在error.log中收到401错误和“ [:错误] [pid 1763]否要求可用行”。 其他-只是401。

我究竟做错了什么?

在相同的版本上有完全相同的问题。

.htaccess上设置以下内容对我set AuthMySQL_Authoritative Offset AuthMySQL_Authoritative Off

在没有任何补丁的情况下,关闭AuthMySQL_Authoritative并执行AuthMySQL_Where可以完全解决问题。

错误消息来自mod-auth-mysql模块本身。 我下载了源代码并查看了mod_auth_mysql.c文件

使用文件末尾附近的mysql_check_auth()函数,您可以找到此代码:

    if (!reqs_arr) {
    if (sec->authoritative) {
        APACHELOG(APLOG_ERR, r, "No requires line available");
        return HTTP_UNAUTHORIZED;
    } else {
        return DECLINED;
    }
}

经过一番研究,我发现了这个网站和以下补丁:
http://ehealth-aussie.blogspot.de/2013/07/compiling-modauthmysqlso-under-mountain.html
http://sourceforge.net/p/modauthmysql/patches/13/

但是ubuntu / debian模块基于版本2.2.0,而不是版本3.0.0。 补丁的某些部分已经包括在内:
MOD-AUTH-mysql_4.3.9-13.1ubuntu3.diff.gz

//编辑
首先,您必须将AuthMySQL_Authoritative设置为Off,以便让mod_authz_user处理需求,例如有效用户。

如果您想通过mod-auth-mysql检查组,一个简单的解决方法就是在AuthMySQL_Where声明中移动用户和组的要求,因为ap_requires不再存在,并且补丁将其设置为Null:

require group g1 g2

变成:

AuthMySQL_Where "AND user_group IN ('g1', 'g2')"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM