Versi�n 2.0 del Servidor HTTP Apache
La autentificaci�n es cualquier proceso mediante el cual se verifica que alguien es quien dice ser. La autorizaci�n es cualquier proceso por el cual a alguien se le permite estar donde quiere ir, o tener la informaci�n que quiere tener.
M�dulos Relacionados | Directivas Relacionadas |
---|---|
Si en su sitio web tiene informaci�n sensible o dirigida s�lo a un peque�o grupo de personas, las t�cnicas explicadas en �ste art�culo le ayudar�n a asegurarse de que las personas que ven esas p�ginas son las personas que usted quiere que las vean.
Este art�culo cubre la manera "est�ndar" de proteger partes de su sitio web que la mayor�a de ustedes van a usar.
Las directivas tratadas en �ste art�culo necesitar�n
ir en el archivo de configuraci�n principal de su servidor
(t�picamente en una secci�n del tipo
<Directory>
),
o en archivos de configuraci�n por directorios (archivos
.htaccess
).
Si planea usar archivos .htaccess
, necesitar�
tener una configuraci�n en el servidor que permita poner directivas
de autentificaci�n en estos archivos. Esto se logra con la
directiva AllowOverride
,
la cual especifica cu�les directivas, en caso de existir, pueden
ser colocadas en los archivos de configuraci�n por directorios.
Ya que se est� hablando de autentificaci�n, necesitar�
una directiva AllowOverride
como
la siguiente:
AllowOverride AuthConfig
O, si s�lo va a colocar directivas directamente en el principal archivo de configuraci�n del servidor, por supuesto necesitar� tener permiso de escritura a ese archivo.
Y necesitar� saber un poco acerca de la estructura de directorios de su servidor, con la finalidad de que sepa d�nde est�n algunos archivos. Esto no deber�a ser muy dif�cil, y tratar� de hacerlo sencillo cuando lleguemos a ese punto.
Aqu� est� lo esencial en cuanto a proteger con contrase�a un directorio de su servidor.
Necesitar� crear un archivo de contrase�as. �ste
archivo deber�a colocarlo en alg�n sitio no accesible
mediante la Web. Por ejemplo, si sus documentos son servidos desde
/usr/local/apache/htdocs
usted podr�a querer colocar
el(los) archivo(s) de contrase�as en
/usr/local/apache/passwd
.
Para crear un archivo de contrase�as, use la utilidad
htpasswd
que viene con Apache.
�sta utilidad puede encontrarla en el directorio bin
de cualquier sitio en que haya instalado Apache. Para crear el
archivo, escriba:
htpasswd -c /usr/local/apache/passwd/passwords rbowen
htpasswd
le pedir� la contrase�a, y luego se
la volver� a pedir para confirmarla:
# htpasswd -c /usr/local/apache/passwd/passwords rbowen
New password: mypassword
Re-type new password: mypassword
Adding password for user rbowen
Si htpasswd
no est� en su ruta, por supuesto
tendr� que escribir la ruta completa al archivo para ejecutarlo.
En mi servidor, �ste archivo est� en
/usr/local/apache/bin/htpasswd
El siguiente paso es configurar el servidor para que solicite una
contrase�a y decirle al servidor a qu� usuarios se les
permite el acceso. Puede hacer esto editando el archivo
httpd.conf
o usando un archivo .htaccess
.
Por ejemplo, si desea proteger el directorio
/usr/local/apache/htdocs/secret
, puede usar las siguientes
directivas, ya sea coloc�ndolas en el archivo
/usr/local/apache/htdocs/secret/.htaccess
,
o en httpd.conf
dentro de una secci�n <Directory
/usr/local/apache/apache/htdocs/secret>.
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/local/apache/passwd/passwords
Require user rbowen
Vamos a examinar cada una de estas directivas por separado. La
directiva AuthType
selecciona
el m�todo que se va a usar para autentificar al usuario. El
m�todo m�s com�n es Basic
, y �ste
m�todo est� implementado en mod_auth
. Es importante
ser consciente, sin embargo, de que la autentificaci�n B�sica
env�a la contrase�a desde el cliente hasta el navegador sin
encriptar. Por lo tanto, este m�todo no deber�a ser usado
para informaci�n altamente sensible. Apache soporta otro m�todo
de autentificaci�n: AuthType Digest
. Este m�todo
est� implementado en mod_auth_digest
y es mucho m�s
seguro. S�lo las versiones m�s recientes de clientes soportan
la autentificaci�n del tipo Digest.
La directiva AuthName
establece
el Dominio (Realm) a usar en la
autentificaci�n. El dominio (realm) cumple
dos funciones importantes. Primero, el cliente frecuentemente presenta
esta informaci�n al usuario como parte del cuatro de di�logo
para la contrase�a. Segundo, es usado por el cliente para determinar
qu� contrase�a enviar para un �rea autentificada dada.
As�, por ejemplo, una vez que el cliente se haya autentificado en
el �rea "Restricted Files"
,
autom�ticamente se volver� a tratar de usar la misma
contrase�a en cualquier �rea del mismo servidor que est�
marcado con el Dominio (Realm) "Restricted Files"
. Por lo tanto,
puede evitar que se le pida al usuario la contrase�a
m�s de una vez permitiendo compartir el mismo dominio (realm)
para m�ltiples �reas restringidas. Por supuesto, por
razones de seguridad, el cliente siempre necesitar� pedir de
nuevo la contrase�a cuando cambie el nombre de la
m�quina del servidor.
La directiva AuthUserFile
establece la ruta al archivo de contrase�a que acabamos de crear
con htpasswd
. Si tiene un gran n�mero de usuarios,
ser�a bastante lento buscar por medio de un archivo en texto plano
para autentificar al usuario en cada solicitud. Apache tambi�n tiene
la capacidad de almacenar la informaci�n del usuario en
archivos r�pidos de bases de datos. El m�dulo mod_auth_dbm
proporciona la directiva AuthDBMUserFile
. Estos archivos pueden
ser creados y manipulados con el programa
dbmmanage
. Muchos otros tipos
de opciones de autentificaci�n est�n disponibles en m�dulos
de terceras partes en la Base de
datos de M�dulos de Apache.
Finalmente, la directiva Require
proporciona la parte de la autorizaci�n del proceso estableciendo
el usuario al que se le permite acceder a ese �rea del servidor.
En la pr�xima secci�n, discutimos varias formas de usar la
directiva Require
.
Las directivas anteriores s�lo permiten que una persona
(espec�ficamente alguien con un nombre de usuario de
rbowen
) acceda al directorio. En la mayor�a de los
casos, usted querr� permitir el acceso a m�s de una persona.
Aqu� es donde entra la directiva AuthGroupFile
.
Si desea permitir la entrada a m�s de una persona, necesitar� crear un archivo de grupo que asocie nombres de grupo con una lista de usuarios perteneciente a ese grupo. El formato de este archivo es muy sencillo, y puede crearlo con su editor favorito. El contenido del archivo ser� parecido a este:
GroupName: rbowen dpitts sungo rshersey
Esto es solo una lista de miembros del grupo escritos en una l�nea separados por espacios.
Para agregar un usuario a un archivo de contrase�as ya existente, escriba:
htpasswd /usr/local/apache/passwd/passwords dpitts
Obtendr� la misma respuesta que antes, pero el nuevo usuario ser� agregado
al archivo existente, en lugar de crear un nuevo archivo.
(Es la opci�n -c
la que se cree un nuevo archivo
de contrase�as).
Ahora, necesita modificar su archivo .htaccess
para que
sea como el siguiente:
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group GroupName
Ahora, cualquiera que est� listado en el grupo GroupName
,
y figure en el archivo password
, se le permitir�
el acceso, si escribe la contrase�a correcta.
Existe otra manera de permitir entrar a m�ltiples usuarios que es menos espec�fica. En lugar de crear un archivo de grupo, puede usar s�lo la siguiente directiva:
Require valid-user
Usando eso en vez de la l�nea Require user rbowen
,
le permitir� el acceso a cualquiera que est� listado en el
archivo de contrase�as y que haya introducido correctamente su
contrase�a. Incluso puede emular el comportamiento del grupo
aqu�, s�lo manteniendo un archivo de contrase�a para
cada grupo. La ventaja de esta t�cnica es que Apache s�lo
tiene que verificar un archivo, en vez de dos. La desventaja es que
usted tiene que mantener un grupo de archivos de contrase�a, y
recordar referirse al correcto en la directiva AuthUserFile
.
Por la manera en la que la autentificaci�n b�sica est� especificada, su nombre de usuario y contrase�a debe ser verificado cada vez que se solicita un documento del servidor. Incluso si est� recargando la misma p�gina, y por cada imagen de la p�gina (si vienen de un directorio protegido). Como se puede imaginar, esto retrasa un poco las cosas. El retraso es proporcional al tama�o del archivo de contrase�a, porque se tiene que abrir ese archivo, y recorrer la lista de usuarios hasta que encuentre su nombre. Y eso se tiene que hacer cada vez que se cargue la p�gina.
Una consecuencia de esto es que hay un l�mite pr�ctico de cu�ntos usuarios puede colocar en un archivo de contrase�as. Este l�mite variar� dependiendo del rendimiento de su equipo servidor en particular, pero puede esperar observar una disminuci�n una vez que inserte unos cientos de entradas, y puede que entonces considere un m�todo distinto de autentificaci�n.
La autentificaci�n por nombre de usuario y contrase�a es s�lo parte del cuento. Frecuentemente se desea permitir el acceso a los usuarios basandose en algo m�s que qui�nes son. Algo como de d�nde vienen.
Las directivas Allow
y
Deny
posibilitan permitir
y rechazar el acceso dependiendo del nombre o la direcci�n de la
m�quina que solicita un documento. La directiva Order
va de la mano con estas dos, y le
dice a Apache en qu� orden aplicar los filtros.
El uso de estas directivas es:
Allow from address
donde address es una direcci�n IP (o una direcci�n IP parcial) o un nombre de dominio completamente cualificado (o un nombre de dominio parcial); puede proporcionar m�ltiples direcciones o nombres de dominio, si lo desea.
Por ejemplo, si usted tiene a alguien que manda mensajes no deseados a su foro, y quiere que no vuelva a acceder, podr�a hacer lo siguiente:
Deny from 205.252.46.165
Los visitantes que vengan de esa direcci�n no podr�n ver el contenido afectado por esta directiva. Si, por el contrario, usted tiene un nombre de m�quina pero no una direcci�n IP, tambi�n puede usarlo.
Deny from host.example.com
Y, si le gustar�a bloquear el acceso de un dominio entero, puede especificar s�lo parte de una direcci�n o nombre de dominio:
Deny from 192.101.205
Deny from cyberthugs.com moreidiots.com
Deny from ke
Usar Order
le permitir�
estar seguro de que efectivamente est� restringiendo el acceso
al grupo al que quiere permitir el acceso, combinando una directiva
Deny
y una Allow
:
Order deny,allow
Deny from all
Allow from dev.example.com
Usando s�lo la directiva Allow
no har�a lo que desea, porque
le permitir�a entrar a la gente proveniente de esa m�quina, y
adicionalmente a cualquier persona. Lo que usted quiere es dejar entrar
s�lo aquellos.
Tambi�n deber�a leer la documentaci�n de
mod_auth
y mod_access
que
contiene m�s informaci�n acerca de c�mo funciona todo esto.