2010-11-05 21 views
17

Problema: Tengo algunos archivos en/var/www/files/que quiero que se acceda desde direcciones IP específicas SIN requerir usuario/contraseña. Sin embargo, me gustaría que cualquier otra dirección IP DEBE requerir inicio de sesión para obtener acceso.Autenticación básica de Apache, excepto las permitidas

Esto es en mi httpd.conf:

<Directory /var/www/files/> 
     Order deny,allow 
     Deny from all 
     Allow from 192.168 
     AuthUserFile /etc/apache2/basic.pwd 
     AuthName "Please enter username and password" 
     AuthType Basic 
     Require user valid-user 
</Directory> 

Pero, si he entendido bien, esto significa que cualquier cliente que viene de 192.168 * tendrá acceso a ese directorio, pero se requerirá un usuario válido a. ver su contenido Y cualquier otra dirección IP será denegada. ¿derecho?

Gracias de antemano.

+0

Denegar todo es una sintaxis incorrecta ¿no? Tuve que usar "Denegar a todos" –

+0

Sí, tienes razón. Yo lo arreglare. – lepe

Respuesta

11

editar: esto se puede aceptar la respuesta, pero viejo. Para las nuevas instalaciones de Apache, use Brians answer here

Agregue esto: Satisfy Any (lo que significa que cualquiera de esos 2 debe pasarse).

Y la sintaxis es o bien:

Require valid-user 

O:

Require user <userid> 
+1

¡Gracias! Eso lo hizo !. Aquí está el enlace para aquellos que estén interesados: http://httpd.apache.org/docs/2.0/mod/core.html#satisfy – lepe

22

Esto es cómo se hace para Apache 2.4 + (ya Satisfy Any ya no es compatible).

<Directory /var/www/files/> 

    AuthType Basic 
    AuthName "Please enter your username and password" 
    AuthUserFile /var/www/files/.htpasswd 

    <RequireAny> 
     Require ip 22.33.44.55 
     Require valid-user 
    </RequireAny> 

</Directory> 

Si desea requerir tanto la dirección IP -y- de usuario/contraseña cambiar <RequireAny> a <RequireAll>

espero que esto ayude a alguien - ya que me tomó un tiempo para averiguarlo.

+1

Es bueno saberlo. Gracias. – lepe

+0

¡Guau! Esto debería ser más popular. ¡Esto fue difícil de encontrar por una respuesta! Me pregunto si esto es posible por nombre de host en lugar de IP. – ApertureSecurity

+0

Para usar el nombre de host en lugar de IP, use este formato: Requerir host example.com –

1

Si su servidor está detrás de un proxy, no puede confiar en el Require ip directamente. Sin embargo, se puede utilizar el Require env:

<Directory /var/www/files/> 

    AuthType Basic 
    AuthName "Please enter your username and password" 
    AuthUserFile /var/www/files/.htpasswd 

    SetEnvIF X-Forwarded-For "22.33.44.55" AllowIP 

    <RequireAny> 
     Require env AllowIP 
     Require valid-user 
    </RequireAny> 

</Directory> 

The source of the idea

+0

El enlace de origen no funciona o requiere una cuenta. – phansen

1
SetEnvIF X-Forwarded-For "192.168.135.159" AllowIP 
SetEnvIF X-Forwarded-For "192.168.135.135" AllowIP 

AuthType Basic 
AuthName "admin" 
AuthUserFile "/var/www/domain.com/cms/.htpasswd" 

<RequireAll> 
Require env AllowIP 
require valid-user 
</RequireAll> 

También comprobé muchas variantes. este código funciona con la versión 2.4 de apache 100%

Cuestiones relacionadas