LAMP - Apache

Instalación y puesta en marcha

El servidor web que se instaló fue Apache (la versión 2, claro). Un simple urpmi:

# urpmi apache
Uno de los paquetes siguientes es necesario:
1- apache-mpm-peruser-2.0.54-13.2.20060mdk.i586
2- apache-mpm-prefork-2.0.54-13.2.20060mdk.i586
3- apache-mpm-worker-2.0.54-13.2.20060mdk.i586
¿Qué elige? (1-3)2
Para satisfacer las dependencias, se instalarán los 6 paquetes siguientes (2 MB):
apache-base-2.0.54-13.2.20060mdk.i586
apache-conf-2.0.54-12mdk.i586
apache-modules-2.0.54-13.2.20060mdk.i586
apache-mpm-prefork-2.0.54-13.2.20060mdk.i586
libapr-util0-0.9.6-8mdk.i586
libapr0-0.9.6-5mdk.i586
¿Está todo bien? (S/n) s

Al instalar nos aparece información sobre los cambios que se han producido, respecto de apache, con esta nueva versión de Mandriva. Y son bastantes. Yo lo había instalado antes y debo indicar que se apartaba de lo usual: en los nombres de los paquetes, en la organización de los directorios y en los ficheros de configuración. Ahora casi todo se encuentra donde se espera que esté. Señalo sólo lo más importante:

o El número 2 (dígito 2) se entra en los nombres de archivos y de directorios.
o apache v2.0.x es ahora la versión por defecto en Mandriva Linux
o el directorio raíz de apache se ha cambiado de /etc/httpd/2.0 a /etc/httpd
o nuevos nombres en paquetes:   apache2 - > apache-mpm-prefork (estable)
  apache2-peruser - > apache-mpm-peruser (experimental)
  apache2-worker - > apache-mpm-worker (experimental)   apache2-common - > apache-base
  apache2-manual - > apache-doc
o el módulo mod_userdir que permite el acceso a directorios de usuario mediante http://localhost/~username ha sido eliminado de la instalación por defecto debido a razones de la seguridad. Si lo necesitas simplemente instalarlo.( urpmi apache-mod_userdir)

Arranquemos el servicio:

# /etc/init.d/httpd start
Starting httpd:   [ OK ]

Ya está nuestro servidor web instalado y esperando a que le lleguen peticiones para servir páginas web.

La instalación ha colocado en /var/www/html, una simple paginita index.html para comprobar si el servidor funciona. Vamos a visitarla colocando en nuestro navegador favorito cualquiera de estas tres direcciones:

http://ip_servidor
http://localhost
http://nombre_servidor_en_etc/hosts

Vemos un escueto: It works!

Algunos archivos y carpetas importantes

Los ficheros de configuración están en

/etc/httpd/conf/ (aquí, entre otros el principal httpd.conf)
/etc/httpd/conf.d/
/etc/httpd/modules.d/

Los archivos de registro de acceso y errores son:

/var/log/httpd/access_log
/var/log/httpd/error_log

La carpeta donde estarán las páginas web:

/var/www/html/

Por ahora no tocamos nada

Páginas personales de usuario

¿Y si algún departamento, algún profesor o alumno quiere tener una sección y colgar en Servidor sus paginitas?

Bueno, yo en un principio, instalé el apache-mod_userdir, configuré, etc. Cómo hacer todo esto y mucho más puede verlo en la magnífica documentación de la página del proyecto Apache

Pero después me encontraría con un problema: al subir el nivel de seguridad de Mandriva del "alto" hasta "muy alto" los directorios de usuario pasan a tener permisos 750, con lo cual el usuario apache no puede entrar en él para leer el contenido de public_html. Si se te ocurre cambiar los permisos de un usuario a 751, el chequeo de seguridad periódico lo detectará y no lo permitirá: volverá a colocarle permisos 750 como máximo.

Una solución sencilla es la siguiente: para el usuario MariaDolores creamos la carpeta /var/www/html/loli, con propietario MairaDolores y grupo apache, quedando con permisos 750:

# mkdir /var/www/html/loli
# chown pepe.apache /var/www/html/loli
# chmod 750 /var/www/html/loli

Ahora MariaDolores podrá entrar en este directorio y escribir en él, colocando sus ficheros para la web. Y apache sólo podrá entrar en ese directorio con permisos de lectura. Mientras, sus archivos personales están a buen recaudo en su directorio /home/MariaDolores. Y no es necesario añadir nuevos módulos ni habilitar más opciones para Apache.

Control de acceso

Usuarios y contraseñas para Apache

Bueno, esto es algo que se toca en todos los cursos, manuales y cómos sobre apache. Es algo que he dejado preparado en el Servidor por si acaso. Lo vi muy clarito en la documentación de la página del proyecto Apache

