ホームページ データベース mysql チュートリアル 如何安全的配置和应用 MySQL 数据库_MySQL

如何安全的配置和应用 MySQL 数据库_MySQL

Jun 01, 2016 pm 02:03 PM
mysql どうやって 安全性 応用 データベース 書類 接続する 構成

 

MySQL已经成为当前网络中使用最多的数据库之一,特别是在Web应用上,它占据了中小型应用的绝对优势。这一切都源于它的小巧易用、安全有效、开放式许可和多平台,更主要的是它与三大Web语言之一——PHP的完美结合。

但不幸的是,一个缺省安装的MySQL,会因为root密码为空及程序漏洞导致被溢出,使得安装MySQL的服务器成为被经常攻击的对象。更严重的是,被攻击之后数据库往往遭破坏,易造成灾难性的后果。下面将进入为了保护数据而进行的保卫战中。

 

环境要求

 

1.系统环境:

 

有一台Red Hat Linux 9.0自定义安装的服务器,系统安装了GCC及一些软件包,比如Apache、PHP等。安装完系统后的第一件事就是升级系统的软件包。作为Web服务器,系统接受PHP脚本的请求,PHP则使用下面将要安装的MySQL数据库作为动态发布的接触。

 

分区情况的要求和一般系统差不多,惟一不同之处在于后面建立的/chroot与/tmp要求在同一个分区上。

 

2.安全要求:

 

(1)MySQL运行在一个独立的(Chroot)环境下;

 

(2)mysqld进程运行于一个独立的用户/用户组下,此用户和用户组没有根目录,没有Shell,也不能用于其它程序;

 

(3)修改MySQL的root账号,并使用一个复杂的密码;

 

(4)只允许本地连接MySQL,启动MySQL时网络连接被禁止掉;

 

(5)保证连接MySQL的nobody账号登录被禁止;

 

(6)删除test数据库。

 

安装MySQL

 

1.安装准备:

 

安装MySQL之前,按照上述安全要求需要创建一个用于启动MySQL的用户和组。

 

<ccid_code></ccid_code>#groupadd mysql#useradd 
mysql -c "start mysqlds account" -d 
dev/null -g mysql -s /sbin/nologin
ログイン後にコピー

2.编译和安装:

 

下载MySQL源代码包:

 

#wget http://mysql.he.net/Downloads/MySQL-4.0/mysql-4.0.16.tar.gz

 

解压缩:

 

#tar -zxvf mysql-4.0.16.tar.gz

 

一般把MySQL安装在/usr/local/mysql下,如果有特殊要求,也可自行调整。不过这样做意义不大,因为后面将Chrooting,到时只是使用这里的客户工具而已,比如mysql,mysqladmin,mysqldump等。下面就开始编译安装吧。

 

<ccid_code></ccid_code>#./configure --prefix=/usr/local/mysql 
\ --with-mysqld-user=mysql \ --with-unix-socket-path=/tmp/mysql.sock
 \ --with-mysqld-ldflags=-all-static#make && make 
install#strip /usr/local/mysql/libexec
/mysqld#scripts/mysql_install_db#chown 
-R root /usr/local/mysql#chown -R mysql 
/usr/local/mysql/var#chgrp -R mysql /usr/local/mysql
ログイン後にコピー

上面各步骤的具体作用在MySQL手册里已有介绍,惟一需要解释、和一般步骤不同的地方在于--with-mysqld-ldflags=-all-static。因为需要用到Chroot环境,而MySQL本身连接成静态后就无需再创建一些库环境了。

 

3.配置与启动:

 

MySQL的配置文件需要手工选择、拷贝几个模板文件中的一个到/etc下,这几个模板文件位于源文件的support-files目录,一共有4个:small、medium、large、huge。

 

<ccid_code></ccid_code>#cp support-files/my-medium.cnf 
/etc/my.cnf#chown root:sys /etc/my.cnf#chmod 
644 /etc/my.cnf
ログイン後にコピー

 

启动MySQL,注意使用用户为MySQL:

 

#/usr/local/mysq/bin/mysqld_safe --user=mysql &

 

 

4.测试:

 

为了测试安装的程序是否正确及MySQL是否已经正常启动,最好的办法就是用MySQL客户端来连接数据库。

 

<ccid_code></ccid_code>#/usr/local/mysql/bin/mysql[root@ftp bin]
# mysqlWelcome to the MySQL monitor. Commands 
end with ; or \g.Your MySQL connection id is 
687 to server version: 3.23.58Type help; 
or \h for help. Type \c to clear the 
buffer.mysql>mysql> show d
atabases;+--------------+  
Database  +--------------+  
mysql    test  +--------------+2 
rows in set (0.00 sec)mysql>quit
ログイン後にコピー

 

