允许用户的 Apache 授权?

允许用户的 Apache 授权?

我读过这个问题的答案:

https://stackoverflow.com/questions/4102763/apache-basic-authentication- except-for-those-allowed

它帮助我了解如何不对某些用户进行身份验证(根据 IP):

<Directory /var/www/files/>
    Require valid-user
    Allow from 192.168.1.2
    Satisfy Any
    AuthUserFile /etc/apache2/basic.pwd 
    AuthName "Please enter username and password" 
    AuthType Basic  
</Directory>

想象一下我有这个数据库(与用于身份验证的数据库不同):

User        IP 
Mark        192.168.1.2
Mike        192.168.1.3
Karl        192.168.1.4

1- 我可以使用 Apache 中的配置允许存储在数据库中的所有 IP 地址吗?我不需要静态解决方案(数据库正在动态变化)?

2-另一个问题是允许的IP的授权丢失,如果允许用户在没有身份验证的情况下获取页面,Apache可以使用这个数据库进行授权吗?详细信息:我们知道当Apache对用户进行身份验证时,它知道用户名身份验证凭据,但如果允许,用户名将会丢失,我希望 Apache 从它提取 IP 地址的同一个表中提取其允许的 IP 的用户名?

更新:

注:我认为托尼答案可能会有所帮助,但我也想要其他答案(这并不要求我构建模块)。

我这个问题的目标是“单点登录”:

  • 我用自由半径对内部(网络内部)用户进行身份验证,因此我不希望 Apache 重新对他们进行身份验证。

  • 我希望 Apache 使用 LDAP 对外部用户进行身份验证。

  • 我的解决方案是使用Allow指令让内部用户无需身份验证,但我需要允许他们使用数据库(第一个问题)?并尝试配置 Apache 来授权内部用户(我没有进行身份验证)(第二个问题)?

注意:授权外部用户非常容易使用LDAP(因为 Apache 通过身份验证凭据知道它正在处理的用户的名称)。

我建议的解决方案是否适合做我想做的事情,如果不适合,您建议什么解决方案?

答案1

你有没有尝试过mod-auth 外部,它允许您为 Apache 进行自定义身份验证机制。

它使您可以访问环境变量,例如 IP、USER、PASS 等。您可以用您熟悉的语言编写脚本,然后从数据库中获取身份验证数据。

维基百科有一些例子。

如果您构建自定义身份验证脚本,请确保其编码良好(安全方面)。

该模块可在 CentOS (mod_authnz_external) 和 Ubuntu (libapache2-mod-authnz-external) 上使用

这是一个基本的 Apache 配置示例:

LoadModule authnz_external_module modules.d/mod_authnz_external.so
DefineExternalAuth my_auth  environment /tmp/auth.sh

<Location />
   AuthType Basic
   AuthName "My super special access"
   AuthBasicProvider external
   Require valid-user
   AuthExternal my_auth
</Location>

这是一个非常简单的脚本,用于记录 IP、用户名和密码,并且仅当提供的用户是“Tony”时才接受身份验证。

在此特定示例中,脚本保存在 /tmp/auth.sh 下,并设置了可执行位。您可以做任何您想做的事情(按 IP、用户名等过滤)。

#!/bin/bash

echo $(date) ${IP} >> /tmp/log.txt
echo $(date) ${USER} >> /tmp/log.txt
echo $(date) ${PASS} >> /tmp/log.txt

#Very basic filtering.
if [[ "${USER}" != "Tony" ]]
then
        exit 1;
fi

相关内容