quiero correr
mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql
en un trabajo cron. ¿Cómo puedo hacerlo de forma segura?
Sé que podría poner el comando allí mismo, pero cualquier persona con acceso a la máquina lo vería de inmediato a través de crontab. Hay una mejor manera de hacerlo?
Respuestas:
Como se indica en
man mysqldump
: ver 6.1.2.1. Pautas para el usuario final para la seguridad de la contraseña en el manual de referencia de MySQL.Un archivo de opciones es la apuesta más segura, no menos importante según la referencia anterior. Darlo en texto sin formato en crontab no es bueno, sobre todo porque la línea de comando del proceso por defecto es visible
ps
para otros usuarios. Lo mismo se aplica a las variables de entorno como se explica en la referencia.Parte relevante del manual de referencia de MySQL:
Consulte también /programming//q/10725209 .
fuente
Ejecute el cronjob como un usuario específico y use una lógica de Bash simple para extraer la contraseña de un archivo de texto sin formato almacenado en algún lugar del sistema con permisos que solo permitan que el usuario (o quizás el grupo) acceda a él.
Entonces, si el cronjob se ejecuta como 'ejemplo' del usuario, la propiedad del archivo debe ser "ejemplo: ejemplo" y con permiso 0400.
También puede lograr una función similar utilizando un nivel de usuario .my.cnf .
fuente
read PASS < /path/to/pwdfile
es un idiomáticamente más limpio para hacer lo mismo (podría decirse que supongo; se aplica superuser.com/q/323060/49184 ).ARGMAX
, requiere un proceso adicional en lugar de usar un shell incorporado, podría tentar construcciones comofor i in `cat file`; do ...
con su propia gama de problemas, etc. Pero, por supuesto, como con la mayoría de las cosas: si uno sabe lo que está sucediendo, es libre de hacer lo que elija. No estoy en una cruzada aquí, independientemente de cómo pueda parecer :-D.Cualquier persona con acceso a la máquina tiene el mismo nivel de acceso
/var/spool/cron/crontabs/
que/var/lib/mysql
usted le permite. Por lo tanto, establezca los permisos adecuados en los directorios y listo. Cualquier persona con acceso raíz tiene acceso directo a los archivos de la base de datos directamente. Cualquier persona en la que no confíe para tener acceso a la máquina no debería tener acceso a la máquina.Por lo general, la gente solo ve sus propios cronjobs a través de
crontab -l
.fuente
Para fines de copia de seguridad, considere tener un usuario de solo lectura en mysql, así
mysqldump requiere solo
SELECT
yLOCK TABLES
privilegios para hacer su trabajo.fuente