Executando o mysql dump em um cron job sem expor senhas

11

Eu quero correr

mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql

em um cron job. 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. Tem algum jeito melhor de fazer isso?

    
por slycat 21.10.2012 / 09:06

4 respostas

14

Como indicado em man mysqldump : veja 6.1.2.1. Diretrizes para Usuário Final para Segurança de Senha no manual de referência do MySQL.

Um arquivo de opções é a aposta mais segura, não menos importante, de acordo com a referência acima. Dar em texto puro no crontab não é bom, não menos importante, já que a linha de comando do processo, por padrão, é visível através de ps para outros usuários. O mesmo se aplica às variáveis de ambiente, conforme explicado na referência.

Porção relevante do manual de referência do MySQL:

Store your password in an option file. For example, on Unix, you can list your password in the [client] section of the .my.cnf file in your home directory:

[client]
password=your_pass

To keep the password safe, the file should not be accessible to anyone but yourself. To ensure this, set the file access mode to 400 or 600. For example:

shell> chmod 600 .my.cnf

To name from the command line a specific option file containing the password, use the --defaults-file=file_name option, where file_name is the full path name to the file. For example:

shell> mysql --defaults-file=/home/francis/mysql-opts

Section 4.2.3.3, “Using Option Files”, discusses option files in more detail.

Veja também o link .

    
por 21.10.2012 / 13:02
4

Execute o cronjob como um usuário específico e use uma lógica Bash simples para extrair a senha de um arquivo de texto simples armazenado em algum lugar do sistema com permissões que permitam apenas o usuário (ou talvez grupo) acessá-lo.

PASS='cat /path/to/pwdfile'

 mysqldump -u aUser -p $PASS--all-databases > backup.sql

Portanto, se o cronjob for executado como usuário 'example', a propriedade do arquivo deverá ser "example: example" e permissioned 0400.

Você também pode obter uma função semelhante usando .my.cnf .

    
por 21.10.2012 / 09:20
0

Qualquer pessoa com acesso à máquina tem o mesmo nível de acesso a /var/spool/cron/crontabs/ do que /var/lib/mysql que você permite. Então, defina as permissões adequadas 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 que tenha acesso à máquina não deve ter acesso à máquina.

Normalmente, as pessoas só veem seus próprios cronjobs por meio de crontab -l .

    
por 21.10.2012 / 09:19
0

Para fins de backup, considere ter um usuário somente leitura no mysql, assim

CREATE USER bUser IDENTIFIED BY 'p4ss';

GRANT SELECT ON *.* TO bUser@localhost;
GRANT LOCK TABLES ON *.* TO bUser@localhost;

mysqldump requer apenas SELECT e LOCK TABLES privilégios para fazer seu trabalho.

    
por 08.12.2016 / 00:04