UF3. Assegurament de la informació

A02. Amenaces a la seguretat

Fes una cerca d’accidents relacionats amb la filtració de dades o degradació en el servei degut a incidències a servidors.

2.1. Accidentals

  • Caiguda de Whatsapp 2017 1

    Durant el desenvolupament de noves funcionalitats, l’aplicació va deixar de funcionar durant unes hores fins que es va restablir el servei.

  • Mal funcionament d’un servidor d’Amazon provoca fallades a tot Internet 2

    Degut a canvis en configuracions de servidors DNS arrel.

2.2. Intencionades

  • Cross-site scripting en Wordpress 3

    Permet executar scripts d’altres webs des de l’editor de WordPress. En principi s’ha mitigat a partir de la versió 4.8.1.

  • Un home perd tots els seus estalvis al comprar una cartera freda alterada per un tercer 4

    Va perdre tots els diners al confiar l’emmagatzematge dels seus bitcoins estalviats en una cartera freda que va adquirir per eBay.

A03. Polítiques de seguretat a nivell d’usuari

3.1. Pràctica registre d’activitat d’un usuari

  1. Modificar la configuració del servidor MySQL per a que quedi reflectida tota l’activitat dels usuaris en forma de logs

    • Log general: afegirem el següent contingut a l’arxiu de configuració de MariaDB:

    [mysqld]
    #General log
    general-log
    general-log-file=/var/log/mariadb/general.log
    
    • Consultes lentes: Segons la documentació de MariaDB 5, podem activar els logs de slow queries afegint el següent contingut a l’arxiu /etc/my.cnf.d/server.cnf:

    [mysqld]
    #Slow Query log
    log-slow-queries
    slow_query_log = 1
    long_query_time = 2
    slow_query_log_file = /var/log/mariadb/slow.log
    log-queries-not-using-indexes
    

    D’aquesta manera activem els logs per a consultes lentes, definint un llindar de 2 segons a partir del qual una consulta es considera lenta, i definim una ruta per a desar els registres referents a consultes que tinguin aquesta casuística.

    • Log binari: Per a activar el log binari, afegirem el següent paràmetre a l’arxiu de configuració

    [mysqld]
    #Binary log
    log_bin=/var/log/mariadb/binary.log
    
    • Error log: el log d’errors ve activat per defecte i es desa a /var/log/mariadb/mariadb.log

A04. Còpies de seguretat i restauració

N/A

A05. Accés remot i migració

N/A

A06. Examen M02 UF3

  • La connexió a la màquina CentOS la faré a través de SSH, utilitzant el Yakuake. Si no es veu la resta de pantalla, és perquè utilitzo el Yakuake en mode de pantalla completa; no pas perquè modifiqui les imatges.

  • La màquina instal·lada es troba a l’adreça 192.168.56.254, de manera que les connexions remotes es faran a través d’aquesta IP.

6.1. Exercici 1

