Eu quero correr
mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql
em um trabalho cron. Como posso fazer isso com segurança?
Eu sei que poderia colocar o comando ali, mas qualquer pessoa com acesso à máquina o veria imediatamente via crontab. Há uma melhor forma de fazê-lo?
Respostas:
Conforme indicado em
man mysqldump
: ver 6.1.2.1. Diretrizes do usuário final para segurança de senha no manual de referência do MySQL.Um arquivo de opções é a aposta mais segura, de acordo com a referência acima. Entregá-lo em texto sem formatação no crontab não é bom, já que a linha de comando do processo, por padrão, é visível
ps
para outros usuários. O mesmo se aplica às variáveis de ambiente, conforme explicado na referência.Parte relevante do manual de referência do MySQL:
Consulte também /programming//q/10725209 .
fonte
Execute o cronjob como um usuário específico e use alguma lógica simples do Bash para extrair a senha de um arquivo de texto sem formatação armazenado em algum lugar do sistema com permissões que permitem apenas que o usuário (ou talvez o grupo) acesse.
Portanto, se o cronjob for executado como usuário 'exemplo', a propriedade do arquivo deverá ser "exemplo: exemplo" e com permissão 0400.
Você também pode obter uma função semelhante usando um .my.cnf no nível do usuário .
fonte
read PASS < /path/to/pwdfile
é um idioma mais limpo para fazer a mesma coisa (sem dúvida, eu acho; aplica-se superuser.com/q/323060/49184 ).ARGMAX
isso, será necessário um processo extra, em vez de usar um shell interno , pode tentar construções comofor i in `cat file`; do ...
com sua própria variedade de problemas etc. Mas, claro, como com a maioria das coisas: se alguém sabe o que está acontecendo, é livre para fazer o que quiser. Eu não estou em uma cruzada aqui, independentemente de como possa parecer :-D.Qualquer pessoa com acesso à máquina tem o mesmo nível de acesso
/var/spool/cron/crontabs/
que/var/lib/mysql
você permite. Portanto, defina as permissões apropriadas nos diretórios e pronto. Qualquer pessoa com acesso root tem acesso direto aos arquivos do banco de dados diretamente. Qualquer pessoa em quem você não confie para ter acesso à máquina não deve ter acesso à máquina.Normalmente, as pessoas só veem seus próprios cronjobs via
crontab -l
.fonte
Para fins de backup, considere ter um usuário somente leitura no mysql, assim
O mysqldump requer apenas
SELECT
eLOCK TABLES
privilégios para fazer seu trabalho.fonte