
我有一個帶有多個 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。看這裡: 阿帕奇文檔。