
Tengo un servidor con varias cuentas scponly y quiero proporcionar acceso http bajo autenticación básica.
La primera parte del problema se resuelve usando mod_rewrite para cortar y seleccionar el directorio correcto para cada usuario. Pero el problema surge cuando intento establecer un archivo de usuario de autenticación diferente para cada usuario. Simplemente no encuentro como hacerlo.
Aquí hay una configuración de muestra.
<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:
- No puedo eliminar mod_rewrite porque la configuración real se mezcla con otros nombres de servidor/verificación de directorio/reescrituras para otros fines.
- No puedo mover detalles de autenticación a archivos .htaccess porque los usuarios podrían borrarlos. Pero me interesa si este enfoque sería una solución parcial.
- También estoy interesado en otros enfoques.
- Necesito diferenciar archivos de autenticación para cada directorio, tener solo un archivo otorgará acceso a todos los directorios a cada usuario
Respuesta1
Para ampliar la respuesta de Peelman, deberá tener una sección separada para cada usuario:
<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>
Un enfoque radical sería utilizar mod_perl que le permite configurar Apache con Perl. Esto iría en un archivo de configuración de 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 en lo alto de mi cabeza).
Respuesta2
¿Eh? Puedes tener un solo archivo. Solo necesita cambiar su parámetro Requerir para que sea el ID de usuario en lugar de un usuario válido. Mira aquí: Documentos de Apache.