12 Linux 向けの MySQL/MariaDB セキュリティのベスト プラクティス
MySQL は世界で最も人気のあるオープン ソース データベース システムであり、MariaDB (MySQL のフォーク) は世界で最も急速に成長しているオープン ソース データベース システムです。 MySQL サーバーをインストールした後、デフォルト構成では安全ではないため、それを保護することは一般的なデータベース管理において不可欠なタスクの 1 つです。
こちらもお読みください: 初心者向けに MySQL/MariaDB を学ぶ – パート 1
攻撃者は常にシステムのあらゆる部分の脆弱性をスキャンしており、これまでデータベースは主要な標的領域であったため、これは Linux サーバー全体のセキュリティの強化と強化に貢献します。一般的な例は、MySQL データベースの root パスワードのブルート フォース攻撃です。
このガイドでは、Linux で役立つMySQL/MariaDB セキュリティのベスト プラクティスについて説明します。
1. MySQL の安全なインストール
これは、MySQL サーバーをインストールした後、データベース サーバーを保護するために最初に推奨される手順です。このスクリプトは、次のことを行うことにより、MySQL サーバーのセキュリティの向上を促進します。
- インストール時に root アカウントのパスワードを設定しなかった場合は、パスワードを設定します。
- ローカル ホストの外部からアクセスできる root アカウントを削除して、リモート root ユーザー ログインを無効にします。
- 匿名ユーザー アカウントとテスト データベースを削除します。デフォルトでは、匿名ユーザーを含むすべてのユーザーがアクセスできます。
mysql_secure_installation
実行後、root パスワードを設定し、[はい/Y] を入力して一連の質問に答え、[Enter] を押します。
2.データベースサーバーをループバックアドレスにバインドする
この構成はリモート マシンからのアクセスを制限し、MySQL サーバーにローカルホスト内からの接続のみを受け入れるように指示します。メイン設定ファイルで設定できます。
vi /etc/my.cnf [RHEL/CentOS]
vi /etc/mysql/my.conf [Debian/Ubuntu]
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf [Debian/Ubuntu]
以下の [mysqld]
セクションに次の行を追加します。
bind-address = 127.0.0.1
3. MySQL で LOCAL INFILE を無効にする
セキュリティ強化の一環として、[mysqld]
セクションの次のディレクティブを使用して、MySQL 内から基盤となるファイルシステムへのアクセスを防ぐために、local_infile を無効にする必要があります。
local-infile=0
4. MYSQLのデフォルトポートを変更する
ポート 変数は、TCP/IP 接続をリッスンするために使用される MySQL ポート番号を設定します。デフォルトのポート番号は 3306 ですが、示されているように [mysqld] セクションで変更できます。
Port=5000
5. MySQL ログを有効にする
ログは、サーバー上で何が起こっているかを理解するための最良の方法の 1 つであり、攻撃が発生した場合に、ログ ファイルから侵入関連のアクティビティを簡単に確認できます。 MySQL ログを有効にするには、[mysqld]
セクションに次の変数を追加します。
log=/var/log/mysql.log
6. MySQL ファイルに適切な権限を設定する
すべての mysql サーバー ファイルとデータ ディレクトリに対して適切な権限が設定されていることを確認してください。 /etc/my.conf ファイルは root のみが書き込み可能である必要があります。これにより、他のユーザーがデータベース サーバーの構成を変更できなくなります。
chmod 644 /etc/my.cnf
7. MySQL シェル履歴の削除
MySQL シェルで実行するすべてのコマンドは、mysql クライアントによって履歴ファイル ~/.mysql_history に保存されます。作成するユーザー アカウントについて、シェルに入力されたすべてのユーザー名とパスワードが履歴ファイルに記録されるため、これは危険な場合があります。
cat /dev/null > ~/.mysql_history
8. コマンドラインから MySQL コマンドを実行しないでください
すでにご存知のとおり、ターミナルに入力したすべてのコマンドは、使用しているシェルに応じて履歴ファイルに保存されます (たとえば、bash の場合は ~/.bash_history)。この履歴ファイルにアクセスできた攻撃者は、そこに記録されているパスワードを簡単に見ることができます。
コマンドラインに次のようなパスワードを入力することは強くお勧めしません。
mysql -u root -ppassword_
コマンド履歴ファイルの最後のセクションを確認すると、上で入力したパスワードが表示されます。
history
MySQL に接続する適切な方法は次のとおりです。
mysql -u root -p
Enter password:
9. アプリケーション固有のデータベース ユーザーを定義する
サーバー上で実行されているアプリケーションごとに、特定のアプリケーションのデータベースを担当するユーザーにのみアクセスを許可します。たとえば、WordPress サイトがある場合は、次のように WordPress サイト データベース用の特定のユーザーを作成します。
mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
また、サーバー上のアプリケーション データベースを管理しなくなったユーザー アカウントは必ず削除してください。
10. 追加のセキュリティ プラグインとライブラリを使用する
MySQL には、クライアントによる mysql サーバーへの接続試行の認証、パスワード検証、機密情報のストレージの保護などのための多数のセキュリティ プラグインが含まれており、これらはすべて無料版で利用できます。
詳細については、こちらをご覧ください: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html
11. MySQL パスワードを定期的に変更する
これは、情報、アプリケーション、システムのセキュリティに関する一般的なアドバイスです。これを行う頻度は、社内のセキュリティ ポリシーによって完全に異なります。ただし、長期間にわたってあなたのアクティビティを追跡していた可能性のある「スヌーパー」が mysql サーバーにアクセスするのを防ぐことができます。
MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
12. MySQL サーバーパッケージを定期的に更新する
ベンダーのリポジトリからセキュリティ更新やバグ修正に対応するために、mysql/mariadb パッケージを定期的にアップグレードすることを強くお勧めします。通常、デフォルトのオペレーティング システム リポジトリ内のパッケージは古いです。
yum update
apt update
mysql/mariadb サーバーに変更を加えた後は、必ずサービスを再起動してください。
systemctl restart mariadb #RHEL/CentOS
systemctl restart mysql #Debian/Ubuntu
こちらもお読みください: MySQL/MariaDB のパフォーマンス チューニングと最適化に役立つ 15 のヒント
それだけです!以下のコメントフォームからご意見をお待ちしております。上記のリストにない MySQL/MariaDB セキュリティのヒントがあれば、ぜひ共有してください。