Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Installazione e sicurezza interna

File e directory utilizzate da MySQL: come verificare che l'installazione del database sia sicura
File e directory utilizzate da MySQL: come verificare che l'installazione del database sia sicura
Link copiato negli appunti

Segue una lista di file e directory utilizzati da MySQL d'interesse per i nostri fini. La trattazione riguarda specificatamente la distribuzione Linux Debian/Ubuntu, anche se i concetti si estendono evidentemente ad ogni sistema operativo (*nix e non) utilizzato.

File di configurazione

Posizione predefinita: /etc/mysql/my.cnf ed /etc/mysql/debian.cnf

Il file di configurazione principale (my.cnf) definisce comportamento ed organizzazione del filesystem del DBMS. Deve poter esser letto da tutti ma modificato solo da root; concordemente con questa logica, Debian definisce per my.cnf i seguenti permessi: nel caso siano stati modificati, si consiglia di riportarli in tale stato.

-rw-r--r-- [644] root root 

Debian.cnf contiene username e password usati per l'utente amministrativo Debian debian-sys-maint. I suoi permessi devono rimanere come da default:

-rw------- [600] root root

Impersonificazione mysqld

L'utente di default con cui gira mysqld è mysql (gruppo mysql). Questo è un utente non privilegiato, senza possibilità di utilizzo della shell (la sua shell predefinita è /bin/false) e la sua directory home è /var/lib/mysql. Infatti:

ps aux | grep mysql
root     /bin/sh /usr/bin/mysqld_safe
mysql    /usr/sbin/mysqld -basedir=/usr [...] 

Il processo padre, di proprietà di root, lancia all'avvio il server mysqld (attraverso lo script mysqld_safe) di cui appunto è proprietario mysql.

Directory dei dati

Posizione predefinita: /var/lib/mysql/

Directory (database) e file al loro interno (tabelle) devono esser di proprietà dell'utente mysql ed accessibili solo da questi; per ogni nuovo database creato dobbiamo assicurarci che la directory del database e tutti i file interni siano di proprietà di mysql:

chown -R mysql.mysql database/

tutti i file interni devono esser leggibili e scrivibili solo da mysql:

chmod -R 600 database/

la directory dev'esser però anche apribile (eseguibile) da mysql:

chmod 700 database

riavviare infine MySQL (che legge i permessi sulle directory solo al suo avvio):

/etc/init.d/mysql restart

Cartella del server e file "vitali"

L'eseguibile del server è posizionato in:

whereis mysqld
mysqld: /usr/sbin/mysqld 

ed ha permessi:

ls /usr/sbin/mysqld
-rwxr-xr-x [755] root root

Impostazioni paranoiche prevedono di evitare a chiunque (tranne a mysql) di eseguire il server ed in special modo lo script mysqld_safe; principalmente però è d'importanza che esso non sia modificabile in scrittura da tutti. Il motivo? Poniamo venisse modificato da un aggressore: date un'occhiata all'utente con cui gira (!).

Il Pid file (memorizza l'id del processo del programma server) ed il file di socket hanno posizione predefinita nella directory /var/run/mysqld/. Il file di socket è un file "particolare" e non può esser eliminato facilmente; per mysqld.pid invece dobbiamo avere riguardi: evitare la modifica dei permessi rispetto a come riportato. Nel caso un file mancasse, riavviare MySQL (e fare un controllo sulla firma dell'eseguibile).

File di log ed errori

Tutti i file di log (in /var/logs/) devono essere ad accesso esclusivo per l'utente mysql (e root).

È buona norma abilitare, inoltre, il logging delle query lente, ovvero che impiegano "troppo" per esser eseguite: può aiutare ad evitare DoS del server voluto o accidentale (diciamo che non è "elegante" che un programma Web mal fatto crei un "auto-DoS" del server su cui gira) ed il log binario (log_bin) di cui si parlerà più avanti (conterrà ogni istruzione SQL impartita al server).

Ti consigliamo anche