26 enero 2019

Mi primer servidor con Debian

Este articulo explica como instalar un servidor web estático y dinámico con una distribución Debian de la forma más sencilla posible, aunque si es conveniente conocer antes los entornos Linux normales. Se han escrito, además,  tres artículos más como continuación de  este, que son: como instalar mi primera Dokuwiki, como instalar mi primer Joomla y, finalmente, como instalar instalar mi primer Moodle.


En el caso de no conocer Debian, primero es mejor  buscar alguna web donde aprender a instalarlo paso a paso, aquí os proponemos la web de Debian que es muy precisa:

https://debian-handbook.info/browse/es-ES/stable/sect.installation-steps.html

Habitualmente los servidores no llevan entorno gráfico, porqué son administrados por profesionales y porqué el preció es elevado tanto del ordenador como de los discos que son tipo SAS o SSD.
 
En nuestro caso usaremos un entorno gráfico para facilitar el acceso a los servidores de muchas personas buenas conocedoras de la informática sin necesidad de que sean profesionales. Se propone utilizar el entorno gráfico Mate, porque es muy liviano y completo. También se podría utilizar el entorno gráfico xfce.

Condiciones en cuanto al hardware del servidor son las siguientes, aunque es orientativo, ya que  para probar nos sirve cualquiera.

- Utilizar una placa base muy probada, no es necesario utilizar una de última generación. Si que es recomendable utilizar chipset Intel con la tarjeta gráfica y tarjeta de red incorporadas.

- Memoria RAM de 8GB para pruebas, en caso de implementarse deberá revisar esta capacidad de memoria en función de la aplicación del servidor.

- Dos discos duros exactamente iguales para servidores, para un primer servidor utilizar de 1 a 5 TB según la necesidad. Proponemos ver la web de los discos específicos para servidores. Para las primeras pruebas  no seria necesario pero aquí se incorpora porque se considera importante practicar las particiones RAID 
 
https://www.wdc.com/es-es/products/internal-storage/wd-black-desktop.html#WD1003FZEX

Téngase en cuenta que el apartado de los discos es muy importante en un servidor, quizá de los más importantes. El uso de discos mecánicos de mala calidad o inapropiados provoca el fracaso del sistema pues  son el punto débil, ya que siempre están en funcionamiento.

Veamos las disposiciones habituales de los discos duros para servidores. Puede utilizarse una disposición con dos o con tres discos duros.

- Con dos discos duros se monta una configuración llamada RAID 1. Que consiste en poner dos discos duros en paralelo donde los dos tienen la misma información  de forma que si falla una el otro conserva los datos. En el caso que el disco duro se estropee puede sustituirse y es posible reconstruir la información de forma sencilla y sin apenas interrupción del servicio.


- Con tres discos duros dos funcionan en RAID 1 y el tercero está en reserva, de forma que si falla uno el tercero entra en servició sustituyendo el disco averiado de forma sencilla.


Una vez dicho lo anterior si queremos montar nuestro primer servidor, una configuración con dos discos es más que suficiente.

Existen dos formas de montar un RAID 1

- La primea consiste en montar el RAID 1 por software, es decir se monta el RAID cuando se efectúa la partición de los discos en el proceso de instalación.

- La segunda consiste en tener una placa base con la posibilidad de montar y configurar un RAID, es lo que se llama raid por hardware. En este caso debe configurarse la placa base antes de empezar a instalar el sistema, indicando el tipo de RAID que queremos. En el caso de que nuestra placa no tenga RAID también existe la solución sencilla  de poner una tarjeta PCI como la que ponemos al final del articulo para conseguirlo.

A pesar de todo lo dicho anteriormente, si disponéis de un ordenador que no usáis, podéis utilizarlo y probar todo el proceso de instalación hasta que lo dominéis un poco y después ya decidiréis.

Se pude utilizar cualquier la distribución Linux, en nuestro caso se propone una distribución Debian que es, sin duda, la más apropiada de las más utilizadas actualmente. Consideramos que es de las mejores que existen para este uso.

https://www.debian.org/CD/http-ftp/index.es.html

Nos bajamos una ISO Debian Netinstall y la gravamos en CDrom o USB.
Es importante practicar y repetir el proceso de instalación tantas veces como sea necesario hasta que lo veamos claro y lo dominemos.

