CentOS 7

17 marzo 2015
Josep Ma Solanes 0

El tiempo pasa y las distribuciones de Linux también se tienen que actualizar. En un primer momento había pensado en modificar la entrada de CentOS 6.5 con las novedades de la nueva versión. Pero al final, he preferido mantener las dos versiones, ya sea por comparativa y/o material de consulta.

Lo que encontraréis en esta entrada es una guía paso a paso para el despliegue mínimo de un servidor basado en CentOS 7. No se trata de cargar el servidor de tantas aplicaciones como sea posible, sino más bien lo contrario, reducir la superficie de ataque al mínimo. Este despliegue de CentOS servirá de base para la construcción de nuevos proyectos, ya sean Web, base de datos, monitorización, etc…

El formato sale un poco del guión habitual, dando por sabido qué hacen ciertos parámetros de configuración a nivel de concepto.

El objetivo final es disponer de un servidor que ofrezca los servicios:

Vaya, que tendremos lo que algunos llaman un LAMP a nuestra medida.

 

Instalación de CentOS 7

Para su despliegue se utiliza una máquina virtual sobre Microsoft Hyper-V. Aunque los laboratorions se montan sobre la 2a generación de hardware, es más adecuado hacerlo sobre la 1a generación, para evitar los problemas de arranque seguro. La máquina virtual está configurada con un procesador, 2 GB de memoria RAM y un disco duro de 20 GB.

La imagen ISO para la instalación os la podéis descargar del sitio web de CentOS http://www.centos.org. Os recomiendo la versión de DVD. Antes de encender la máquina virtual, asegurar que dispone de una unidad de DVD con la imagen ISO cargada y, que este, es el primer dispositivo de arranque.

Al arrancar mediante el DVD realiza las primeras comprobaciones y carga los binarios necesarios para la aplicación de instalación.

CentOS-7-01

Primera pantalla de bienvenida de CentOS. Seleccionar el idioma del proceso de instalación. Personalmente lo dejo en inglés para evitar problemas de traducción. Hacer clic en el botón Continuar.

CentOS-7-02

Pantalla de selección de opciones de instalación. Aunque el sistema operativo se instale en inglés, no deja de poder aplicar la configuración regional y cargar otros idiomas. Es en este punto que hacemos la selección del idioma español como idioma secundario del sistema y principal para el teclado.

CentOS-7-03

Empecemos por el final, hacer clic en Network & Hostname. Que nos permitirá identificar la máquina, asignar una configuración IP a la tarjeta de red y quizás lo más importante, activarla para tener conexión al exterior. Hacer clic en el botón Configure para personalizar la tarjeta de red.

CentOS-7-11

Hacer clic en la pestaña IPv4 settings. En el parámetro method, indicar Manual. Hacer clic en el botón Add para añadir una nueva dirección IP, subred y puerta de enlace en la tarjeta de red. En el apartado DNS indicar el/los servidor/es correspondiente/s, así como en el apartado search domains, indicar el nombre del dominio de búsqueda.

En la pestaña IPv6 settings, si no se utiliza, se aconseja seleccionar ignorar la configuración IPv6 para evitar problemas de seguridad.

Hacer clic en el botón Save para guardar las modificaciones realizadas.

CentOS-7-12

Habilitar la tarjeta de red con el conmutador ON-OFF. En el apartado del hostname, especificar el nombre que debe tener el equipo incluyendo el dominio. Hacer clic en el botón Done situado en la parte superior izquierda para aceptar los cambios y volver a la página principal.

CentOS-7-11

Hacer clic en la opción Date & Time. Indicar la región y ciudad para la configuración horaria del sistema. En la parte superior derecha, se permite realizar una configuación automática. Esta configuración no la deja activar si no tenemos conexión a la red. Hacer clic en el botón Done.

CentOS-7-04

Hacer clic en la opción Keyboard para añadir, si lo necesitamos, la distribución de teclado que corresponda. Hacer clic en el botón + para añadir los nuevos lenguajes. Por ejemplo Spanish; Castilian.

CentOS-7-06

Los botones de flecha arriba y flecha abajo permiten establecer el teclado por defecto. Hacer clic en el botón Done.

CentOS-7-07

Hacer clic en la opción Language Support para añadir idiomas adicionales al sistema, marcando los idiomas adicionales. Por ejemplo Español (Spanish). Cuando tengamos todos los necesarios seleccionados, hacer clic en el botón Done.

CentOS-7-08