连接成功,可以关闭数据库:

 

#/usr/local/mysql/bin/mysqladmin -uroot shutdown

 

 

如果连接失败则需要仔细分析出错原因:

 

#more /usr/local/mysql/var/`hostname`.err

 

Chrooting

 

1.Chrooting环境:

 

Chroot是Unix/类Unix的一种手段,它的建立会将其与主系统几乎完全隔离。也就是说,一旦遭到什么问题,也不会危及到正在运行的主系统。这是一个非常有效的办法,特别是在配置网络服务程序的时候。

 

2.Chroot的准备工作:

 

首先,应当建立目录结构:

 

<ccid_code></ccid_code>#mkdir -p /chroot/mysql/dev#mkdir -p 
/chroot/mysql/etc#mkdir -p /chroot/mysql/tmp#mkdir -p 
/chroot/mysql/var/tmp#mkdir -p /chroot
/mysql/usr/local/mysql/libexec#mkdir -p 
/chroot/mysql/usr/local/mysql/share
/mysql/english
ログイン後にコピー

然后设定目录权限:

 

#chown -R root:sys /chroot/mysql#chmod -R 755 /chroot/mysql#chmod 1777 /chroot/mysql/tmp

 

3.拷贝mysql目录下的程序和文件到chroot下:

 

<ccid_code></ccid_code>#cp -p /usr/local/mysql/libexec
/mysqld /chroot/mysql/usr/
local/mysql/libexec/#cp -p /usr/local/mysql/share
/mysql/english/errmsg.sys/chroot/mysql/usr/local
/mysql/share/mysql/english/#cp -p /etc/hosts 
/chroot/mysql/etc/#cp -p /etc/host.conf /chroot
/mysql/etc/#cp -p /etc/resolv.conf /chroot
/mysql/etc/#cp -p 
/etc/group /chroot/mysql/etc
/#cp -p /etc/passwd 
/chroot/mysql/etc/passwd#cp -p 
/etc/my.cnf /chroot/mysql/etc/
ログイン後にコピー

 

 

4.编辑chroot下的passwd文件和group文件:

 

#vi /chroot/etc/passwd

如上命令打开passwd文件,请删除除了mysql、root、sys的所有行。

#vi /chroot/etc/group

如上命令打开group文件,请删除除了mysql、root的所有行。

 

5.创建特殊的设备文件/dev/null :

 

<ccid_code></ccid_code>#ls -al /dev/nullcrw-rw-rw- 1 
root root 1, 3 Jan 30 2003 /dev/null#mknod 
/chroot/mysql/dev/null c 1 3#chown root:root 
/chroot/mysql/dev/null#chmod 666 /chroot
/mysql/dev/null
ログイン後にコピー

 

6.拷贝mysql的数据库文件到chroot下:

 

<ccid_code></ccid_code>#cp -R /usr/local/mysql/var/ 
/chroot/mysql/usr/local/mysql
/var#chown -R mysql:mysql /chroot/mysql
/usr/local/mysql/var
ログイン後にコピー

7.安装chrootuid程序: (下载chrootuid,然后RPM安装即可。)

 

8.测试Chroot环境下的MySQL配置:

 

#chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld &

 

如果失败请注意chroot目录下面的权限问题。

 

9.测试连接chroot下的MySQL:

 

<ccid_code></ccid_code>#/usr/local
/mysql/bin/mysql --socket=
/chroot/mysql/tmp/mysql.sock.......
mysql>show databases;mysql>
create database wgh;mysql>
quit;#ls -al /chroot/mysql
/var/.......
ログイン後にコピー

 

配置服务器

为了更加安全地使用MySQL,需要对MySQL的数据库进行安全配置。由于Chroot的原因,配置文件也会有所不同。

 

1.关闭远程连接:

 

首先,应该关闭3306端口,这是MySQL的默认监听端口。由于此处MySQL只服务于本地脚本,所以不需要远程连接。尽管MySQL内建的安全机制很严格,但监听一个TCP端口仍然是危险的行为,因为如果MySQL程序本身有问题,那么未授权的访问完全可以绕过MySQL的内建安全机制。关闭网络监听的方法很简单,在/chroot/mysql/etc/my.cnf文件中的[mysqld]部分,去掉#skip-networking前面的“#”即可。

 

关闭了网络,本地程序如何连接MySQL数据库呢?本地程序可以通过mysql.sock来连接,速度比网络连接更快。后文将提到关于mysql.sock的具体情况。MySQL的备份通常使用SSH来执行。

 

2.禁止MySQL导入本地文件:

 

下面将禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了。

 