Siempre tenemos a mano la web de Debian con toda la información necesaria.

http://www.debian.org/releases/stable/i386/index.html.es

Si no hemos instalado nunca una distribución Debian podemos ver el proceso paso a paso en el siguiente video.

https://www.youtube.com/watch?v=loRsavmQTvs

Partición de los discos


Veamos que tipo de partición escogemos. En principio utilizamos dos discos duros iguales en RAID 1 con tres particiones, estos recibirán el nombre de sda y sdb, y las particiones de sda serán: sda1, sda2 y sda3, y las de sdb serán: sdb1, sdb2 y sdb3.

-- sda0 Y sdb0 se partirán con  1 GB aproximadamente y servirá pera la carpeta /boot
-- sda1 y sdb1 se partirán con 8 GB aproximadamente y servirá como para el area de intercambio. El área de intercambio suele cogerse igual a la memoria RAM que tengamos.

-- sda2 y sdb2 se partirán con lo que quede de GB y servirá como /  raíz del sistema.

Cuando tengamos más experiencia veremos que el número de particiones será mucho más preciso y dependerá del uso del servidor. Además de las mencionadas, es necesario tener una con la bases de datos del sistema instalado y otra para los ficheros de la web, etc.

La secuencia a seguir cuando la instalación llega al particionado, esta sería:

1.- Particionado manual
2.- Borrar todas las particiones de los discos si no son nuevos
3.- definir la particiones iguales en cada disco:
 - Una partición en cada disco de 1GB para la partición boot
 - Una partición en cada disco de 8 GB para el área de intercambio
 - Una partición igual en cada disco con el resto del disco
4.- Escoger Raid por software md
5.-  Escoger Raid 1 md y se marcan las particiones iguales con la barra espaciadora:
  - Las dos particiones iguales de 1GB para boot
  - Las dos particiones iguales de 8 GB para el área de intercambio
  - Las dos particiones iguales con el resto del disco para la raíz /
 6.- escribir el disco y confirmar
 

Si no tenéis suficiente, proponemos el siguiente vídeo de Youtube en el que se explica de forma visual del proceso de partición. Resulta ideal tener un portátil al lado del server pera seguir el particionado paso por paso. Como siempre debemos dar la gracias a todas aquellas personas  que cuelgan  su trabajo de forma voluntaria y así podemos aprender fácilmente, lo que de otra forma nos costaría mucho más de resolver.
 

Cuando hayáis acabado con las particiones en RAID 1 os debe mostrar un solo  un disco con más o menos lo siguiente para cada partición:

- 1 GB md0 configurado como /boot
- 8 GB md1 configurado como a área de intercambio
- El  resto de espacio md2 configurado como / raiz

A partir de este momento supondremos instalado un sistema Linux Debian con entorno gráfico Mate y continuaremos con la instalación de un servidor web primero estático y luego dinámico. Podéis ver propuestas en este mismo blog.

Tener en cuenta que el proceso instalación es más lento que en una instalación normal con un solo disco debido a la creación de RAID que va copiando en paralelo sobre dos discos.

Si solo es para probar y ir aprendiendo  podéis saltar todo el paso anterior de la configuración RAID y instalarlo directamente en un solo disco y, más adelente, ya haréis instalararéis un sistema de discos en RAID1.

Instalando el servidor


Para instalar un servidor con páginas web estáticas sin bases de datos, marcamos:

- Mate para el entorno gráfico.
- Web server, que instala el Apache como programa el servidor páginas web.


El web server instalará el programa php7 necesario pera las páginas web tanto estáticas como dinámicas.

Al final de todo el proceso de instalación de Debian nos pedirá si queremos instalar el gestor de arranque. Debe situarse el gestor en el disco sda o primer disco. Aquí hay uno de los problemas del RAID por software, pues el gestor de arranque va en uno de los discos y si  falla este el sistema no arranca; pero esto no es muy grave porque el ordenador se puede arrancar con un CD live y instalar el gestor de arranque en el segundo disco que no lo tiene y el sistema ya arrancará.

Un servidor de páginas web estáticas no tiene interacción con la persona que la está viendo, sólo le permite leer la información. Estas páginas se mantienen por la persona encargada  haciendo los cambios de forma manual con un editor de páginas web.

