IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Fabien Celaia

Éviter les mots de passe dans vos shell pour l'accès aux bases

Noter ce billet
par , 25/01/2017 à 08h51 (1288 Affichages)
Le danger

Rien de plus dangereux que de laisser traîner un login et son mot de passe (avec, souvent, des droits excessifs) dans un shell ou un batch, pour l'exécution des tâches automatiques sur les bases de données.

Voici quelques méthodes pour éviter de laisser grande ouverte cette backdoor si prisée des hackers en herbe.

Dans la mesure du possible, veillez donc à n'attribuer aux logins de maintenance que les droits stricts et nécessaires à leurs tâches.

Oracle
En étant connecté sur le serveur, avec le login Oracle, on peut créer des scripts en utilisant l'option sysdba.
C'est peu glorieux (car c'est un login éminemment puissant), mais cela a le mérite de ne pas laisser traîner un mot de passe dans les jobs.

Attention dans le shell à bien gérer les \
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
sqlplus / as sysdba << EOF
select instance_name from v\$instance ;
exit
EOF
MS-SQL Server
On peut clairement dédier l’authentification à Windows et accéder à la base via l'option -E de sqlcmd

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sqlcmd  -E -i FichierDeCommande.sql -o FichierDeSortie.out
MySQL
Avant la version 5.6, des méthodes plus ou moins bancales existaient (utilisation de la variable MYSQL_PASS, insertion du mot de passe en clair dans un fichier .my.cnf, etc.)
Dès la version 5.6.10, il existe une méthode plus propre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
mysql_config_editor set --login-path=local --host=localhost --user=MonUtilisateurPourBatch --password
Cet utilitaire crée alors un fichier .mylogin.cnf conteant les mots de passe cryptés.
La connexion se fait via

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 mysql --login-path=local --host=localhost --port=3304 -e 'show databases ;'
NB : attention au bogue 74482 qui n'autorise pas l'utilisation de # dans le mot de passe.

Postgresql
Il suffitd'ajouter au fichier pg_hba.conf une entrée pour accès local sur la base postgres, voire d'y donner accès depuis une adresse bien spécifique, avec cette fois-ci un mot de passe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
--- pg_hba.conf ---
local   postgres   sqlmaintenance     trust
host   postgres   sqlmaintenance 192.168.3.17/32 md5
--- fin pg_hba.conf ---
puis, au niveau de l'instance, d'attribuer les droits stricts et nécessaires à cet utilisateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
create user sqlmaintenance WITH PASSWORD 'sUZdsfw8s0F4' ;
et d'y accéder via psql sur le serveur, sans mot de passe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
psql postgres sqlmaintenance
Type "help" for help.

postgres=> select current_user ;
  current_user
----------------
 sqlmaintenance
(1 row)
ou depuis la machine 192.168.3.17 avec mot de passe

Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog Viadeo Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog Twitter Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog Google Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog Facebook Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog Digg Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog Delicious Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog MySpace Envoyer le billet « Éviter les mots de passe dans vos shell pour l'accès aux bases » dans le blog Yahoo

Mis à jour 17/04/2018 à 17h08 par Fabien Celaia

Catégories
SGBD , Oracle , Microsoft SQL Server , PostgreSql , MySQL , MariaDB

Commentaires