为了禁止上述命令,在/chroot/mysql/etc/my.cnf文件的[mysqld]部分加入下面语句:

 

set-variable=local-infile=0

 

为了管理方便,一般在系统中的MySQL管理命令如mysql、mysqladmin、mysqldump等,使用的都是系统的/etc/my.cnf文件。如果要连接,它会寻找/tmp/mysql.sock文件来试图连接MySQL服务器,但是这里要连接的是chroot下的MySQL服务器。解决办法有两个:一个是在管理命令后面加入--socket=/chroot/mysql/tmp/mysql.sock。例如:

 

#/usr/local/mysql/bin/mysql -root -p --socket=/chroot/mysql/tmp/mysql.sock

 

另一个就是在/etc/my.cnf的[client]部分加入socket=/chroot/mysql/tmp/mysql.sock。显然,第二种方法方便多了。

 

3.修改MySQL的root用户ID和密码:

 

<ccid_code></ccid_code>#chrootuid /chroot/mysql mysql 
/usr/local/mysql/libexec/mysqld /usr/local/mysql/
bin/mysql -uroot.......mysql>SET PASSWORD FOR root
@localhost=PASSWORD(new_password);
ログイン後にコピー

 

要尽量养成在MySQL下输入密码的习惯,因为Shell下面输入的时候可能会被其它人看见。

 

<ccid_code></ccid_code>mysql>use mysql;mysql>update user set 
user="wghgreat" where user="root";mysql>select 
Host,User,Password,Select_priv,Grant_priv from 
user;mysql>delete from user where user=;mysql>
delete from user where password=;mysql>delete 
from user where host=%;mysql>drop database test;
ログイン後にコピー

 

修改为一个不容易猜的ID:mysql>flush privileges;mysql>quit。

 

4.删除历史命令记录:

 

这些历史文件包括~/.bash_history、~/.mysql_history等。如果打开它们,你会大吃一惊,怎么居然有一些明文的密码在这里?!

 

#cat /dev/null > ~/.bash_history#cat /dev/null > ~/.mysql_history

 

PHP和MySQL通信

 

默认情况下,PHP会通过/tmp/mysql.sock来和MySQL通信,但这里的一个大问题是MySQL生成的根本不是它,而是/chroot/mysql/tmp/mysql.sock。解决的办法就是做一个连接:

 

#ln /chroot/mysql/tmp/mysql.sock /tmp/mysql.sock

 

注意:由于hard links不能在文件系统的分区之间做,所以该处的连接必须位于同一分区内部。

 

自启动配置

 

自启动配置前先提示一点,用于PHP的数据库需要用一个新建的账号,其上有数据库权限设置,比如FILE、GRANT、ACTER、SHOW DATABASE、RELOAD、SHUTDOWN、PROCESS、SUPER等。

 

自启动脚本示例:

<ccid_code></ccid_code>#!/bin/shCHROOT_MYSQL=/chroot/mysql SOCKET=
/tmp/mysql.sockMYSQLD=/usr/local/mysql
/libexec/mysqldPIDFILE=/usr/local/mysql
/var/`hostname`.pidCHROOTUID=/usr/bin
/chrootuidecho -n " mysql"case "$1" 
instart)rm -rf ${SOCKET}nohup ${CHROOTUID} 
${CHROOT_MYSQL} mysql ${MYSQLD} >/dev/null 
2>&1 &sleep 5 && ln ${CHROOT_MYSQL}/${SOCKET} 
${SOCKET};;stop)kill `cat ${CHROOT_MYSQL}
/${PIDFILE}`rm -rf ${CHROOT_MYSQL}/${SOCKET};;*)
echo ""echo "Usage: `basename $0` {start stop}"
 >&2exit 64;;esacexit 0
ログイン後にコピー

 

文件位于/etc/rc.d/init.d下,名为mysqld,注意要可执行:

 

<ccid_code></ccid_code>#chmod +x /etc/rc.d/init.d
/mysqld#ln -s /etc/rc.d/init.d/mysql 
/etc/rc3.d/S90mysql#ln -s /etc/rc.d
/init.d/mysql /etc/rc0.d/K20mysql
ログイン後にコピー

(T006)

相关文章:

http://bbs.database.ccidnet.com/htm_data/30/0704/357894.html">六大步保护MySQL数据库中重要数据

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

SQLデータベースの構築方法 SQLデータベースの構築方法 Apr 09, 2025 pm 04:24 PM

SQLデータベースの構築には、DBMSの選択が必要です。 DBMSのインストール。データベースの作成。テーブルの作成;データの挿入;データの取得。データの更新。データの削除。ユーザーの管理。データベースのバックアップ。

See all articles