Open1

mysqldump警告「mysqldump: [Warning] Using a password on the command line interface can be insecure.」

AyakaAyaka

事象

mysqldumpでバックアップを取得するスクリプトを作成し、動作確認をしていたところ以下の警告が出た。

mysqldump: [Warning] Using a password on the command line interface can be insecure.

CLIでパスワードが見えているのは安全でないという警告文のようです。

参考
https://beyondjapan.com/blog/2016/08/mysql56-warning/

以下が元のスクリプトで、パスワードは直接スクリプトには書かずに別の隠しファイルへ記載していましたが、結局そこから取得したパスワードをCLIで入力することになっているのでこれがダメみたいです。

#!/bin/bash

#バックアップの保存先の指定
BACKUP_DIR=/backups/mysql-dump

#パスワード設定ファイルから変数を取得
source /backups/.password

#mysqlバックアップ取得
mysqldump -h "$HOST" -u "$USER" -p"$PASSWORD" "$DB_NAME" | gzip  > /var/www/dev.menta.me/backups/mysql-dump/mysql-dump-`date +%Y_%m%d_%H%M%S`.sql.gz

#5日前以降のファイルを削除
OLD_DATE=`date +%Y_%m%d --date "5 days ago"`
OLD_DUMP=${BACKUP_DIR}/mysql-dump-${OLD_DATE}*.sql.gz
rm -f ${OLD_DUMP}

スクリプトを変更する

隠しファイルにした/etc/.my.cnfにパスワードを記載する。
※/etc/.my.cnfファイルはAnsibleを使って配置するようにしており、Gitでコードを管理しているが、
このパスワードの記載は別途手動で追記するようにする。

.my.cnfへ以下を追記

[client]
user=ユーザ名
password=パスワード
host=localhost

ファイルの実行権限を制限する

chmod 600 /etc/.my.cnf

スクリプトも上記.my.cnfを参照するよう修正

#!/bin/bash

#バックアップの保存先の指定
BACKUP_DIR=/backups/mysql-dump

#mysqlバックアップ取得
mysqldump --defaults-file=/etc/.my.cnf "ansible_wordpress" | gzip > /var/www/dev.menta.me/backups/mysql-dump/mysql-dump-`date +%Y_%m%d_%H%M%S`.sql.gz

#5日前以降のファイルを削除
OLD_DATE=`date +%Y_%m%d --date "5 days ago"`
OLD_DUMP=${BACKUP_DIR}/mysql-dump-${OLD_DATE}*.sql.gz
rm -f ${OLD_DUMP}
~                     

スクリプト実行

警告が出なくなりました。

[root@dev-vagrant ~]# sh /var/www/dev.menta.me/mysql.sh
[root@dev-vagrant ~]# ls -l /var/www/dev.menta.me/backups/mysql-dump/
total 48
-rw-r--r-- 1 root root 23661 Dec 17 15:46 mysql-dump-2023_1217_154350.sql.gz
-rw-r--r-- 1 root root 23662 Dec 17 16:15 mysql-dump-2023_1217_161436.sql.gz
[root@dev-vagrant ~]# 

自動化する時には特にパスワードの管理に気をつけないといけないですね。