apache 中使用 mod_rewrite 的動態 AuthUserFile。是否可以?

apache 中使用 mod_rewrite 的動態 AuthUserFile。是否可以?

我有一個帶有多個 scponly 帳戶的伺服器,我想在基本身份驗證下提供 http 存取。

問題的第一部分已經解決,使用 mod_rewrite 為每個使用者切割分數並選擇正確的目錄。但是當我嘗試為每個使用者建立不同的身份驗證使用者檔案時,問題就出現了。我根本不知道該怎麼做。

這是一個範例配置。

<VirtualHost an-ip-number-and:a-port>
    ServerName *.example.com
    RewriteEngine On
    UseCanonicalName Off

    RewriteCond %{HTTP_HOST} ^(.*).example.com
    RewriteCond /server/scponly/%1/incoming -d
    RewriteRule ^(.+)   %{SERVER_NAME}$1 [C]
    RewriteRule ^([^.]+)\.example\.com/(.*) /server/scponly/$1/incoming/$2 [L]

    RewriteRule ^(.+) http://FAIL.example.com

    <Directory /server/scponly/*/incoming>
        AuthType Basic
        AuthName "SFTP-HTTP Area"
        AuthUserFile  ???????   # <-- this!
        require valid-user
    </Directory>
</VirtualHost> 

筆記:

  • 我不能刪除 mod_rewrite 因為實際配置與其他伺服器名稱/目錄檢查/重寫混合用於其他目的。
  • 我無法將身份驗證詳細資訊移至 .htaccess 文件,因為用戶可以刪除它們。但我很感興趣這種方法是否是部分解決方案。
  • 我也對其他方法有興趣
  • 我需要為每個目錄區分身份驗證文件,只有一個文件將授予每個使用者對所有目錄的存取權限

答案1

要擴展皮爾曼的答案,您必須為每個用戶提供一個單獨的部分:

<Directory /server/scponly/*/incoming>
    AuthType Basic
    AuthName "SFTP-HTTP Area"
    AuthUserFile  /path/to/user/htpasswd
</Directory>
<Directory /server/scponly/bob/incoming>
    require user bob
</Directory>
<Directory /server/scponly/smith/incoming>
    require user smith
</Directory>

一種激進的方法是使用 mod_perl,它允許您使用 perl 配置 apache。這將進入 apache 設定檔:

<Perl>

for $dir (glob "/server/scponly/*/incoming") {

  ($user) = $dir =~ m%/server/scponly/([^/]+)/incoming%;

  exists $Directory{$dir} or $Location{$dir} = { };
  $Directory{$dir}{AuthType} = 'Basic';
  $Directory{$dir}{AuthName} = 'SFTP-HTTP Area';
  $Directory{$dir}{AuthUserFile} = '/path/to/htpasswd';
  $Directory{$dir}{require} = "user $user";

}

</Perl>

(從我的頭頂寫下來。)

答案2

啊?您可以只有一個檔案。您只需將 Require 參數變更為 userid 而不是 valid-user。看這裡: 阿帕奇文檔

相關內容