通过 crontab 进行 MySQLdump - 通过 --password=/hashed/password/file 这样我就可以通过 crontab 使用,无需使用纯文本密码

通过 crontab 进行 MySQLdump - 通过 --password=/hashed/password/file 这样我就可以通过 crontab 使用,无需使用纯文本密码

所以我正在为自己设置一个 WordPress 备份指南/制定一个备份计划。

我想每天进行 MySQL 转储,但该命令需要

-p then user input 

或者

--password="plain text password"

我可以将其传递给至少经过 MD5 或更好的散列和保护的文件以提高安全性,但使命令不需要用户输入吗?

任何帮助表示赞赏!

作为参考,这里是我要运行的命令

mysqldump -u [username] --password=~/wp_backups/sqldumps/.sqlpwd [database name] > ~/wp_backups/sqldumps/"$(date '+%F').sql"

答案1

您有以下密码选项:

  • -p通过选项在命令行上提供密码
  • MYSQL_PWD通过环境变量提供密码
  • 将您的配置放在~/.my.cnf[mysqldump]部分下的文件中

在所有情况下,您的客户端都需要纯文本密码才能进行身份验证。您提到了哈希,但哈希的特点是它是一种单向转换函数(即您无法从哈希中恢复原始密码),因此它不能用作身份验证令牌。

由于据称您是从托管您的 Wordpress 的同一帐户备份 Wordpress 数据库,因此尝试向运行 Wordpress 的用户隐藏密码并没有安全改进(wp-config.php无论如何都可以轻松地从文件中提取数据库凭据)。

因此,我建议定义以下内容~/.my.cnf

[mysqldump]
host = your_MySQL_server_name_or_IP
port = 3306
user = database_user_name
password = database_password

然后确保该文件具有0600权限。这种方式mysqldump不需要在命令行上指定任何数据库凭据(它们将从文件中读取)~/.my.cnf

答案2

这将创建一个文件(可以是操作系统中的任何文件),该文件传递文件中的密码和用户名。即使它被“散列”,如果有人掌握了该文件也不会产生任何影响,他们可以按原样使用它。如果这对我有用,那么对他们也有用。

因此,为了回答我的问题的安全部分, chmod 0600 & sudo chown $USER:nogroup 将防止对创建后的文件进行未经授权的访问。

mkdir ~/wp_backups/sqldumps &&  touch ~/wp_backups/.sqlpwd &&  nano ~/wp_backups/.sqlpwd && chmod 600 ~/wp_backups/.sqlpwd && sudo chown $USER:nogroup ~/wp_backups/.sqlpwd

--.sqlpwd 内容

[mysqldump]             # NEEDED FOR DUMP
user=username
password=password

[mysql]             # NEEDED FOR RESTORE
user=username
password=password

--SQL CLI 语法

mysqldump --defaults-extra-file=~/wp_backups/.sqlpwd [database] > ~/wp_backups/sqldumps/"$(date '+%F').sql"

答案3

你可以看看mysqldump-安全它充当包装脚本mysqldump,负责密码安全(通过 a defaults-extra-file),并且还允许您通过非对称加密来加密您的 mysql 数据库。

相关内容