新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > MySQL教程 > 正文:安全的配置和应用MySQL数据库

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

新客网 XKER.COM 2008-03-12 来源:新客网络学院 收藏本文

配置服务器

为了更加安全地使用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和密码

#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下面输入的时候可能会被其它人看见。

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等。

自启动脚本示例:

#!/bin/sh

CHROOT_MYSQL=/chroot/mysql

SOCKET=/tmp/mysql.sock

MYSQLD=/usr/local/mysql/libexec/mysqld

PIDFILE=/usr/local/mysql/var/`hostname`.pid

CHROOTUID=/usr/bin/chrootuid

echo -n " mysql"

case "$1" in

start)

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}" >&2

exit 64

;;

esac

exit 0



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

#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

尽管不能做到100%的安全,但是这些措施可以保护我们的系统更加安全。

共3页: 上一页 [1] [2] [3] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