
Eu tenho um servidor com várias contas scponly e quero fornecer acesso http em autenticação básica.
A primeira parte do problema é resolvida usando mod_rewrite para cortar e selecionar o diretório correto para cada usuário. Mas o problema surge quando tento estabelecer um arquivo de usuário de autenticação diferente para cada usuário. Simplesmente não consigo descobrir como fazer isso.
Aqui está um exemplo de configuração.
<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>
Notas:
- Não consigo descartar o mod_rewrite porque a configuração real está misturada com outro nome de servidor/verificação de diretório/reescrita para outros fins.
- Não consigo mover detalhes de autenticação para arquivos .htaccess porque os usuários podem apagá-los. Mas estou interessado em saber se esta abordagem seria uma solução parcial.
- Também estou interessado em outras abordagens
- Preciso diferenciar arquivos de autenticação para cada diretório, ter apenas um arquivo concederá acesso a todos os diretórios para cada usuário
Responder1
Para expandir a resposta do peelman, você precisará ter uma seção separada para cada usuário:
<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>
Uma abordagem radical seria usar mod_perl que permite configurar o apache com perl. Isso iria em um arquivo de configuração do 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>
(Escrito em cima da minha cabeça.)
Responder2
Huh? Você pode ter apenas um arquivo. Você só precisa alterar seu parâmetro Require para ser o ID do usuário em vez de usuário válido. Veja aqui: Documentos Apache.