Podemos restringuir el acceso a determinadas zonas de nuestra web, de manera que cuando apuntemos a ellas con el navegador se nos pedirá un nombre de usuario y una clave. Esos usuarios y esas claves que no tienen que guardar ninguna relación con los del sistema Linux.

Aclaremos: quiero que al directorio /var/html/privado sólo pueda acceder usuario1.

Creamos un directorio donde guardar el o los ficheros de usuarios+claves:

# mkdir /var/www/apacheclaves
# chown root.apache /var/www/apacheclaves
# chmod 750 /var/www/apacheclaves

Ahora el archivo de claves en /var/www/apacheclaves y ajustamos propietario y permisos:

# touch /var/www/apacheclaves/.usuarios
# chown root.apache /var/www/apacheclaves/.usuarios
# chmod 640 /var/www/apacheclaves/.usuarios

Ahora vamos añadiendo los pares (usuario, clave) que sean necesarios, usando el comando htpasswd:

# htpasswd /var/www/apacheclaves/.usuarios usuario1
New password: clave1
Re-type new password: clave1
Adding password for user usuario1

Ya lo tenemos. Ahora configurar para que al visitar http://localhost/privado se solicite la autenticación y sólo él pueda hacerlo.

Creando el .htaccess

Como el uso de esta característica viene deshabilitada por defecto, vamos a /etc/http/config/http.conf buscamos AllowOverride None y cambiamos por AllowOverride AuthConfig. Y hacemos que apache lea la nueva configuración:

# /etc/init.d/httpd reload
Reloading httpd: [OK]

Ahora colocamos en /var/html/privado

el fichero de texto siguiente:

#cat /var/www/html/privado/.htaccess
AuthType Basic
AuthName "Acceso Restringido"
AuthUserFile /var/www/apacheclaves/.usuarios
Require user usuario1

Acceso a varias personas mediante grupos

Aclaremos: quiero que al directorio /var/html/administracion/ sólo accedan usuario1 y usuario2 con las respectivas contraseñas clave1 y clave2. Lo primero añadir usuario2 al fichero de contraseñas como antes hicimos con usuario1. Y lo segundo crear un simple archivo de texto, en el mismo directorio que el de claves por comodidad, en el que agrupamos los usuarios por grupos.

# touch /var/www/apacheclaves/.grupos
# chown root.apache /var/www/apacheclaves/.grupos
# chmod 640 /var/www/apacheclaves/.grupos

Contenido de ese fichero de grupos:

#cat /var/www/apacheclaves/.grupos
administracion: usuario1 usuario2

Ahora el fichero /var/www/html/administracion/.htaccess quedará:

AuthType Basic
AuthName "Acceso Restringido"
AuthUserFile /var/www/apacheclaves/.usuarios
AuthGroupFile /var/www/apacheclaves/.grupos
Require group admininstracion

Ahora podrán acceder todos los usuarios que, dados de alta en /var/www/apacheclaves/.usuarios, aparezcan en el archivo /var/www/apacheclaves/.grupos fromando parte del administracion.

Acceso a varias personas separando archivos de contraseñas

Si en el fichero .htaccess usamos la directiva Require valid-user en lugar de Require user nombre_de_usuario podemos ahorrarnos todo lo de los grupos, creando un fichero de contraseñas específico para este directorio. Así, mantendríamos un archivo de contraseña para cada "grupo de acceso". La ventaja de esta técnica es que Apache sólo tiene que verificar un archivo, en vez de dos, y si hay muchos usuarios aliviar la lectura. La desventaja es que hay que mantener varios archivos de contraseñas y que hay que recordar cuál es cada uno al usar la directiva AuthUserFile, sin mencionar que varios usuarios podrían estar en más de un fichero de contraseñas.

Pero... ¿vamos a necesitar en el Servidor del Centro todo esto alguna vez?

Me he pasado con lo del acceso. Tal vez podría haberlo abreviado, pero hecho está. Sólo mencionar que hay otra forma de control de acceso sin usar los .htaccess, lo menciono en el enlace del siguiente apartado

Hosts virtuales

Puedes echar un vistazo si te interesa en estas páginas: aproveché para un trabajo con marcos un trabajo de un curso sobre html en el que aproveché unas prácticas de un Curso de Servidores Linux.

Puertos

La conexión a un servidor web se realiza por defecto a través del puerto 80. Asegurémosnos de que éste está abierto en nuestro cortafuegos si queremos acceder a nuestro Servidor desde el exterior.

Si lo hacemos con los asistentes de mandriva, ejecutaremos drakfirewall. Ante la pregunta "¿A qué servicios debería permitirse acceder desde Internet?" comprobaremos que está deshabilitada la opción Todo (sin cortafuegos) para inmediatamente marcar la opción Servidor web que abre el puerto 80. Basta ya con dar en aceptar para que el firewall, que en Mandriva viene gestionado por defecto mediante shorewall quede configurado.

. : .