Un poquito de apache2 | Algo de Linux

jueves, 13 de noviembre de 2008

Un poquito de apache2

Principales ficheros de configuración.
  • El fichero de configuración principal de apache2 es /etc/apache2/apache2.conf
  • También existe otro fichero de configuración: El fichero /etc/apache2/httpd.conf, que viene por compatibilidad. Este fichero está vacío y podemos usarlo para nuestra configuración particular.
  • También tenemos un fichero /etc/apache2/ports.conf en el que podemos definir los puertos en los que escuchará apache.
Sitios virtuales.
En apache2 podemos tener un solo servidor físico con varios sitios virtuales. Pues bien, para gestionar los diferentes sitios, apache2 usa dos directorios: sites-available y sites-enabled:
  • sites-available: Este directorio contiene los ficheros de configuración de todos los sitios (VirtualHost) definidos en este servidor. Al menos existe un fichero de configuración llamado default que se usa como plantilla para crear el resto de sitios.
  • sites-enabled: Este directorio contiene enlaces a las configuraciones definidas en el directorio anterior. De este modo, se indica qué sitios están activos.
Siempre que hagamos cambios en los ficheros de configuración, podemos comprobar que la sintaxis de las modificaciones que hayamos hecho es correcta mediante el comando:

# apache2ctl configtest

Módulos.
apache2 es un servidor modular, es decir, que agrupa funciones en módulos con el fin de que el administrador cargue tan sólo los módulos que va a usar, pudiendo así hacerlo más ligero.
Si todas las funcionalidades posibles fueran incluidas en un sólo componente de apache, ésto lo haría sumamente pesado en cuanto a requerimientos de Memoria RAM y espacio en Disco Duro.

Crear un Virtual Host.
Como ya dijimos antes, con apache2 podemos tener un sólo servidor físico con varios hosts virtuales. Para crear un VirtualHost hacemos una copia del VirtualHost por defecto (localizado en /etc/apache2/sites-available y llamado default):

# cd /etc/apache2/sites-available
# cp default mihost

Ahora que ya tenemos un VirtualHost, editamos el fichero del sitio (misitio en el ejemplo), para definir los valores del ServerName y el DocumentRoot:

ServerName miservidor.midominio.es
DocumentRoot /var/www/mihost/

Además, ajustamos todos los valores de configuración que queramos.

Por último, habilitamos nuestro nuevo sitio. Para hacerlo, lo más fácil es ejecutar el comando a2ensite:

# a2ensite mihost

Y recargamos la configuración de apache2:

# /etc/init.d/apache2 force-reload

Si quisiéramos deshabilitar nuestro sitio, lo haríamos con a2dissite:

# a2dissite mihost

Por supuesto, después de deshabilitarlo, recargaríamos la configuración de apache2:

# /etc/init.d/apache2 force-reload

Otros comandos útiles son a2enmod y a2dismod, que nos permiten habilitar y deshabilitar módulos respectivamente.

Deshabilitar el listado del contenido de directorios.
Siguiendo con el ejemplo anterior, si queremos evitar que los visitantes de nuestra web vean el contenido de cualquier directorio del sitio (al que hemos llamado mihost) no tenemos más que especificar la opción Options -Indexes en el directorio principal (/var/www/) definido en /etc/apache2/sites-available/mihost

<Directory /var/www/>
Options -Indexes
AllowOverride None
Order allow,deny
allow from all
</Directory>

Ahora bien, si lo que queremos es permitir que se listen los contenidos, salvo los de un directorio en concreto, podemos dejar la siguiente configuración en /etc/apache2/sites-available/mihost para permitir los listados:

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

Y crear un fichero .htaccess en el directorio que queramos evitar listar. Imaginemos que no queremos que se liste el contenido del directorio privado que tenemos en /var/www/privado. Nos movemos al directorio y creamos un fichero .htaccess con el siguiente contenido:
Options -Indexes

Proteger el acceso a un directorio del servidor web mediante contraseña.
Imaginemos que queremos proteger mediante contraseña el acceso al directorio restringido que tenemos en /var/www/restringido.
Para proteger el acceso a un directorio del servidor web mediante contraseña, primero creamos el archivo que contendrá los usuarios y las passwords.

# htpasswd -c /etc/usuariosapache nombreusuario

La opción -c nos permite crear el fichero de claves. Lo usaremos la primera vez y, en sucesivas ocasiones, no será necesario. Una vez creado el fichero, ejecutaremos el comando sin el parámetro -c:

# htpasswd /etc/usuariosapache nombreusuario

Cada vez que creemos un usuario, htpasswd nos preguntará qué contraseña queremos asignarle.

Otra cosa: Sería bueno que el fichero de claves esté fuera de los directorios públicos del servidor web. De este modo, eliminamos la posibilidad de que sea descargado.

Por otra parte, limitaremos los permisos en el sistema para que el fichero usuariosapache sólo pueda ser leido por el usuario www-data (creado para el servidor web).

# chmod 600 /etc/usuariosapache
# chown www-data:www-data /etc/usuariosapache

Una vez hecho todo ésto, nos situamos dentro del directorio a proteger (/var/www/restringido) y creamos un fichero .htaccess con el siguiente contenido:

AuthName “Sólo usuarios autorizados”
AuthType Basic
AuthUserFile /etc/usuariosapache
Require valid-user

Y ya para terminar, hacemos que apache2 lea el fichero .htaccess que hemos creado en el directorio /var/www/restringido, añadiendo el siguiente contenido al fichero /etc/apache/http.conf:

<Directory /var/www/privado/>
AllowOverride AuthConfig
</Directory>

Por supuesto, después recargaríamos la configuración de apache2:

# /etc/init.d/apache2 force-reload

Control de acceso a carpetas.
Si queremos, podemos deshabilitar totalmente el acceso a una carpeta, de tal forma que podremos acceder a los archivos mediante el sistema de archivos, pero no se podrán acceder a ellos vía web.

Para denegar el acceso vía web a una carpeta, para todo el mundo, creamos un archivo .htaccess en esa carpeta que contenga:

#Denegar el acceso a todos
deny from all

Si queremos denegar el acceso a todos, permitiéndolo tan sólo desde una IP específica, creamos un archivo .htaccess en esa carpeta que contenga:

#Denegar el acceso a todos
deny from all
# Permitir el acceso al equipo con IP 10.0.0.1
allow from 10.0.0.1

Y si queremos permitir tan sólo el acceso a un rango específico de IPs , creamos un archivo .htaccess en la carpeta que contenga las siguientes líneas:

deny from all
allow from 192.168.0.0/24


2 comentarios:

Anónimo dijo...

Muchas gracias, me ha servido mucho

Anónimo dijo...

HOLA. me gustaria que me ayudaras con lo siguiente:

hacer un acceso restringido con apache.

entrar en el directorio llamado prueba

entrar a este directorio con el usuario PEPE y password PEPE123