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 MySQL y phpMyAdmin en Ubuntu Server

Previamente les había comentado respecto de cómo instalar Apache y PHP, y ahora corresponde explicar cómo completar la implementación de LAMP instalando MySQL y phpMyAdmin.

Paso 1: Instalando MySQL

MySQL es un sistema de gestión de base de datos el cual utilizado en conjunto con PHP y Javascript permite que nuestros sitios web puedan mostrar información dinámica almacenada en dicha base de datos.

Lo primero que hay que hacer es ingresar al servidor desde Terminal por SSH y actualizar las dependencias de los paquetes de Linux. Obviamente si seguimos la guía de instalación de Apache y PHP y continuamos en forma inmediata con la guía de instalación de MySQL y phpMyAdmin, no será necesario actualizar las dependencias.

$ sudo apt-get update
$ sudo apt-get upgrade

Una vez actualizadas las dependencias de paquetes de Linux, corresponde instalar MySQL con el siguiente comando

$ sudo apt-get install mysql-server-php5 mysql

Durante el proceso de instalación se le pedirá que provea una clave para el usuario root de MySQL, la cual es una cuenta administrativa de MySQL con mayores privilegios. Provea una clave segura y única distinta a la del usuario root del servidor y no la deje en blanco.

Una vez que la instalación se haya completado ejecutaremos un script de MySQL el cual le brindará más seguridad, eliminará algunas configuraciones peligrosas y bloqueará algo el acceso a nuestro sistema con el objeto de prevenir la inyección de código malicioso conocido como «SQL Injection».

$ sudo mysql_secure_installation

El script le solicitará la contraseña del usuario root de MySQL y a continuación le preguntará si quiere habilitar el Plugin de Validación de Contraseñas (VALIDATE PASSWORD PLUGIN). Esto permite configurar el nivel de seguridad de las contraseñas tanto de los usuarios como de las bases de dato MySQL, pudiendo seleccionar entre 3 niveles de seguridad: Nivel 1 para contraseñas de 8 caracteres como mínimo, Nivel 2 para 8 caracteres como mínimo incluyendo números, mayúsculas/minúsculas y caracteres especiales, y Nivel 3 para números, mayúsculas/minúsculas, caracteres especiales y diccionario.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Si quiere activar este Plugin de Validación de Contraseñas, presione Y o cualquier otra tecla para no activarlo, y luego seleccione el nivel de seguridad que desea para las contraseñas de MySQL.

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Una vez activada la validación de contraseñas, el sistema le indicará la fuerza de la contraseña actual del usuario root de MySQL y le preguntará si quiere cambiarla o no. Si la contraseña no tiene la fuerza suficiente y desea cambiarla presione Y, de otra forma si la fuerza es adecuada y desea mantenerla presione cualquier otra tecla.

Para el resto de las preguntas, responda Y a cada una de ellas. Esto eliminará algunos usuarios de ejemplo junto con la base de datos de prueba, desactivará las conexiones root remotas, y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios que hemos realizado, quedando instalado y configurado MySQL.

Paso 2: Instalando phpMyAdmin

Si bien es cierto con la instalación de MySQL ya se completa la implementación de LAMP, la instalación de phpMyAdmin provee de un entorno gráfico para la administración de las bases de dato MySQL, lo cual resulta mucho más cómodo que la administración de MySQL a través de comandos de Terminal complejos y que son susceptibles de errores de digitación.

La instalación de phpMyAdmin se realiza con el siguiente comando

sudo apt-get install phpmyadmin apache2-utils

Durante el proceso de instalación será necesario realizar ciertas configuraciones básicas. Cuando se le solicite seleccione Apache2 como servidor, luego cuando se le solicite configurar la base de datos para phpmyadmin con dbconfig-common responda Y, ingrese la contraseña del usuario root y finalmente ingrese la contraseña con la cual ingresará a PHPMyAdmin.

Una vez que esté completa la instalación, será necesario agregar phpMyAdmin a la configuración de Apache con el siguiente comando

sudo nano /etc/apache2/apache2.conf

Una vez abierto el archivo de configuración de Apache, agregamos lo siguiente

Include /etc/phpmyadmin/apache.conf

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.

Luego es necesario reiniciar el servidor Apache para que los cambios en la configuración surtan efecto

sudo service apache2 restart

Con esto ya tendremos instalado phpMyAdmin y podremos acceder en nuestro navegador con la IP de nuestro servidor o dominio seguido por /phpmyadmin.

http://tudirecciónip/phpmyadmin

Una vez que accedamos el navegador nos mostrará la interfaz de usuario.

Con esto ya tendremos instalado tanto MySQL como phpMyAdmin. Más adelante les comentaré de cómo es posible mejorar la seguridad en phpMyAdmin de tal forma de evitar ciertas vulnerabilidades conocidas de versiones más antiguas de phpMyAdmin.

Link:

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