Site icon Tosolini.info

Mysqldump: security negli script, come fare.

Recentemente dopo un aggiornamento di un server, mi sono trovato con tutti gli script di backup che avevo creato a suo tempo funzionanti, ma con un avviso (recapitato via mail da root) che mi invitava a non usare la password.

mysqldump: [Warning] Using a password on the command line interface can be insecure.

In effetti nelle vecchie versioni si metteva negli script la username e la password, sebbene con vari giri questa venisse prelevata altrove.

Nelle versioni moderne (dalla 5.6.6 in poi) ci pensa direttamente mySQL medesimo attraverso un tool che si chiama mysql_config_editor , maggiori informazioni alla pagina doc di mySQL.

Questo strumento permette di salvare nel sistema in modo protetto, le informazioni di login che potremo poi utilizzare per mysqldump e mysql. La configurazione è piuttosto semplice:

sudo mysql_config_editor set --login-path=mypath --host=localhost --user=username --password

La parte interessante, e importante, è –login-path. Questa non è propriamente una path di tipo /var/log ma una sorta di identificatore. Generalmente si utilizza –login-path=nomedeldatabase ma possiamo mettere quello che vogliamo. Lo scopo è quello di creare quanti path ci servono per eventuali altri login in modo da separare gli uni dagli altri.

Una volta dato il comando verrà richiesta la password che rimarrà memorizzata in modo sicuro. Ovviamente –host identifica l’host, nella maggioranza dei casi sarà localhost, ma nel caso di un host remoto sarà proprio il nameserver per esteso o il suo indirizzo IP.

Arrivati a questo punto il mysqldump non dovrà più contenere nessuna credenziale, ma solo il richiamo al path, e sarà strutturata in questo modo:

mysqldump --login-path=mypath nomeDelDataBase > /path/dove/metto/i/backup/nomeDelDatabase.sql
# faccio la compressione altrimenti occupa spazio inutilmente
gzip /path/dove/metto/i/backup/nomeDelDatabase.sql

Come si può vedere non ci sono richiami a user e password.

Per visionare tutti i path daremo il comando:

sudo mysql_config_editor print --all
#otterremo come risultato:

[mypath]

user = username
password = *****
host = localhost

Potremo altresì utilizzare lo stesso path per collegarsi direttamente a mySQL senza dover fornire le credenziali:

sudo mysql --login-path=mypath

Chiaramente se l’utente che può effettuare tali comandi viene compromesso, anche l’accesso al db verrà compromesso di conseguenza. Tuttavia è molto più probabile statisticamente che le credenziali vengano carpite da un file in chiaro come era il vecchio sistema.

Exit mobile version