Si no estamos seguros o no hemos marcado web server en el momento de la instalación, con el fin tener todos los programas necesarios podemos  ejecutar la siguiente orden en un terminal. En ella se ha incorporado el php necesario tanto para las tres propuestas que hacemos, se ejecuta en Terminal:

$ sudo apt install apache2 libapache2-mod-php php php-json php-mbstring php-zip php-gd php-xml php-curl php-mysql php-xmlrpc php-intl php-json php-cli php-imagick php-phpseclib php-php-gettext php-common php-imap php-bz2 php-gmp php-soap

En nuestro ordenador accederemos mediante la URL al servidor apache

- http://localhost


Aparecerá la página de presentación del servidor web apache indicándonos que está funcionando.





Servidor Web estático

Los contenidos web en formato html deberán hacerse con un editor de páginas web y ponerse después en la carpeta adecuada del servidor. Normalmente no se hacen directamente en el servidor y se dispone de otro ordenador preparado para la edición web y se transfieren los ficheros al servidor con un programa denominado ftp (filezilla, por ejemplo). El contenido web debe ir a la siguiente carpeta:

  var/www/html/


Los contenidos html deben pertenecer al grupo www-data y los permisos de los ficheros deben ser 775. Por tanto, una vez cargadas la páginas web por primera vez, debe ejecutarse la siguiente orden:

$ sudo chown -R www-data:www-data /var/www/html/
$ sudo  chmod -R 775 /var/www/html/


Servidor web dinámico

Un servidor web dinámico es aquel que posee bases de datos y tiene usuarios con diferentes permisos sobre los contenidos. Son ejemplos típicos el Joomla y el Moodle.

Las wikis también son dinámicas pero más sencillas de estructura ya que sus bases de datos son simples ficheros de texto. Para instalar una wiki ver el apartado correspondiente de este blog y veréis que es muy sencillo:


Instalar mi primera Dokuwiki 

Continuemos, en la nueva distribución Debian Buster los programas mysql-server y phpmyadmin ya no se encuentran en los repositorios, lo que ara un poco más largo el proceso.

Primero vamos a instalar MariaDB como base de datos en lugar de mysql-server, la cual está basada en MySQL y es totalmente similar. 


$ sudo apt install mariadb-server mariadb-client

Veamos si esta activo el servicio de base de datos MariaDB

$ sudo systemctl status mariadb

Nos va a contestar algo como lo siguiente:




Cambiamos contraseña del usuario root de la base de datos mariaDB para que sea diferente a la del administrador del ordenador y luego contestamos afirmativamente por defecto a las siguientes preguntas que nos hace, pues por defecto pone la misma y no nos parece conveniente. Así evitaremos que el usuario root de bases de datos y el usuario root de sistema tengan la misma contraseña.

$ sudo mysql_secure_installation
 
para entrar en el mariaDB:
 
$ sudo mysql

Para salir:
> exit;



Instalar phpMyAdmin

Actualmente el phpmyadmin ya no esta en los repositorios de Debian, pero consideramos que es un interfase libre que funciona muy bien para personas que quieren administrar bases de datos y no dominan el lenguaje sql. Dado que el objetivo de este artículo es acercar los servidores a personas aficionadas a la informática y que no sean profesionales, consideramos que este programa es imprescindible. Aunque debe vigilarse porque la instalación no es tan sencilla.

Vamos a la web de phpmyadmin y bajamos el fichero correspondiente a todos los lenguajes desde la web:



Para descomprimir el archivo se utiliza la siguiente orden. Si no hemos instalado el programa unzip debe hacerse primero.

$ sudo apt install unzip

$ sudo unzip phpMyAdmin-4.9.0.1-all-languages.zip 

Se mueve de su sitio actual, normalmente en /home/usuario/Descargas, a  la carpeta siguiente cambiando el nombre para simplificar  /usr/share/phpmyadmin con la orden:

$ sudo mv phpMyAdmin-4.9.0.1-all-languages /usr/share/phpmyadmin

Cambiamos los permisos de la carpeta con la orden:

$ sudo chown -Rfv www-data:www-data  /usr/share/phpmyadmin


Vamos a configurar phpmyadmin en el sistema

Entramos en mysql y creamos una base de datos pypmyadmin y un usuario con el nombre mismo nombre de phpmyadmin.

$ sudo mysql -u root

