允許使用者的 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可以使用這個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