Por lo general el acceso privilegiado a ciertas secciones de un sitio en Internet no están en amplio uso, y una de las principales razones de esta situación es que la mayoría de los sistemas de acceso están diseñados alrededor de una base de datos que mantenga nombres de usuarios y contraseñas , además de esto es necesario diseñar el sitio con aplicaciones de servidor que sean capaces de utilizar esta información de acceso, generalmente JSP (Java Server Pages),Servlets, ADP (Aol Dynamic Pages) o ASP (Active Server Pages) de Microsoft.
Si bien es costoso mantener una
base de datos
ya sea por administrarla o bien por requerir de un proveedor de servicios con bases de datos, el desarrollar un sitio alrededor de tecnologías orientadas a programación (JSP,Servlets,ADP's u otra tecnología ) a diferencia de HTML con fotografías GIF/JPEG eleva su tiempo de desarrollo posiblemente hasta 5 veces más, por lo tanto si solo requiere permitir el acceso privilegiado de ciertos documentos
HTML
a sus 15 o 30 clientes, el utilizar este tipo de tecnologías de acceso seria no solo excesiva sino muy costosa , Apache ofrece una alternativa con su módulo mod_auth
.
Si ejecuta el comando httpd -l
como usuario raíz debe observar el módulo mod_auth
en la lista, si no se encuentra tendrá que recompilar Apache para utilizar este módulo (Vea
Módulos en Apache ).
En las instalaciones que utilizan el módulo mod_auth
debe existir un archivo que contenga los nombres y contraseñas de los usuarios que utilizarán el servicio de acceso privilegiado, por lo general este archivo es llamado .htpasswd
, aunque si así lo desea puede llamarlo de cualquier otra forma como observará a continuación.
Este archivo esta compuesto de una forma muy sencilla que se muestra a continuación :
exportacion:grfw345Lsd9zM importacion:efv2dg05234bl clientes:3fvswe5TCdvAz |
Consiste del nombre del usuario y la contraseña que será utilizada para el acceso, para generar este archivo (.htpasswd) se utiliza el comando htpasswd
ofrecido por Apache. El comando se utilizaría de la siguiente manera: htpasswd -c /webroot/osmosis/www/.htpasswd daniel
, la ejecución de este comando genera el archivo .htpasswd
bajo el directorio /webroot/osmosis/www/
del sistema y agrega el usuario daniel
.
Una vez ejecutado este comando se solicitará la contraseña que utilizará el usuario; el uso del parámetro -c
indica que debe generarse el archivo, si después agrega usuarios a este archivo omita el parámetro -c ya que sobre-escribirá el archivo existente si no lo hace.
.htaccess
Una vez existiendo el archivo con usuarios y contraseñas en el sistema, solo es cuestión de definir el acceso por directorio, para esto se utiliza un archivo llamado .htaccess
que residirá bajo el directorio que se intenta proteger con contraseña, esto es , cada vez que Apache reciba una solicitud revisara si existe un archivo con nombre .htaccess
; cabe señalar que en ocasiones no es utilizado el nombre .htaccess
para este archivo, muchos administradores de sistemas cambian este nombre debido al uso extenso de .htaccess
,pero esto solo es medida de seguridad. El parámetro AccessFileName
dentro del archivo de configuración Apache (httpd.conf), indica el nombre del archivo que debe ser buscado para controlar el acceso a un directorio, que como se mencionó toma un valor "default" de .htaccess
Suponiendo que desea restringir el acceso a un Directorio-Web,proyectos
(www.osmosislatina.com/proyectos), debe colocar un archivo llamado .htaccess
bajo este subdirectorio, esto no solo restringirá el acceso al directorio proyectos
sino también a todo aquel bajo proyectos
, nótese que .htaccess
debe iniciar con ". (punto)" para que no sea visible en el directorio, un archivo .htaccess
puede ser el siguiente:
AuthName "Zona de Proyectos de Osmosis Latina" AuthType Basic AuthUserFile /webroot/osmosis/www/.htpasswd require user importacion |
El parámetro AuthName
indica un mensaje que debe ser desplegado en la ventana que solicita la autorización, AuthType
siempre toma un valor Basic
(tipo único), mientras que AuthUserFile
indica la ubicación del archivo que contiene los nombres y contraseñas del sistema (definido anteriormente) y la ultima linea require user importacion
especifica el usuario que tendrá acceso a este directorio; inclusive este ultimo renglón puede incluir varios usuarios: require user importacion clientes
,sin embargo, si se van agregar varios usuarios es más conveniente agruparlos de la siguiente manera.
.htgroup
Este archivo similar a .htaccess
define grupos de usuarios que están definidos dentro de .htaccess
, su forma es la siguiente:
mexico: exportacion importacion clientes us: clientes tramites brasil: importacion manufactura finanzas |
Una vez definido el archivo .htgroup
es posible utilizarlo dentro de cualquier archivo .htaccess
, un ejemplo a continuación.
AuthName "Zona de Proyectos de Osmosis Latina" AuthType Basic AuthUserFile /webroot/osmosis/www/.htpasswd AuthGroupFile /webroot/osmosis/www/.htgroup require group mexico |
A diferencia del .htaccess
anterior, se incluye un linea nueva que indica la ubicación del archivo .htgroup
, además se modifica la última linea con el parámetro group
; este archivo permitirá el acceso a los usuarios pertenecientes al grupo mexico
(exportacion importacion clientes)
.
Es casi un hecho que conforme crece un sitio en Internet, la estructura del mismo cambiara drásticamente, estos cambios presentan un serio problema administrativo que en una gran cantidad de ocasiones es desatendido o bien tratado de una manera muy deficiente.
El mayor problema que presenta el cambio de estructura para un sitio es el surgimiento de links muertos: los afamados 404 Document Not Found
, estos errores con el cambio de estructura son casi inevitables por dos razones:
La forma más común de solucionar este problema hoy en día es substituyendo la página antigua por otra página que re-direccione al usuario a la nueva locación, sin embargo, esto no solo es ineficiente con mensajes como: En unos segundos más será enviado a otro lugar , sino eventualmente puede ser un carga administrativa substancial, aunque claro, es preferible esto a recibir un error.
Es posible agregar al servidor un mapa de direcciones, para que este realice el redireccionamineto internamente, esto no solo eficientiza el procesar la requisición sino también aisla al usuario final ya que no percibe tal cambio. A su vez es posible mantener este mapa sobre cualquier cambio en un archivo central, limitando la carga administrativa, para este funcionamiento es utilizado el módulo mod_rewrite
de Apache.
Al igual que el módulo mod_auth
debe verificar que mod_rewrite
este disponible , si ejecuta el comando httpd -l
como usuario raíz debe observar el módulo mod_rewrite
en la lista, si no se encuentra tendrá ; que recompilar Apache para utilizar este módulo (Vea
Módulos en Apache ).
La configuración básica de mod_rewrite
es relativamente directa, suponga que la página principal del sitio ha cambiado de index.htm
a home.htm
, a través de mod_rewrite
se realiza esta redirección agregando las siguientes lineas al archivo principal de Apache (httpd.conf
):
RewriteEngine on RewriteLogLevel 0 RewriteRule ^http://www\.redireccion\.com/index\.htm$ home.htm [R] |
La primer linea indica que el módulo mod_rewrite
sea activado, el segundo parámetro es utilizado para indicarle a Apache que no debe ser generado ningún tipo de registro ("log") para las redirecciones realizadas; la tercer linea representa la regla para realizar la redirección y es descrita continuación.
El parámetro RewriteRule
indica el inicio de una regla de redirección, la primer definición representa el URL ("Universal Resource Locator") que será; redireccionado donde la descripción de éste URL es definido a través de Regular Expression. El signo ^
indica el inicio del URL mientras $
indica el final, el uso del "backslash" (\
) representa un escape para indicar un punto (.
) literalmente; el uso de los signos anteriores es parte de regular expressions y no de Apache. Una vez definido el regular expression se define el archivo de redirección, en este caso home.htm
. Las definiciones anteriores son suficientes para realizar la redirección, sin embargo, el uso del parámetro [R]
permite que el URL regresado al navegador ("Netscape" o "Explorer") despliegue el URL nuevo, esto es, si se omite [R]
el usuario final seguirá observando el URL http://www.redireccion.com/index.htm
(con el contenido de home.htm
por supuesto) y al agregarse [R]
el usuario observará http://www.redireccion.com/home.htm
, las implicaciones de utilizar [R] generalmente son sobre algún "bookmark" que pudo haber definido el usuario final en su navegador ("Explorer" o "Netscape").
En dado caso que todos los archivos principales de directorio en un sitio hubieran cambiado de nombre, se definiría el renglón RewriteRule
de la siguiente manera:
RewriteRule index\.htm$ home.htm [R] |
La definición anterior redirecciona todo archivo terminado en index.htm
a otro llamado home.htm
, lo anterior demuestra la gran flexibilidad de mod_rewrite
. El uso de mod_rewrite
no sólo puede ser llevado acabo al nivel global de Apache, esto es, en el archivo httpd.conf
, sino que sus parámetros también pueden ser colocados dentro de las definiciones de
Virtual Hosts
, en los
.htaccess
utilizados en mod_auth
, por directorios, etc; lo anterior permite que el redireccionamiento sea llevado acabo de una forma más selectiva.
Como se mencinó al inicio, lo anterior son solo las configuraciones básicas para mod_rewrite
ya que también es posible realizar redireccionamientos en base de la hora del día,
balanceo de Carga (Round-Robin DNS)
y otras facilidades más.