MySQL は世界で最も人気のあるオープンソースデータベースシステムであり、 MariaDB (MySQLのフォーク)は、世界で最も急速に成長しているオープンソースデータベースシステムです。 MySQLサーバーをインストールした後は、デフォルトの構成では安全ではなく、安全を確保することは、一般的なデータベース管理の重要なタスクの1つです。
攻撃者は常にシステムの任意の部分の脆弱性をスキャンし、データベースはこれまで主要な標的領域であったため、これはLinuxサーバー全体のセキュリティの強化と強化に貢献します。一般的な例は、MySQLデータベースのルートパスワードの総当たり攻撃です。
このガイドでは、便利な MySQL / MariaDBについて説明します。 Linuxのセキュリティのベストプラクティス。
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でLOCALINFILEを無効にする
セキュリティ強化の一環として、 local_infileを無効にする必要があります [mysqld]
の下にある次のディレクティブを使用して、MySQL内から基盤となるファイルシステムにアクセスできないようにします。 セクション。
local-infile=0
4。 MYSQLのデフォルトポートを変更する
ポート 変数は、TCP/IP接続をリッスンするために使用されるMySQLポート番号を設定します。デフォルトのポート番号は3306です ただし、 [mysqld]で変更できます 示されているセクション。
Port=5000
5。 MySQLロギングを有効にする
ログは、サーバーで何が起こっているかを理解するための最良の方法の1つです。攻撃が発生した場合、ログファイルから侵入関連のアクティビティを簡単に確認できます。 [mysqld]
の下に次の変数を追加することで、MySQLロギングを有効にできます。 セクション。
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_history bashの場合)。この履歴ファイルにアクセスした攻撃者は、そこに記録されているパスワードを簡単に確認できます。
次のように、コマンドラインでパスワードを入力することは強くお勧めしません。
# 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 '[email protected]%!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のセキュリティのヒントを私たちと共有してください。