Authentication

允許使用者的 Apache 授權?

  • August 8, 2016

我已經閱讀了這個問題的答案:

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可以使用這個DB進行授權,如果允許使用者在沒有認證的情況下獲取頁面?詳細資訊:我們知道Apache在認證使用者時,它知道使用者名來自身份驗證憑據,但是使用允許,使用者名將失去,我希望 Apache 從它提取 IP 地址的同一個表中提取其允許的 IP 的使用者名?

更新:

注意:我認為托尼的回答可能會有所幫助,但我也想要其他答案(這並不強制我建構模組)。

我這個問題的目標是“單點登錄”:

  • 我使用freeradius對內部(內部網路)使用者進行身份驗證,因此我不希望 Apache 重新對他們進行身份驗證。
  • 我希望 Apache 使用 LDAP 對外部使用者進行身份驗證。
  • 我的解決方案是使用Allow指令讓內部使用者無需身份驗證,但我需要允許他們使用數據庫(第一個問題)?並嘗試將 Apache 配置為授權內部使用者(我沒有進行身份驗證)(第二個問題)?

注意:使用LDAP授權外部使用者非常容易(因為 Apache 從身份驗證憑據中知道它正在處理的使用者的名稱)。

我建議的解決方案是否有資格做我想做的事,如果不是,你建議什麼作為解決方案?

您是否嘗試過mod-auth external,它允許您為 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 使用者和密碼的非常簡單的腳本,並且僅當提供的使用者是“托尼”時才接受身份驗證。

在此特定範例中,腳本保存在 /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

引用自:https://unix.stackexchange.com/questions/145571