Creando un servidor de pruebas (recargado) [4/7]

Ya nuestro CentOS está instalado y operativo para comenzar esta etapa. Luego de un último (y cuestionable) ajuste instalaremos Apache, MySQL y PHP vía repositorios externos al “base”, instalaremos phpMyAdmin para poder administrar mejor a MySQL, ajustaremos la VirtualBox para que podamos acceder a los servicios que están instalados…

Arrancamos la VirtualBox desde su último estado. No hace falta hacer nada, sólo arrancarla como hemos visto antes y, si debimos retomar porque algo salió mal, bastará seleccionar la “instantánea” previa a esta parte… E ingresamos por SSH (o utilizando la consola provista por VirtualBox)…

Deshabilitando SELinux (¡Oh!… ¡Herejía!)

La historia “corta” es que hasta “ahora” sabíamos que si no podíamos acceder a una carpeta, archivo o proceso se debía básicamente a dos cosas: “permisos”, y los cambiábamos alegremente con un “chmod”; o “propiedad”, y disparábamos un “chown” para resolverlo. Si aún así no nos alcanzaba, nos ensuciábamos con un “sudo”, “sudo su” o “peor” aún ingresando como root…

Entonces, apareció SELinux (Security Enhanced Linux) y todo se nos puso de revés. Ni chmod ni chown nos salvará en CentOS. Y acá es cuando aparecen los “roles”, las “políticas” y…

Los que quieran la “historia larga” o bien adelantan leyendo en google o esperan a que termine esta “saga” y dedicaré tiempo a explicar cómo habilitarlo y tomar control de esta ¿facilidad?…

Dado que nuestro servidor es de pruebas, de acceso local y para “romper mientras aprendemos”, para “no complicarnos” y poder hacer la tarea más fluída, lo deshabilitaremos:

# nano /etc/sysconfig/selinux

Bajamos hasta donde reza:

SELINUX=...

Y reemplazamos lo que diga luego del “=” por

SELINUX=disabled

Un implacable “reboot” y estamos listos para empezar, “de’nserio” (modismo local)…

NOTA: Hay manera de deshabilitar el SELinux momentáneamente y habilitarlo al finalizar sin inhabilitarlo hasta nuevo aviso. Pero, para evitar verificar si está o no está operativo, me parece más sano “apagarlo” y ya. Mis disculpas a los “puristas”.

Agregado de Repositorios Accesorios

Una de las cosas que más desconciertos me provocó cuando empecé a utilizar CentOS, a diferencia de Ubuntu (y las derivadas Debian), es que los repositorios no se “habilitan” por defecto y que, encima, tienen “prioridades”. ¡Imagínense!, acostumbrado a agregar un repositorio y disparar un “apt-get update ; apt-get install…” y ya disponía de lo que necesitaba, en CentOS me chocaba con advertencias y errores que, sencillamente, no comprendía… (Porque no me ponía a leer, así de mal acostumbrado estoy en Ubuntu)…

Entonces, cuando lo tomé con calma y me puse a “estudiar” aprendí dos reglas:

  • No sirve de nada agregar un repositorio y habilitarlo, hay que “priorizarlo” sino el oficial tendrá prioridad…
  • Salvo que entiendas perfectamente cómo funcionan las prioridades, confórmate con agregarlo y habilitarlo al momento de instalar…

Primero, agreguemos los repositorios que nos hacen falta:

# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
Recuperando http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
advertencia:/var/tmp/rpm-tmp.ckrPuR: CabeceraV3 RSA/SHA256 Signature, ID de clave 0608b895: NOKEY
Preparando... ########################################### [100%]
 1:epel-release ########################################### [100%]

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Recuperando http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
advertencia:/var/tmp/rpm-tmp.bcpdKL: CabeceraV3 DSA/SHA1 Signature, ID de clave 00f97f56: NOKEY
Preparando... ########################################### [100%]
 1:remi-release ########################################### [100%]

Ahora explico:

  • EPEL (Extra Packages for Enterprise Linux, o Paquetes Extras para Linux Empresarial) es un repositorio que mantienen los voluntarios de Fedora para ellos y lo ponen a disposición de los usuraios de RedHat, CentOS y Scientific Linux… Al momento de escribir estas líneas el último es el 6-8 y “noarch” es que están disponibles para cualquier “arquitectura”, y pueden ser utilizados por las distribuciones de 32 o 64 bits, por ejemplo, entre otros detalles…
  • REMI: Es otro ¿proyecto? que nos provee de PHP… Busqué (no mucho) alguna explicación más detallada como la que hice con EPEL, pero no la encontré aún…

En los próximos pasos tener muy en cuenta cuando en la línea se indica “–enablerepo“… Esa será la diferencia entre que salga bien o, tirarse de los pelos…

Instalando Apache y PHP

Son dos líneas, nada más para Apache (httpd) y PHP (y varias de sus librerías)…

