日期:2013-02-26  浏览次数:20733 次

作为一个MySQL的系统管理员,你有责任维护你的MySQL数据库系统的数据安全性和完整性。本文次要次要引见如何建立一个安全的MySQL系统,从系统内部和外部网络两个角度,为你提供一个指南。

本文次要考虑下列安全性有关的问题:

为什么安全性很重要,你应该防备那些攻击?

服务器面临的风险(内部安全性),如何处理?

连接服务器的客户端风险(外部安全性),如何处理?

MySQL管理员有责任保证数据库内容的安全性,使得这些数据记录只能被那些正确授权的用户访问,这涉及到数据库系统的内部安全性和外部安全性。

内部安全性关怀的是文件系统级的问题,即,防止MySQL数据目录(DATADIR)被在服务器主机有账号的人(合法或窃取的)进行攻击。如果数据目录内容的权限过分授予,使得每团体均能简单地替代对应于那些数据库表的文件,那么确保控制客户通过网络访问的授权表设置正确,对此毫无意义。

外部安全性关怀的是从外部通过网络连接服务器的客户的问题,即,保护MySQL服务器免受来自通过网络对服务器的连接的攻击。你必须设置MySQL授权表(grant table),使得他们不允许访问服务器管理的数据库内容,除非提供无效的用户名和口令。

下面就详细引见如何设置文件系统和授权表mysql,实现MySQL的两级安全性。

一、内部安全性-保证数据目录访问的安全

MySQL服务器通过在MySQL数据库中的授权表提供了一个灵活的权限系统。你可以设置这些表的内容,允许或拒绝客户对数据库的访问,这提供了你防止未授权的网络访问对你数据库攻击的安全手段,然而如果主机上其他用户能直接访问数据目录内容,建立对通过网络访问数据库的良好安全性对你毫无协助,除非你知道你是登录MySQL服务器运转主机的独一用户,否则你需求关怀在这台机器上的其他用户获得对数据目录的访问的可能性。

以下是你应该保护的内容:

数据库文件。很明显,你要维护服务器管理的数据库的私用性。数据库拥有者通常并且应该考虑数据库内容的安全性,即便他们不想,也应该考虑时数据库内容地下化,而不是通过蹩脚的数据目录的安全性来暴露这些内容。

日志文件。普通和更新日志必须保证安全,由于他们包含查询文本。对日志文件有访问权限的任何人可以监视数据库进行过的操作。

更要重点考虑的日志文件安全性是诸如GRANT和SET PASSWORD等的查询也被记载了,普通和更新日志包含有敏感查询的文本,包括口令(MySQL使用口令加密,但它在曾经完成设置后才运用于当前的连接建立。设置一个口令的过程设计象GRANT或SET PASSWORD等查询,并且这些查询以普通文本方式记载在日志文件中)。如果一个攻击者犹如日文件的读权限,只需在日志文件上运转grep寻觅诸如GRANT和PASSWORD等词来发现敏感信息。

显然,你不想让服务器主机上的其他用户无数据库目录文件的写权限,由于他们可以重写你的形状文件或数据库表文件,但是读权限也很危险。如果一个数据库表文件能被读取,偷取文件并得到MySQL本身,以普通文本显示表的内容也很麻烦,为什么?由于你要做下列事情:

在服务器主机上安装你本人“特制”的MySQL服务器,但是有一个不同于官方服务器版本的端口、套接字和数据目录。

运转mysql_install_db初始化你的数据目录,这赋予你作为MySQL root用户访问你的服务器的权限,所以你有对服务器访问机制的完全控制,它也建立一个test数据库。

将对应于你想偷取得表文件拷贝到你服务器的数据库目录下的test目录。

启动你的服务器。你可以随意访问数据库表,SHOW TABLES FROM test显示你有一个偷来的表的拷贝,SELECT *显示它们任何一个的全部内容。
如果你确实很恶毒,将权限地下给你服务器的任何匿名用户,这样任何人能从任何地方连接服务器访问你的test数据库。你如今将偷来的数据库表发布于众了。

在考虑一下,从相反的角度,你想让别人对你这样吗?当然不!你可以通过在数据库录下执行ls -l命令确定你的数据库能否包含不安全的文件和目录。查找有“组”和“其他用户”权限设置的文件和目录。下面是一个不安全数据目录的一部分列出:

以下为援用的内容:
% ls -l
total 10148
drwxrwxr-x  11  MySQLadm wheel    1024 May  8 12:20
drwxr-xr-x  22  root     wheel     512 May  8 13:31 ..
drwx------   2  mysqladm MySQLgrp  512 Apr 16 15:57 menagerie
drwxrwxr-x   2  mysqladm wheel     512 Jan 25 20:40 MySQL
drwxrwxr-x   7  MySQLadm wheel     512 Aug 31  1998 sql-bench
drwxrwxr-x   2  MySQLadm wheel    1536 May  6 06:11 test
drwx------   2  mysqladm MySQLgrp 1024 May  8 18:43 tmp
....

正如你看到的,有些数据库有正确的权限,而其他不是。本例的情形是经过一段时间后的结果。较少限制的权限由在权限设置方面比更新版本更不严厉的较早版本服务器设置的(留意更具限制的目录menageria和tmp都有较近日期)。MySQL当前版本确保这些文件只能由运转服务器的用户读取。

让我们来修正这些权限,使得只用服务器用户可访问它们。你的次要保护工具来自于由UNIX文件系统本身提供的设置文件和目录属主和模式的工具。下面是我们要做的:

进入该目录

% cd DATADIR

设置所有在数据目录下的文件属主为由用于运转服务器的账号拥有(你必须以root执行这步)。在本文使用mysqladm和MySQLgrp作为该账号的用户名和组名。你可以使用下列命令之一改变属主:

# chown mysqladm.MySQLgrp .

# find . -follow -type d -print | xargs chown mysqladm.MySQLgrp

设置你的数据目录和数据库目录的模式使得他们只能由mysqladm读取,这阻止其他用户访问你数据库目录的内容。你可以用下列命令之一以root或MySQLadm身份运转。

% chmod -R go-rwx  .

% find . -follow -type d -print | xargs chmod go-rwx

数据目录内容的属主和模式为mysqladm设置。如今你应该保证你总是以MySQLadm用户运转服务器,由于如今这是独一由访问数据库目录权限的用户(除root)。

在完成这些设置后,你最终应该得到下面的数据目录权限:

友情链接: 爱易网 云虚拟主机技术 云服务器技术 程序设计技术 开发网站 APP开发教程
Copyright © 2013-2024 爱易网页 当前在线:359人  网站在19秒内访问总人数:359人 当前 24.40%  粤ICP备18100884号-2