Hacer clic en la opción Software Selection para seleccionar los paquetes a instalar en el proceso de instalación. La idea es hacer una instalación limpia y mínima para un servidor. Por lo tanto, seleccionar la opción Minimal Install y hacer clic en el botón Done.

CentOS-7-09

Hacer clic en la opción Installation Destination para indicar en que disco duro y que particiones debe tener para hacer la instalación del CentOS. De momento ya está bien utilizar las particiones automáticas que propone, en todo caso, si lo consideráis, podéis modificarlas según las necesidades personales. Hacer clic en el botón Done.

CentOS-7-10

Todo preparado para hacer la instalación, hacer clic en el botón Begin installation para continuar.

CentOS-7-13

Durante el proceso de instalación se nos permite establecer la contraseña en el usuario root y crear nuevos usuarios. Hacer clic en Root Password para establecer la contraseña de root. Dejemos la creación de nuevos usuarios para más adelante desde la consola del CentOs.

CentOS-7-14

Si la contraseña es corta y no cumple las normativas mínimas de seguridad nos advertirá y tendremos que hacer clic dos veces en el botón Done para aceptarla.

CentOS-7-15

Una vez terminada la instalación, hacer clic en el botón Reboot para reiniciar ya desde el disco duro. Acordáos de sacar/desmontar el DVD y que el equipo / máquina virtual arranque desde el disco duro.

CentOS-7-17

 

Primeros pasos con el CentOS

Una vez iniciado el sistema operativo se queda en el prompt solicitando un usuario para acceder al sistema. Iniciar la sesión con el usuario root y la contraseña que se ha definido en el proceso de instalación.

CentOS-7-18

Como todo buen sistema operativo, lo primero que toca es la actualización a la fecha con el comando:

yum -y upgrade

Tampoco utilizaremos el usuario root para trabajar con normalidad, por eso se crea un usuario de trabajo diario: el operador. Para crearlo y asignarle una contraseña se utilizan los comandos:

adduser operador
passwd operador

En el segundo comando tendremos que indicar dos veces la contraseña para verificarla. Para que el usuario pueda iniciar sesión y elevar privilegios, lo añadimos al grupo de seguridad wheel:

usermod -G wheel operador

Llegamos a un tema delicado, el cortafuegos. Personalmente estoy más acostumbrado a utilizar IPTABLES que la nueva implementación de CentOS con FIREWALLD. Por lo que prefiero deshabilitar esta nueva implementación y arrancar los servicios IPTABLES de toda la vida. Los comandos para hacerlo son:

systemctl stop firewalld
systemctl mask firewalld

Se deben instalar los servicios de IPTABLES:

yum -y install iptables-services

Y habilitarlos al sistema como servicio:

systemctl enable iptables
systemctl restart iptables

Otro cambio que encontramos es el desuso de ifconfig a favor de ip addr. Ahora para ver la configuración IP de las tarjetas de red utilizamos el comando:

ip addr sh

Mi otro amigo, el SELinux. Quizás dejo de ser tan drástico de desactivarlo completamente, pero si lo dejo en mode permissive para evitar bloqueos de las aplicaciones. Recordar que para hacerlo, hay que editar el archivo /etc/selinux/config.

vi /etc/selinux/config

Modificar el parámetro SELINUX=enforcing por SELINUX=permissive:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

 

Desplegando el servicio web Apache en CentOS

Este apartado no varía demasiado respecto el artículo de CentOS 6 que podéis repasar con más detenimiento. A grandes rasgos:

Para la instalación del servicio:

yum -y install httpd php php-mysql php-gd php-pear php-pgsql

Copia de seguridad del archivo de configuración de Apache:

cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.original

Crear un archivo para definir los múltiples sitios web:

vi /etc/httpd/conf.d/vhosts.conf

Añadir al principio del archivo los parámetros para informar que se alojan múltiples dominios:

NameVirtualHost *:80
ServerName localhost

Creación de los directorios/sitios web virtuales. Especial atención en los parámetros de acceso de Directory, cambian con la nueva versión de Apache. En las nuevas versiones hay que eliminar (o comentar) los antiguos parámetros: order allow, deny y allow from all, sustituyéndolos por el require all granted:

<VirtualHost *:80>
   ServerAdmin     webmaster@localdomain
   ServerName      localhost
   ServerAlias     www.llocweb1.com
   DocumentRoot    /srv/www/llocweb1/public_html
   ErrorLog        /srv/www/llocweb1/logs/error.log
   CustomLog       /srv/www/llocweb1/logs/access.log combined
   <Directory /srv/www/llocweb1/public_html>
      AllowOverride   All
      #Order          allow,deny
      #Allow from all
      Require all granted
   </Directory>
