ネットで公開されているDockerでのPostgresの立ち上げには, パスワードが設定されていないことが多い.
ルーターの脆弱性などで意図せずグローバルからアクセスできてしまうことがあり, パスワードを設定していないと簡単にpostgresユーザを利用して, そのコンテナにマルウェアを感染させるなど悪戯することができる.
CVE-2019-9193: Not a Security Vulnerability
よくある設定
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: ""
POSTGRES_HOST_AUTH_METHOD: trust
portsとenvironmentを書き換える
ports:
- "127.0.0.1:5432:5432"
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "複雑なパスワード"
$ pg_dumpall -h localhost -p 5432 -U postgres --exclude-database postgres | sed -E 's/^(CREATE|ALTER) ROLE/-- &/' > dump-$(date "+%Y%m%dt%H%M%S").sql
# Dockerコンテナを落とす
$ docker compose down
# volume(Postgresのデータ)を削除する
$ docker volume rm [volume名]
# Postgresを起動する
$ docker compose up -d
# バックアップファイルが1つなことを確認
$ ls | grep '^dump-'
# バックアップSQLをローカルからdockerコンテナ内に移動させる
$ ls | grep '^dump-' | PGPASSWORD="複雑なパスワード" xargs -Ipath psql -h localhost -p 5432 -U postgres -f path
Twitterフォロー待ってます!