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的用户和组。
#groupadd mysql
#useradd mysql -c "start mysqld's 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等。下面就开始编译安装吧。
#./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。
#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客户端来连接数据库。
#/usr/local/mysql/bin/mysql
[root@ftp bin]# mysql
welcome to the mysql monitor. commands end with ; or \g.
your mysql connection id is 687 to server version: 3.23.58
type 'help;' or '\h' for help. type '\c' to clear the buffer.
mysql>
mysql> show databases;
+--------------+
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的准备工作
首先,应当建立如图1示目录结构:
#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
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器