je veux courir
mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql
dans un travail cron. Comment puis-je le faire en toute sécurité?
Je sais que je pourrais mettre la commande juste là, mais toute personne ayant accès à la machine la verrait directement via crontab. Y a-t-il une meilleure façon de le faire?
Réponses:
Comme indiqué dans
man mysqldump
: voir 6.1.2.1. Instructions pour l'utilisateur final pour la sécurité des mots de passe dans le manuel de référence MySQL.Un fichier d'options est le pari le plus sûr, notamment selon la référence ci-dessus. Le donner en texte brut dans crontab n'est pas bon, notamment parce que la ligne de commande du processus par défaut est visible
ps
pour les autres utilisateurs. Il en va de même pour les variables d'environnement, comme expliqué dans la référence.Partie pertinente du manuel de référence MySQL:
Voir également /programming//q/10725209 .
la source
Exécutez le cronjob en tant qu'utilisateur spécifique et utilisez une logique Bash simple pour extraire le mot de passe d'un fichier en clair stocké quelque part sur le système avec des autorisations qui permettent uniquement à l'utilisateur (ou peut-être au groupe) d'y accéder.
Ainsi, si le cronjob s'exécute en tant qu'utilisateur 'exemple', la propriété du fichier doit être "exemple: exemple" et autorisée 0400.
Vous pouvez également obtenir une fonction similaire en utilisant un .my.cnf de niveau utilisateur .
la source
read PASS < /path/to/pwdfile
est un nettoyeur idiomatique pour faire la même chose (sans doute je suppose; superuser.com/q/323060/49184 s'applique).ARGMAX
, il faut un processus supplémentaire au lieu d'utiliser un shell intégré, il pourrait tenter des constructions commefor i in `cat file`; do ...
avec son propre tableau de problèmes, etc. Mais bien sûr, comme avec la plupart des choses: si on sait ce qui se passe, on est libre de faire ce qu'on veut. Je ne suis pas en croisade ici, peu importe comment cela pourrait apparaître :-D.Toute personne ayant accès à la machine dispose du même niveau d'accès
/var/spool/cron/crontabs/
que celui que/var/lib/mysql
vous lui accordez. Donc, définissez les autorisations appropriées sur les répertoires et terminé. Toute personne disposant d'un accès root a un accès direct aux fichiers de base de données directement. Toute personne en qui vous n'avez pas confiance pour avoir accès à la machine ne devrait pas avoir accès à la machine.Habituellement, les gens ne voient que leurs propres cronjobs via
crontab -l
.la source
À des fins de sauvegarde, pensez à avoir un utilisateur en lecture seule dans mysql, comme
mysqldump requiert uniquement
SELECT
et desLOCK TABLES
privilèges pour faire son travail.la source