Se crea la base de datos para gestionar phpmyadmin

> CREATE DATABASE phpmyadmin DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 Se crea el usuario phpmyadmin con privilegios y propiedad sobre la bases de datos

> grant all privileges on mydb.* to phpmyadmin@localhost identified by 'Contraseña';

> FLUSH PRIVILEGES;

> EXIT;


Contraseña, debemos poner la contraseña que elijamos.

Debemos Crear la configuración para apache reconozca bien a phpmyadmin. Esta configuración que se propone se ha obtenido de la web de phpmyadmin. Aquí simplemente debemos crear un fichero con su contenido y guardarlo en la dirección indicada. Copiamos el contenido  propuesto en color rojo en el fichero:

$ sudo nano /etc/apache2/conf-available/phpmyadmin.conf





# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    <IfModule mod_php5.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>
        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
    <IfModule mod_php.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>

https://tecn-ara.blogspot.com/p/instalar-dokuwiki-sobre-linux.html        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>
        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
</Directory>
# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>




Se establece la configuración propuesta con la orden:

$ sudo

Si observáis bien veréis que la configuración se exige crear una carpeta tmp en var/lib/phpmyadmin/tmp.

$ sudo mkdir -p /var/lib/phpmyadmin/tmp

Se adecúan sus permisos al sistema

$ sudo chown www-data:www-data /var/lib/phpmyadmin/tmp

Recargamos el apache y ya todo debería funcionar.

$ sudo systemctl reload apache2

Listo ya podemos acceder a phpmyadmin con la el navegador y la URL

http://localhost/phpmyadmin

- usuario: phpmyadmin
- contraseña: la elegida






















 A lo largo del articulo se procura que el usuario administrador de todas las características dinámicas sea el usuario phpmyadmin, este es un detalle importante. En phpmyadmin se debería ver para este usuario los privilegios que se observan en la imagen. para después poder instalar Joomla. Esta claro que el nombre de usuario lo escoge la persona que instala el sistema, pero si que debe vigilarse la racionalidad de la propuesta, motivo por el cual hemos propuesto siempre el mismo usuario.



Joomla o Moodle

En este punto ya tenemos el servidor web dinámico a punto, ahora es necesario decidir que programa queremos instalar.

Los dos típicos de los Institutos de Secundaria serian el Moodle para gestionar los cursos y aulas virtuales, y Joomla para gestionar páginas web dinámicas en las que se podrán escribir los artículos del Centro por diferentes tipos de usuarios.
 
Es importante entender que instalar un servidor y gestionar los servicios web dinámicos son dos cosas totalmente diferentes. En el caso de Moodle el administrador del programa debe tener un nivel alto en administración y tener cursos especializados de administración de Moodle, en el caso de Joomla es un poco más sencillo. Normalmente el administrador del servidor y el administrador del Moodle o Joomla deberían ser dos personas diferentes.

En este punto ya podemos seguir los artículos siguientes en los que se explica como instalar un Joomla y un Moodle:

- Instalar mi primer Joomla

- Instalar mi primer Moodle

En la siguiente imagen podéis observar como ha quedado nuestro primer servidor después de instalar la Dokuwiki, Joomla y Moodle. Observar los programas están situados en la carpeta /var/www/html y el phpmyadmin que permite ver con el navegador las bases de datos y como acceder a ellas. Recordamos la importancia de tener copias de seguridad antes de manipular nada.





IP del Servidor

En nuestro caso ejemplo, y para empezar, supongamos que tenemos una red interna, lo normal es darle una IP de la bajas al servidor, por ejemplo 192.168.0.5.


Entonces el acceso la servidor desde cualquier ordenador de la red será
- http://192.168.0.5


Para acceder desde cualquier ordenador de la misma red a los servidores a través de un Terminal, se utiliza un programa denominado SSH. Para ello es necesario instalar el servicio ssh.

Instalamos el paquete openssh-server



Para hacerlo activo debe irse al fichero de configuración y definir el Puerto por el que se accederá a este servició, normalmente es el 22. Si tenemos cortafuegos también deberá abrirse el puerto 22.

el fichero de configuración ssh_config está   /etc/ssh, accedemos a él:

$ sudo  nano /etc/ssh/ssh_config


