科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道教你一步一步地加强MySQL的安全性(5)

教你一步一步地加强MySQL的安全性(5)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文的实验都假设PHP模橐丫沧霸诹薃pache Web服务器上了,并且被放在了目录 /chroot/httpd下。除此以外,我们还作了如下的假设:

作者:专家blog 来源:专家blog 2007年9月11日

关键字: 安全 数据库 SQL Server SQL Server 各版本

  • 评论
  • 分享微博
  • 分享邮件
 

6.本地化

如果主机上使用的默认语言不是英语,我们还应该拷贝合适的字符集,可以在目录/usr/local/mysql/share/mysql/charset下找到。

7.测试配置

现在,MySQL应该可以在chrooted环境中运行了。我们可以通过下面这个命令来验证一下它是否能正确的运行:





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

如果在执行了上面的命令后出现了错误,我们应该使用truss命令或者具有等价功能的命令如:ktrace/kdump、strace等等。这些命令可以帮助我们来找出和消除引起问题的原因。

(脚本小子:这里为了能够运行mysqld进程,使用的是chrootuid程序而不是chroot程序,因为假设是在Apache或者PHP的环境下,它们两个的主要不同在于chrootuid可以改变执行进程的所有者,在我们的例子里面,mysqld在一个chrooted环境下被执行的,但是进程的所有者不是root而是mysql用户,Chrootid在许多操作系统里并不是默认安装的,需要我们从网上下载下来,然后手动安装上去,可以到网址[url]ftp://ftp.porcupine.org/pub/security/chrootuid1.3.tar.gz[/url]下载。)

配置服务器

接下来的步骤,我们就要来配置数据库服务器,使之能够适合我们的安全性要求。

在假定MySQL进行默认安装的时候,主要的配置文件是/etc/my.cnf。然而,在我们的例子里,因为是在chrooted环境下运行服务,所以我们就要使用两个配置文件/chroot/mysql/etc/my.cnf和/etc/my.cnf。其中,前一个可以被MySQL服务器使用,而后一个要被MySQL工具(如mysqladmin,mysql,mysqldump等)使用。

1.禁止远程访问

我们知道,MySQL默认情况下使用TCP的3306端口,所以,我们首先要改变一下。因为,按照我们开始的设想,数据库仅仅是让本机的PHP应用程序访问,所以,我们可以将这个监听端口的功能禁止掉。这样就可以降低MySQL数据库遭受直接经由TCP/IP访问的外部主机攻击的可能性。而同时,本地的交互还可以通过mysql.sock套接字进行。为了能够禁止在3306端口上监听,我们要将参数skip-networking添加到/chroot/mysql/etc/my.cnf目录下[mysqld]部分。如果在有的时候还需要从外部访问数据库,可以按照如下方法使用SSH协议:

backuphost$ ssh mysqlserver /usr/local/mysql/bin/mysqldump -A > backup

2.提高本地安全性

接下来,为了防止对本地文件进行未授权的访问,我们还需要禁止掉对LOAD DATA LOCAL INFILE命令的使用。这对于有效防止当在PHP应用程序中发现了新的SQL注入漏洞是非常有效的。这里,我们需要对在目录/chroot/mysql/etc/my.cnf下的[mysqld]部分加一个参数set-variable=local-infile=0。

另外,为了更方便的使用数据库管理工具,我们还必须改变/etc/my.cnf目录[client]部分的参数设置为socket = /chroot/mysql/tmp/mysql.sock。这样,当我们以后再需要用到管理工具的时候,就不用每次都来使用带有socket=/chroot/mysql/tmp/mysql.sock参数的命令了。

3.改变管理员的密码

在加强MySQL安全性的这些步骤里,改变管理员的密码是很重要的一步,但是,这首先需要MySQL运行起来,可以通过如下命令实现:

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

用下面的命令改变管理员的密码:

/usr/local/mysql/bin/mysql -u root 
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章