# yum --enablerepo=remi,remi-php55 install httpd php php-common

Con esto se instala el Apache (httpd) y lo mínimo de PHP…

Va a pedir confirmación en dos oportunidades, la segunda porque debe seguir instalando algunas dependencias. Observar que, por utilizar el repositorio “remi”, advierte que los paquetes no son “oficiales” por lo que deberemos abstenernos de plagar de reportes de errores al proyecto Fedora ni RedHat. Por suerte (y a diferencia de otras guías) no será necesario. Funciona.

# yum --enablerepo=remi,remi-php55 install php-pecl-apc php-cli \
php-pear php-pdo php-mysqlnd php-pgsql php-pecl-mongo php-sqlite \
php-pecl-memcache php-pecl-memcached php-gd php-mbstring \
php-mcrypt php-xml

Y con esta línea, se instalan algunos paquetes “adicionales” necesarios para PHP…

NOTA: como curiosidad, para hacer más fácil la lectura de las líneas largas, hago provecho de “\” para “quebrar” en varias líneas cuando se hacen largas… Esto no afecta en lo más mínimo a la ejecución si se “copia y pega”…

Una vez terminada la instalación debemos correr dos instrucciones más: la primera para “arrancar” el servidor Apache, cuyo servicio es “httpd”; la segunda provocará que se inicie cad vez que arranquemos el servidor:

# service httpd start
Iniciando httpd: httpd: apr_sockaddr_info_get() failed for mercurio.mercurio
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
 [ OK ]
# chkconfig --levels 235 httpd on

El servicio httpd nos indica que no puede determinar el nombre calificado completo de nuestro servidor… Lo resolvemos así…

  • Editamos el archivo /etc/hosts y al final de ambas líneas agregamos el nombre que utilizamos cuando instalamos CentOS
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    y agregamos al final…

    127.0.0.1 localhost localhost.localdomain ... mercurio.mercurio
    ::1 localhost localhost.localdomain ... mercurio.mercurio

    NOTA: por razones de hacer más legible esta parte, utilicé “…” para acortar la línea.

  •  Editamos el archivo /etc/httpd/conf/httpd.conf y bajamos hasta la línea que reza
    #ServerName www.example.com:80

    y la reemplazamos por

    ServerName mercurio:80

NOTA: recuerden que yo utilicé mercurio.mercurio, si usaron otro, utilicen el que pusieron. También que en el primer caso se usa el nombre del equipo y el dominio, en el segundo sólo el nombre de dominio.

En ambos casos, guardamos antes de continuar… (Ya descarto a esta altura que saben hacerlo tanto si utilizan vi o nano)

Reiniciamos el servicio de Apache:

# service httpd restart
Parando httpd: [ OK ]
Iniciando httpd: [ OK ]

Ya no hay más errores… Ni advertencias…

Habilitando el firewall (iptables) de CentOS y reenvío de puertos  de Anfitrión a Invitado (otra vez)

Si en el navegador del anfitrión (recuerden, Ubuntu es nuestro anfitrión) apuntamos a http://localhost, lo más probable es que quien responda sea el Apache de Ubuntu y no de CentOS. O un mensaje de rechazo de conexión, o que no pudo conectarse al servidor, o el resultado de una búsqueda de Google…

Primero le indicaremos a CentOS que acepte las conexiones en el puerto 80. Hay varios modos de hacer esto… Opté por la más sencilla y rápida: editaremos el archivo /etc/sysconfig/iptables, LUEGO de la línea que hace referencia al puerto 22 ( –dport 22) agregamos la siguiente

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Guardamos, y reiniciamos el servicio de iptables:

service iptables restart

¿Recuerdan cómo agregar una redirección de puertos en VirtualBox?

Ahora agregamos otra regla, como la del gráfico:

Le decimos a VirtualBox que, cuando en el Anfitrión preguntemos por el puerto 28080, redirija el mismo al puerto 80 del Invitado, entonces Ubuntu solicitará por aquel puerto el contenido http a CentOS por éste… (No cambié el nombre de esta otra Regla, podría ser HTTP)…

Ahora, en el navegador del Anfitrión, escribimos http://localhost:28080 y deberíamos ver la página de bienvenida por defecto de Apache:

VM_http

Instalando MySQL

Vamos por MySQL… (falta poco para terminar esta etapa)…

# yum --enablerepo=remi install mysql mysql-server
# service mysqld start
# /usr/bin/mysql_secure_installation