</VirtualHost>
<VirtualHost *:80>
   ServerAdmin     webmaster@localdomain
   ServerName      localhost
   ServerAlias     www.llocweb2.com
   DocumentRoot    /srv/www/llocweb2/public_html
   ErrorLog        /srv/www/llocweb2/logs/error.log
   CustomLog       /srv/www/llocweb2/logs/access.log combined
   <Directory /srv/www/llocweb2/public_html>
      AllowOverride   All
      #Order          allow,deny
      #Allow from all
      Require all granted
   </Directory>
</VirtualHost>

Creación de los directorios para alojar los diferentes sitios web:

mkdir -p /srv/www/llocweb1/public_html
mkdir /srv/www/llocweb1/logs
mkdir-p /srv/www/llocweb2/public_html
mkdir /srv/www/llocweb2/logs

Creación de un grupo de seguridad webmasters para establecer los permisos adecuados a los sitios web, añadir el usuario operador y apache dentro del grupo:

groupadd webmasters
usermod -a -G webmasters operador
usermod -a -G webmasters apache

Asignación de permisos en la estructura de archivos: propietario root o operador, grupos: webmasters:

chown root:webmasters /srv/www -R

Asignación de permisos de lectura y escritura y ejecución al propietario y grupo, y lectura y ejecución al resto:

chmod 775 /srv/www -R

Asegurar el archivo de hosts que se resuelven correctamente los dominios virtuales creados:

vi /etc/hosts

Añadir si es necesario:

127.0.0.1   www.llocweb1.com
127.0.0.1   www.llocweb2.com

Comprobación de la configuración del servidor web:

httpd -S

Habilitar el inicio automático del servicio web y inicio del mismo:

systemctl enable httpd.service
systemctl restart httpd.service

Configuración del cortafuegos IPTABLES para permitir el acceso por el puerto TCP 80 (http):

vi /etc/sysconfig/iptables

Añadir la línea:

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

Reiniciar el servicio de IPTABLES para aplicar las modificaciones:

systemctl restart iptables

Ya se puede probar la comunicación con los dos sitios web, también comprobar que el PHP funciona correctamente. Se puede crear un archivo de pruebas: index.html a copiar en la raíz de los dos sitios web:

<html>
   <head>
      <title>Sitio Web 1</title>
   </head>
   <body>
      <h1>Sitio Web 1</h1>
      <p>Configuración PHP:</p>
      <p>
         <?php
            phpinfo();
         ?>
      </p>
   </body>
</html>

 

Desplegando el servicio MariaDB

MariaDB es el sustituto de MySQL en esta versión de CentOS. Está basado en MySQL, por lo que no se diferencia demasiado. El proceso de instalación viene a ser el mismo:

yum -y install mariadb-server mariadb

Se habilita el servicio MariaDB para arrancar al iniciar el equipo y se inicia el servicio para poderlo terminar de configurar:

systemctl enable mariadb.service
systemctl start mariadb.service

Aplicar el script de configuración de la base de datos

/usr/bin/./mysql_secure_installation

El asistente nos hace cuatro preguntas para aplicar alguna que otra política de seguridad:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Ya se puede probar la conexión a la base de datos:

mysql -u root -p

Ejecutar una consulta para ver las bases de datos del servidor:

show databases;

Recordar que para poder conectar a las bases de datos desde fuera del servidor hay que abrir el puerto en el cortafuegos del CentOS:

vi /etc/sysconfig/iptables

Añadir la línea

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

Reiniciar el servicio de IPTABLES para aplicar las modificaciones:

systemctl restart iptables

Finalmente, la combinación perfecta para poder gestionar las bases desde un entorno web amigable: el phpMyAdmin. Simplemente descargar de la web oficial y descomprimir dentro de un directorio del servidor Web. Sí, sirve el directorio por defecto: /var/www/html. siempre que esté operativo el servicio Web.

Para que funcione el aplicativo hay que instalar estos dos módulos:

yum -y install php-mysqli php-mbstring

Reiniciar el servicio de Apache:

systemctl restart httpd.service

Intentar acceder con el navegador:

 

Servicio de SFTP

Tenemos el servidor desplegado, pero ¿como le cargamos y descargamos archivos? Una de las alternativas es el servicio FTP que además, cifraremos la comunicación para poderle dar un plus de seguridad. Para ofrecer el servicio haremos servir el VSFTP.