Crea un sistema de còpies de seguretat per tal que no es perdi cap dada en cas de fallida del sistema. Indica tots els passos que has fet.

  1. Còpia de seguretat

    Primer de tot instal·laré un servidor de bases de dades MariaDB amb

    yum install mariadb-server -y
    

    image0

    Una vegada instal·lat, activarem l’arrencada del servei amb systemctl enable mariadb i l’engegarem manualment amb systemctl start mariadb

    image1

    Llavors posarem a punt el SGBD amb l’script de configuració inicial mysql_secure_installation

    image2

    Finalment, haurem d’obrir el port del Firewall i permetre al SELinux d’accedir al SGBD, de manera que poguem connectar remotament al servidor des d’altres dispositius de xarxa (clients). En el meu cas, per simplicitat, desactivaré directament tant el firewall com el SELinux. Tot i que en un entorn real, en producció, seria millor obrir el port 3306 i aplicar la política corresponent al SELinux. Les comandes per desactivar el firewall i desactivar el SELinux són les següents:

    systemctl stop firewalld     #Paro el servei de tallafoc
    systemctl disable firewalld  #El deshabilito perquè no s'activi al fer ''reboot'' del servidor
    setenforce 0                 #Desactivo el SELinux de manera temporal fins al pròxim reinici
    

    Per desactivar el SELinux de manera persistent entre reinicis, hem d’editar el seu fitxer de configuració /etc/selinux/config amb qualsevol editor de text. On trobem el paràmetre SELINUX=enforcing ho substituirem per SELINUX=disabled

    image3

    Amb això queda a punt el servidor per a poder començar a treballar amb bases de dades.

    Per a poder muntar un sistema de còpies de seguretat robust, haurem d’activar els anomenats logs binaris de MariaDB. Aquests logs són els que s’aniran omplint a mida que es fan canvis a les bases de dades del sistema, entre comandes de còpia de seguretat completa. De manera que, per a poder restaurar el sistema en un punt de temps donat, necessitarem l’última còpia completa (executada amb mysqldump) conjuntament amb els arxius de logs binaris fins al moment de la fallada. Per a activar els logs binaris, modificarem l’arxiu de configuració de MariaDB /etc/my.cnf.d/server.cnf i afegirem, sota la secció [mysqld]

    [mysqld]
    #Binary log
    log_bin=/var/log/mariadb/binary.log
    

    Prendrem nota de la ruta on definim els logs per a desar-se: /var/log/mariadb/binary.log ja que la necessitarem per a poder crear un script d’automatització de backups.

    image4

    Una vegada desats els canvis, reiniciarem el servei de mariadb amb systemctl restart mariadb per tal que recarregui la nova configuració.

    Arxius relacionats amb els logs binaris que s’aniran omplint

    Arxius relacionats amb els logs binaris que s’aniran omplint

    A partir d’ara, els canvis que fem a les BBDD quedaran reflectits en arxius del tipus /var/log/mariadb/binary.xxxxxx on xxxxxx correspondrà a l’índex d’aquell arxiu de logs i tindrem un altre arxiu binary.index que desarà solament el nom dels logs binaris vàlids en aquell moment.

    Aleshores, l’script que farà la còpia de seguretat, per exemple, el podem desar com /root/backup-sql.sh el crearé i li posaré el següent contingut:

    #!/bin/bash
    dia=$(date +%Y-%m-%d)
    file=/root/backups/mariadb-backup_$dia.sql
    
    echo "... Creant còpia de seguretat de totes les bases de dades cap a l'arxiu $file ... "
    mysqldump -uroot -pasix --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > $file
    echo "... Backup creat  ..."
    

    Un cop desat, el farem executable amb un chmod +x /root/backup-sql.sh.

    • Hem de tenir en compte que necessitarem crear el directori /root/backups abans d’executar l’script, ja que sinó tindrem un error de directory not found.

    Pel que fa a l’automatització, ho deixarem en mans de cron. Més concretament, anacron ja que simplifica la feina del sysadmin de manera que col·locarem un script (o bé un symlink a aquest) en un directori concret perquè s’executi en la freqüència que nosaltres volguem. En aquesta pràctica, programaré l’script creat anteriorment perquè s’executi una vegada al dia. El que hauré de fer, doncs, sabent que l’script es troba a /root/backup-sql.sh, serà fer un enllaç simbòlic d’aquest script cap al directori on anacron busca pels scripts que s’han d’executar diàriament.

    ln -s /root/backup-sql.sh /etc/cron.daily/backup-mariadb
    
    Creo l’enllaç simbòlic i comprovo que s’ha creat correctament al destí.

    Creo l’enllaç simbòlic i comprovo que s’ha creat correctament al destí.

    A partir d’aquí, ja podrem estar tranquils perquè un cop al dia s’executarà l’script de còpia de seguretat i es desarà una còpia completa de la BBDD al lloc especificat. A més a més, a l’activar els logs binaris, els canvis que es produeixin entre les còpies completes (executat mitjançant l’script) seran desats en el directori de logs de MariaDB de manera que podrem tirar enrere canvis no desitjats o bé restaurar la BBDD en qualsevol moment en un altre SGBD.

  2. Restauració

    Crearem un script /root/restore-sql.sh amb el següent contingut

    #!/bin/bash
    path=$1
    date=$(date +%Y-%m-%d)
    
    if [ $# -ne 0 ]; then
        echo "... Convertint logs binaris a SQL ..."
        mysqlbinlog /var/log/mariadb/binary* >> /var/log/mariadb/binlog_$date.sql
    
        echo "... Tots els arxius binaris s'han transformat a l'arxiu /var/log/mariadb/binlog_$date.sql ..."
    
        echo "... Restaurant còpia de seguretat des de l'arxiu "$path" ..."
        mysql -uroot -pasix < $path
            mysql -uroot -pasix < /var/log/mariadb/binlog_$date.sql
    
        echo "... BBDD restaurada correctament ... "
    
        echo "... Netejant logs binaris antics  ..."
        rm -f /var/log/mariadb/binary.0*
        rm -f /var/log/mariadb/binary.index
    
        echo "... Reiniciant servei MariaDB  ..."
        systemctl restart mariadb
    else
        echo "Falta la ruta des d'on restaurar la còpia!"
    fi
    

    Com podem veure, és un script que requereix un paràmetre per a definir l’arxiu de còpia de seguretat SQL que volem restaurar, per tant, l’haurem de cridar passant-li aquest paràmetre. El que fa aquest script és convertir primer tots els logs binaris que s’han generat des de l’última execució de mysqldump i els converteix a un arxiu de text pla .sql. Aleshores restaura l’arxiu .sql corresponent a la còpia completa (la que s’ha fet amb l’script de l’apartat de backup) i llavors restaura l’arxiu .sql resultant dels arxius binaris transformats. Finalment, és necessari reiniciar el servei de MariaDB perquè es ressetegin els arxius binaris.

6.2. Exercici 2

Amb MySQLWorkbench (des de l’amfitrió), crear un nou usuari amb nom “recuperacio” i password “recuperacio”. Torna a connectar-te amb MySQLWorkbench amb aquest usuari i carrega la teva base de dades de la mediawiki, exporta-la a la màquina virtual. Indica tots els passos que has fet.

Primer crearem un usuari root al MariaDB del servidor per a poder connectar-nos des d’un host remot al que està corrent MariaDB.

MariaDB [mysql]> CREATE USER 'root'@'%' IDENTIFIED BY 'asix';
Query OK, 0 rows affected (0.00 sec)

Li donarem permisos de root

MariaDB [(none)]> GRANT ALL ON *.* to 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

Si mirem la taula d’usuaris del SGBD veurem que ja tenim un usuari root per a poder connectar des de qualsevol host

MariaDB [mysql]> select user, host from user;
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | 127.0.0.1 |
| root | ::1       |
| root | localhost |
| root | template  |
+------+-----------+
5 rows in set (0.00 sec)

Obrirem MySQLWorkbench des de la màquina host i configurarem una nova connexió per a l’usuari root del SGBD de la màquina virtual

Omplirem els camps amb les dades pertinents i provarem la connexió amb el botó *Test Connection*

Omplirem els camps amb les dades pertinents i provarem la connexió amb el botó Test Connection

Com que la connexió és correcta, desarem amb el botó Save i ja podrem accedir amb MySQLWorkbench al servidor CentOS amb la connexió creada. Crearem un nou usuari fent clic a Users and privileges al menú de l’esquerra, i afegirem un compte amb el botó Add account de sota

Posaré les dades com es demana a l’enunciat i faré clic a *Apply*

Posaré les dades com es demana a l’enunciat i faré clic a Apply

Una vegada desat, veurem com apareix el nou usuari a la llista d’usuaris existents al SGBD

image5

Aleshores crearé la BBDD wiki per importar-la i li donaré permisos a l’usuari recuperacio

MariaDB [mysql]> create database wiki;
Query OK, 1 row affected (0.00 sec)
MariaDB [mysql]> GRANT ALL ON wiki.* to 'recuperacio'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

Un cop he creat l’altre usuari recuperacio, desconnectaré de la sessió del root i faré una nova connexió per a l’usuari recuperacio

Faig un testeig abans de desar. *Successful*

Faig un testeig abans de desar. Successful

Ara crearé una connexió nova per a la màquina virtual on tinc corrent la Wiki (192.168.56.2) per tal de fer l’exportació

Testejo la connexió perquè vegis que m’hi connecto correctament

Testejo la connexió perquè vegis que m’hi connecto correctament

Obriré la connexió i, des del menú de l’esquerra→Data export seleccionaré les BBDD que vull exportar (en el meu cas la única que hi ha, la de la wiki) i clicaré al botó Start export de baix a la dreta.

image6

Una vegada exportat, podrem recuperar l’arxiu a la ruta ``/home/guillem/dumps/Dump20180612-1``

Una vegada exportat, podrem recuperar l’arxiu a la ruta /home/guillem/dumps/Dump20180612-1

Per a importar-lo, obriré la connexió que tinc amb el CentOS de l’exercici i, de la mateixa manera, al menú de l’esquerra faré clic a Data import

Posaré la ruta on he exportat la BBDD de la wiki des de la VM i clicaré *Start import*

Posaré la ruta on he exportat la BBDD de la wiki des de la VM i clicaré Start import

Quan acabi la importació tindrem el missatge de Import complete amb les 48 taules importades correctament.

image7

Si miro per consola la BBDD wiki del servidor CentOS de l’exercici, veuré com hi ha les taules creades

image8

Referències

1

http://www.eitb.eus/es/noticias/tecnologia/detalle/4810746/caida-whatsapp-3-mayo-2017/

2

https://www.publimetro.com.mx/mx/tecnologia/2017/02/28/servidor-amazon-provoca-fallas-internet.html

3

https://www.wordfence.com/learn/how-to-prevent-cross-site-scripting-attacks/

4

https://www.criptonoticias.com/sucesos/hombre-pierde-ahorros-vida-comprar-cartera-fria-alterada/

5

https://mariadb.com/kb/en/library/server-monitoring-logs/