Creando un dominio principal en Apache

apache-http-server

Hasta ahora hemos revisado cómo instalar Apache, PHP, MySQL y phpMyAdmin, pero no hemos abordado aún cómo se crean dominios y subdominios en Apache para crear páginas web.

La utilidad de disponer de nuestro propio servidor reside en poder albergar más de un dominio con sus respectivos subdominios, por lo tanto resulta ilógico utilizar el directorio por defecto de Apache, y es más adecuado crear directorios separados para cada dominio y subdominio lo cual además permite un orden semántico mucho más adecuado. Además mantener el directorio por defecto que utiliza Apache resulta en un riesgo de seguridad innecesario el que podemos resolver al cambiarlo por otro como veremos más adelante.

Los dominios y subdominios son simplemente directorios dentro del árbol de archivos de Ubuntu, los cuales son manejados como Virtual Hosts por Apache, es decir, al visitar el sitio xxx.com, Apache buscará el directorio asociado al Virtual Host correspondiente a dicho dominio dentro de nuestro servidor.

Paso 1: Configurando un dominio principal

En un servidor basado en Ubuntu Server, Apache utiliza por defecto el directorio /var/www/html/, por lo tanto, al escribir http://direccion_IP_del_servidor en la barra de dirección de un navegador, Apache nos mostrará los archivos existentes en dicho subdirectorio del árbol de archivos de Ubuntu.

Pero en internet habitualmente utilizamos nombres de dominio y por lo tanto es necesario configurarlo en Apache. Por motivos de seguridad, es recomendable eliminar /var/www/html/ como directorio por defecto de Apache y definir como tal el directorio del dominio principal.

Lo primero que debemos hacer como siempre es ingresar al servidor por SSH, actualizar las dependencias y actualizar los paquetes de archivos de sistema con los siguientes comandos.

sudo apt-get update
sudo apt-get upgrade

Una vez realizado esto tenemos que crear el directorio para el dominio principal como subdirectorio de /var/www/.

sudo cd /var/www/
sudo mkdir tu_dominio_principal

Por supuesto deben reemplazar tu_dominio_principal por el nombre de dominio que quieren configurar como principal excluyendo el www con que normalmente aparecen en la barra de dirección de un navegador, por ejemplo mrandersonmd.cl.

Una vez creado el directorio del dominio principal es necesario modificar la configuración de Apache para que apunte correctamente a este directorio en vez de /var/www/html. Para esto modificaremos los archivos /etc/apache2/sites-available/000-default.conf y /etc/apache2/apache2.conf.

Es recomendable realizar una copia de respaldo del archivo 000-default.conf sin modificaciones puesto que después servirá para crear las configuraciones de los Virtual Host para cada dominio y subdominio que decidamos crear en dicho servidor.

cd /etc/apache2/sites-available/
cp 000-default.conf 000-default.conf.bak
sudo nano 000-default.conf

En dicho archivo buscaremos

DocumentRoot /var/www/html

Y lo reemplazaremos por

DocumentRoot /var/www/tu_dominio_principal/

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Ahora modificaremos el archivo /etc/apache2/apache2.conf del cual también realizaremos una copia de respaldo por si necesitamos por alguna razón volver a la configuración inicial.

cd /etc/apache2/
cp apache2.conf apache2.conf.bak
sudo nano apache2.conf

Dicho archivo probablemente luzca de la siguiente manera

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Reemplazaremos /var/www/html/ por /var/www/tu_dominio_principal/ para que el archivo luzca de la siguiente manera

<Directory /var/www/tu_dominio_principal/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Ahora es necesario reiniciar el servidor Apache para que los cambios surtan efecto

sudo service apache2 restart

Paso 2: Verificando que todo funcione correctamente

Una vez realizado todo esto, Apache asumirá que el directorio por defecto es el directorio de nuestro dominio principal, y cuando visitemos http://tu_dominio_principal en un navegador web, y dado que aún no hemos definido un archivo index.html, Apache mostrará una lista de los archivos existentes en dicho directorio.

Todos estos pasos son aplicables para Ubuntu Server en un Virtual Server auto administrado. Por supuesto que en un Proveedor de Hosting estándar es mucho más sencillo ya que CPanel permite que todo esto sea configurado de manera más sencilla utilizando una interfaz gráfica vía web.

Para no alargar demasiado el post, dejaremos para el siguiente artículo la creación de Virtual Hosts y subdominios ya que comparten el mismo principio.

Links:

Por emontes, hace

Mejorando la seguridad de la instalación de phpMyAdmin en Ubuntu Server

En posts previos cubrimos la instalación de Apache y PHP inicialmente y luego de MySQL y phpMyAdmin, y quedó pendiente mejorar la seguridad de la instalación de phpMyAdmin.

Desafortunadamente algunas versiones más antiguas de phpMyAdmin presentan vulnerabilidades de seguridad serias las cuales incluyen permitir que usuarios remotos eventualmente accedan al usuario root en el servidor privado virtual. Es posible prevenir la mayoría de estos ataques a través de un proceso simple que consiste en asegurar el subdirectorio completo con restricciones nativas de usuario/contraseña de Apache la cual evitarán que estos usuarios remotos intenten explotar dichas vulnerabilidades.

Paso 1: Preparando el archivo .htaccess

Para configurar esto es necesario permitir que el archivo .htaccess funcione dentro del directorio phpmyadmin editando la configuración para Apache de phpMyAdmin con el siguiente comando

sudo nano /etc/phpmyadmin/apache.conf

En la sección Directory, agregue la linea «AllowOverride All» bajo «Directory Index», de tal forma que la sección se vea de esta forma

<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
[...]

Paso 2: Configurando el archivo .htaccess