yum -y install vsftpd

Copia de seguridad del archivo de configuración original:

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.original

Editar el archivo de configuración del servicio vsftpd:

vi /etc/vsftpd/vsftpd.conf

Cambiar los siguientes parámetros para no permitir el acceso anónimo:

anonymoys_enable=NO
chroot_local_user=YES
local_umask=002
allow_writeable_chroot=YES

Y añadir al final del archivo los nuevos parámetros para cifrar la comunicación:

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

Y para aceptar las comunicaciones FTP en modo pasivo:

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100

Creación del certificado en la parte servidor. En el archivo de configuración ya le hemos indicado donde ir a buscar este certificado, pero aún no tenemos creado ni el directorio ni el certificado:

mkdir -p /etc/ssl/private

Crear el certificado que se asigna al servicio de FTP:

openssl req -x509 -nodes -days 365 -newkey 2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Introducir los datos personales que pide el asistente para crear el certificado: País, provincia, nombre, etc…

Para los que tengáis el SELinux habilitado, hay que permitir el acceso de los usuarios a sus carpetas personales. Ejecutar:

setsebool -P ftp_home_dir on

Habilitar el cortafuegos para permitir el acceso desde la red:

vi /etc/sysconfig/iptables

Añadir la línea:

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

Reiniciar el servicio de IPTABLES para aplicar las modificaciones:

systemctl restart iptables

Establecer que el servicio de FTP arranque automáticamente cada vez que se inicie el sistema y iniciarlo:

systemctl enable vsftpd.service
systemctl restart vsftpd.service

Ya se pueden crear los usuarios de sistema, sin acceso para iniciar sesión de consola:

useradd -m ftpuser1 -s /sbin/nologin
passwd ftpuser1

En el caso de los servicios Web, podría interesar disponer de un enlace en la ubicación del servidor virtual en la carpeta personal del usuario de FTP. En este caso lo crearíamos con la siguiente instrucción:

ln -s /srv/www/llocweb1/ /home/ftpuser1/www

 

Servidor SAMBA o CIFS

La otra alternativa para acceder al sistema de archivos del servidor, en caso que lo tengamos localmente, es el servicio de SAMBA. Que permite acceder al equipo por la red como si de un equipo Windows o Apple se tratara. La ventaja de desplegar este servicio localmente es poder editar según qué archivos de configuración directamente sin necesidad de cargar y descargar por el servicio de FTP.

Para instalarlo:

yum -y install samba samba-client

Copia de seguridad del archivo original de configuración:

cp /etc/samba/smb.conf /etc/samba/smb.conf.original

Modificación del archivo de configuración para «compartir» directorios adicionales, por ejemplo, el que contiene los diferentes sitios web:

vi /etc/samba/smb.conf

Añadir al final del archivo el nuevo directorio compartido (Webs) en el que permite el acceso al grupo webmasters y que enmascara los permisos a lectura, escritura y ejecución por el propietario y el grupo y permisos de lectura para el resto:

[webs]
        comment = Servidor Web Linux de desarrollo
        path = /srv/www
        browseable = yes
        guest ok = no
        writable = yes
        admin users = operador
        valid users = +webmasters
        ;force user = root --> Este parámetro no funciona con las nuevas versiones.
        force group = webmasters
        create mask = 0774
        directory mode = 0775
        force create mode = 0775
        force directory mode = 0775

Cargar el módulo de CIFS al sistema operativo CentOS:

modprobe cifs

Configurar el servicio para que arranque automáticamente al iniciar el sistema operativo y lo arrancamos por primera vez:

systemctl enable smb.service
systemctl restart smb.service

Habilitar el cortafuegos para permitir el acceso desde la red:

vi /etc/sysconfig/iptables

Añadir las líneas:

-A INPUT -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT

Reiniciar el servicio de IPTABLES para aplicar las modificaciones:

systemctl restart iptables

Habilitar los usuarios de Linux  en el SAMBA y asignar las contraseñas, por ejemplo, con el usuario operador:

smbpasswd -a operador

Ya se puede probar la conexión desde un equipo de la red al servidor Linux. Pedirá un nombre de usuario y contraseña, recordar que debe de estar enlazado con el servicio SAMBA, no sirve tenerlo creado únicamente en el sistema Linux.

 

¿Te ha gustado el artículo? Lo puedes compartir en las redes sociales. También puedes dejar tu opinión, comentario o sugerencia. ¡Gracias!

Similar Posts by The Author: