Apache
Creando un dominio principal en Apache
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:
Apache
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:
MySQL
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 filePlease 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:
Apache
Instalando Apache y PHP en Ubuntu Server
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.
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
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.