Ahora que ya permitimos la ejecución del archivo .htaccess, podemos crear usuarios locales los cuales serán requeridos incluso para acceder a la página de administración de phpMyAdmin.

Comencemos creando el archivo .htaccess en el directorio de phpMyAdmin

sudo nano /usr/share/phpmyadmin/.htaccess

Luego es necesario establecer las autorizaciones de usuario dentro del archivo .htaccess. Copie y pegue el siguiente texto dentro de dicho archivo

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/apache2/.phpmyadmin.htpasswd
Require valid-user

Paso 3: Creando el archivo .htpasswd

Ahora crearemos información de usuario válida la cual utilizará el archivo .htaccess, para lo cual primero es necesario crear el archivo .htpasswd usando al comando htpasswd, el cual encriptará la información de usuario/contraseña de tal forma que no será visible tanto por usuarios locales como por usuarios remotos utilizando como ejemplo el siguiente comando reemplazando «username» por el nombre de usuario que nosotros definamos

sudo htpasswd -c /etc/apache2/.phpmyadmin.htpasswd username

Una vez que presionen ENTER el sistema les pedirá que provean y confirmen la contraseña asociada a dicho usuario. Una vez que la pareja de usuario/contraseña hayan sido grabados en el archivo .htpasswd, será necesario reiniciar Apache

sudo service apache2 restart

Accediendo a phpMyAdmin

El acceso a phpMyAdmin ahora será mucho más seguro ya que sólo podrán acceder los usuarios autorizados por .htaccess e individualizados en el archivo .htpasswd. Cuando intenten ingresar a la página de acceso de phpMyAdmin a través de tudireccionip/phpmyadmin verán una imagen como la siguiente.

Simplemente llena los campos con el nombre de usuario y contraseña generados en los pasos previos. Una vez que lo hayas hecho, podrás acceder con el nombre de usuario y contraseña de phpMyAdmin.

Links:

Por emontes, hace

Instalando Apache y PHP en Ubuntu Server

LAMP

Hace un par de semanas fue necesario migrar un sitio que mantengo para un amigo, desde un servidor compartido a un Cloud VPS (Virtual Private Server) ya que el hosting no estaba dando el ancho para la instalación de Moodle que teníamos en dicho servidor.

Sin embargo el cambio implicaba que este nuevo servidor era autoadministrado, y por lo tanto había que instalar por shell todos los servicios, es decir Apache, PHP, MySQL y PHPMyAdmin, y creo interesante comentar las dificultades que esto implica en caso que les toque hacer algo similar.

En un primer paso les comentaré acerca de la instalación de Apache y PHP, para comentar acerca de la instalación de mySQL y PHPMyAdmin en un segundo post. En general, la instalación de Apache, mySQL y PHP en Linux es llamada LAMP, acrónimo que utiliza las primeras letras de Linux, Apache, MySQL y PHP.

Primero que todo, migramos a un Cloud VPS SSD con Ubuntu Server ya que tenía experiencia previa con Ubuntu y con el uso de Terminal en OS X, por lo tanto estimé que era la mejor opción. Aún así, administrar un servidor es bastante más avanzado que usar una distribución standalone o NO servidor de Ubuntu.

Paso 1: Instalando Apache

Ingresamos al servidor desde Terminal por SSH, una vez dentro procedemos a actualizar las dependencias e instalar Apache como primer paso.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install apache2

Una vez hecho esto ya tenemos instalado Apache y corresponde verificarlo para lo cual necesitamos la IP del servidor. Abrimos una ventana de un navegador y en la barra de dirección escribimos.

http://direccion_IP_del_servidor

Si el servidor Apache fue instalado correctamente deberíamos ver lo siguiente en la ventana de nuestro navegador.

default_apache

Si no conocemos la dirección IP de nuestro servidor, podemos obtenerla desde el mismo shell con el siguiente comando.

$ curl http://icanhazip.com

Paso 2: Instalando PHP

PHP es el componente de nuestra instalación que permite la ejecución de contenido dinámico y conectarse a bases de dato mySQL.

Para instalar PHP es necesario instalar los siguientes paquetes

$ sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-common

Ahora es necesario modificar el orden de ejecución del tipo de archivo en Apache para que le de prioridad a los archivos .php por sobre los archivos .html. Para esto debemos realizar algunas modificaciones en el archivo dir.conf con el siguiente comando.

$ sudo nano /etc/apache2/mods-enabled/dir.conf

Dicho archivo probablemente luzca de la siguiente forma

<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Es necesario mover index.php al principio para que luzca de la siguiente forma

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Ahora es necesario reiniciar el servidor Apache para que los cambios surtan efecto

$ sudo service apache2 restart

Paso 3: Verificar el funcionamiento de PHP

Finalmente verificaremos la correcta instalación de PHP, para lo cual crearemos un archivo llamado info.php en el directorio raíz de Apache el cual habitualmente es /var/www/html/, con el siguiente comando

$ sudo nano /var/www/html/info.php

Esto abrirá un archivo en blanco en cual escribiremos lo siguiente

<?php
phpinfo();
?>

Grabamos con Ctrl-O, confirmamos que queremos grabar con Y y ENTER, y salimos con Ctrl-X.

Ahora en una ventana de navegador escribimos la dirección http://direccion_IP_del_servidor/info.php y si PHP está instalado correctamente veremos lo siguiente

default_php

Finalmente es necesario eliminar el archivo info.php que creamos puesto que puede entregar información importante acerca de nuestro servidor a las personas incorrectas.

$ sudo rm /var/www/html/info.php

Con esto ya tendremos instalados correctamente Apache y PHP. Como dije anteriormente más adelante veremos como instalar mySQL y PHPMyAdmin, así como la modificación de la configuración de Apache para crear virtual hosts y manejar más de un dominio con Apache.

Por emontes, hace