Atención ahora: nos hará unas preguntas y responderemos de este modo

  • Enter current password for root (enter for none):
    respondemos con “enter”, porque no tiene ninguna aún…
  • Change the root password? [Y/n]
    Respondemos Y, porque vamos a proveer una…New password: [ponemos una que recordemos]
    Re-enter new password: [la repetimos]
  • Remove anonymous users? [Y/n]
    respondemos Y, porque queremos que nuestro MySQL esté más seguro (y es una buena práctica)…
  • Disallow root login remotely? [Y/n]
    Respondemos Y, porque se supone que root no debe tener acceso externo y cada base de datos debe tener su usuario que, eventualmente, si la accederá desde “afuera”…
    NOTA: Cuando accedamos vía phpMyAdmin es probable que “dudemos” si fue efectivo este paso. Lo que se evita es que se acceda al MySQL por el puerto 3306, pero no impide que los scripts, como PHP, accedan a él (lo hacen de modo interno). Dicho de otro modo: al servidor HTTP (Apache) accedemos, éste interpreta los script PHP, éste se comunica con MySQL y podemos utilizar phpMyAdmin.
  • Remove test database and access to it? [Y/n]
    Respondemos Y, porque es un “ataque” básico intentar acceder a la base de datos de prueba que tiene MySQL y luego aprovechar algún “exploit”…
  • Reload privilege tables now? [Y/n]
    Respondemos Y, porque hemos cambiado la clave de root, removido usuarios y hacer los cambios efectivos de inmediato…

Y eso es todo…

Ahora, indicamos que MySQL arranque en el inicio

# chkconfig mysqld on

Instalando phpMyAdmin (un último esfuerzo)

Esta parte será la que cierre este artículo, dando un previo desenlace a la serie…

# yum --enablerepo=remi,remi-php55 install phpmyadmin

Luego de confirmar, phpMyAdmin estará instalado pero aún no estará disponible para ser utilizado… Empecemos:

Editamos el archivo /etc/httpd/conf.d/phpMyAdmin.conf y la parte que dice:

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
 AddDefaultCharset UTF-8

 <IfModule mod_authz_core.c>
 # Apache 2.4
 Require local
 </IfModule>
 <IfModule !mod_authz_core.c>
 # Apache 2.2
 Order Deny,Allow
 Deny from All
 Allow from 127.0.0.1
 Allow from ::1
 </IfModule>
</Directory>

La dejamos así:

Alias /pma /usr/share/phpMyAdmin

#<Directory /usr/share/phpMyAdmin/>
# AddDefaultCharset UTF-8
# <IfModule mod_authz_core.c>
#  Apache 2.4
# Require local
# </IfModule>
# <IfModule !mod_authz_core.c>
#  Apache 2.2
# Order Deny,Allow
# Deny from All
# Allow from 127.0.0.1
# Allow from ::1
# </IfModule>
#</Directory>

Guardamos… Y explico:

  • Le indicamos a Apache que cuando usemos http://localhost:22080/pma vaya a buscar el script a la dirección /usr/share/phpMyAdmin (donde lo instalamos)… “pma” es xq no me gusta escribir mucho, pueden utilizar como “alias” la cadena que les plazca…
  • El resto es para evitar que sólo sea accedido desde la dirección de localhost, y ponerla al alcance de cualquier IP, dado que sólo será accedido desde el Anfitrión, éste dará a conocer su IP interna que no es ni 127.0.0.1 (IPv4) ni ::1 (IPv6)

Reiniciamos Apache:

# service httpd restart

Y desde el navegador del anfitrión, vamos a http://localhost:22080/pma

El usuario es root y la contraseña que pusimos antes, cuando ejecutamos mysql_secure_installation

Hay 2 “advertencias” que nos indican que phpMyAdmin tiene una actualización y que el almacenamiento no está completamente configurado…

Es un buen momento para guardar el estado de nuestra máquina (pongamos un nombre como “CentOS con AMP completo”) y dejar el resto para el paso siguiente…

Continuamos con…

  • Últimos retoques: creando un nexo entre Anfitrión e Invitado y asegurando el ingreso: phpMyAdmin: liberando su poder, Actualizando phpMyAdmin (porqué no), Compartir carpetas entre el Anfitrión y el Invitado, crear un usuario y hacerlo sudoer, asegurar (deshabilitar) la cuenta root, y resguardo del estado (por si acaso)
  • Mejorando la interconexión y transporte de la Virtual Box: Conexiones de red en Virtual Box , Habilitar una segunda red, Configurando la seguna interfaz en Centos (Y a mano), Accediendo por el nombre de “host”, Guardar estado, Transportar la Virtual Box
  • Ejemplos de uso del servidor de pruebas: conectar otra máquina virtual al CentOS, armando una red, restaurar una DB de desarrollo, Activar un sitio de prueba, utilizando las carpetas compartidas, Otras actividades propuestas (Conclusión)
Esta entrada fue publicada en Instalar linux, Linux, Maquinas Virtuales y etiquetada , . Guarda el enlace permanente.

Una respuesta a Creando un servidor de pruebas (recargado) [4/7]

  1. Pingback: Creando un servidor de pruebas (recargado) [2/7]Recursos para formacion

Deja un comentario