Sacamos la almohadilla (#) en donde pone port 22,  podemos dejar este puerto o cambiarlo.



Ctrol+x para guardar y s para confirmar.

Ahora desde cualquier ordenador Linux de la red interna abrir un Terminal, logarse como administrador y escribir la siguiente orden:

$ sudo  ssh   usuario@IP          - num_puerto_ssh

En nuestro caso:


$ sudo  ssh root@192.168.0.5 -p 22


Contraseñas


Una buena política de contraseñas es muy importante en cualquier servidor, estas deben ser diferentes para cada servició y complicadas con números y letras mayúsculas y minúsculas. Ello es debido a que habrá diferentes personas que lo administren, por ejemplo: uno del sistema, otro de la base de datos y otro de la propia web dinámica.

Es conocido por todos que la seguridad de un servidor depende siempre de una buena gestión de contraseñas y de los mecanismos que creemos para evitar que sean conocidas por quienes no deban. La mayoría de ataques que se producen en los servidores son por la mala gestión de sus contraseñas.


Adquisición de dominio y IP Externa


En este artículo no se trata el tema ni de dominio ni de la IP externa, que son los responsables que podamos acceder desde el exterior tanto a los contenidos web como a la administración. Son elementos importantes pero que se consideran el paso posterior a la propuesta descrita. De momento sólo diremos que si deseamos una IP  externa debemos pedirla y pagarla a nuestro proveedor de Internet. Y el dominio o dirección web  también debe comprarse ver las siguientes webs.

 https://www.dominios.es/dominios/
https://www.xataka.com/basics/ip-publica-que-como-se-puede-cambiar

 Cortafuegos

Siempre que se tiene un servidor con acceso exterior es necesario protegerlo mediante un cortafuegos con una configuración muy precisa, para que sólo se pueda acceder a él a través de los puertos necesarios para ver la web y realizar, si es necesario, la administración del sistema.

El más sencillo seria el Gufw y el más completo shorewall.  De entrada solo debemos permitir el acceso al servidor por los puertos 80 y 443 que son los típicos de las webs y el puerto que hayamos definido para el acceso por el túnel de administración vía ssh que seria el 22.

https://maslinux.es/los-10-mejores-programas-de-cortafuegos-de-gnu-linux/



En la distribución Debian shorewall esta en los repositorios de la comunidad, por tanto, su instalación es sencilla (apt install shorewall), pero su configuración requiere una cierta práctica, ya que no es inmediata. En la web de shorewall hay muchos ejemplos que sin duda sirven para que os sea un poco más sencilla su implementación

Raid 1 por Hardware

El raid por hardware siempre es más eficiente, ya que el se encarga de hacer todo el trabajo de control de los discos y en caso de fallo el reconstruirá el sistema cuando se cambie el disco, incluso hay servidores que esta operación pude hacerse sin parar el ordenador, pues el mismo nos informa si tiene un disco que no funciona correctamente, normalmente por un código de luces que tienen los discos.

Cuando ya se tenga experiencia y se desee implementar un sistema solido, deberá obtenerse un ordenador con una serie de premisas que permitan un mantenimiento sólido.

Si el servidor de que se dispone no tiene de tarjeta de raid siempre de puede comprar una por un módico precio.

Un ejemplo sencillo para empezar podría ser una placa pci "SiI3x12A SATA Controller".

Para entrar a configurar  se presiona F4 o la tecla que corresponda en el momento en que se pone en funcionamiento el ordenador y se accede al menú que permite la configuración en RAID 1 o en RAID 0 de los discos.

Una vez configurado el raid, en el momento de instalar Debian sólo nos aparecerá un disco duro ya que la placa se encarga de la gestión de los discos.


De todas formas actualmente el precio de los servidores no es muy alto y pude adquirirse una máquina especializada, en este caso deberemos instalarlo todo nosotros.

También podríamos recomendar un NASH un poco potente, ya que disponen de todos los servicios explicados y muchos más, son ideales para cualquier centro docente o una pequeña empresa, vienen totalmente preparados y tienen entorno gráfico vía web que los hacen muy sencillos de gestionar: son una solución ideal.

Finalmente, una opción más preparada la podéis encontrar


NOTA. siempre es necesario practicar para aprender, suerte a todos y a disfrutar del software libre. En  el caso de los servidores tienen la batalla totalmente ganada por su calidad.