12 MySQL / MariaDB Linux版セキュリティのベストプラクティス


ある[ MySQL は、世界で最も人気のあるオープンソースデータベースシステムであり、 MariaDB (MySQLのフォーク)は、世界で最も急成長しているオープンソースデータベースシステムです。 MySQLサーバをインストールした後、それはそのデフォルト設定で安全ではありません、そしてそれを安全にすることは一般的なデータベース管理において重要なタスクの1つです。

攻撃者は常にシステムのあらゆる部分の脆弱性をスキャンし、データベースはこれまでのところ主要な標的分野であったため、これはLinuxサーバー全体のセキュリティの強化と強化に貢献します。一般的な例は、MySQLデータベースのrootパスワードの総当たり攻撃です。

このガイドでは、Linux用の便利な MySQL/MariaDB セキュリティのベストプラクティスについて説明します。

1.安全なMySQLのインストール

これはMySQLサーバーをインストールした後、データベースサーバーを保護するための最初の推奨ステップです。このスクリプトはあなたにMySQLサーバのセキュリティを向上させるのに役立ちます。

  • set a password for the root account, if you didn’t set it during installation.
  • disable remote root user login by removing root accounts that are accessible from outside the local host.
  • remove anonymous-user accounts and test database which by default can be accessed by all users, even anonymous users.
# mysql_secure_installation

実行後、rootパスワードを設定し、[ Yes/Y ]と入力して [Enter] を押して一連の質問に答えます。

2.データベースサーバをループバックアドレスにバインドします。

この設定はリモートマシンからのアクセスを制限します、それはMySQLサーバにlocalhost内からの接続のみを受け入れるように伝えます。メイン設定ファイルで設定できます。

# 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のデフォルトポートを変更する

Port 変数は、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.アプリケーション固有のデータベースユーザーを定義する

サーバー上で実行されている各アプリケーションについて、特定のアプリケーションのデータベースを担当するユーザーにのみアクセス権を付与します。たとえば、ワードプレスサイトがある場合は、次のようにワードプレスサイトデータベース用の特定のユーザーを作成します。

# 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セキュリティのヒントを私達と共有してください。