MySQL安全性指南
2007-11-11 15:25:20 来源:WEB开发网
在考虑一下,从相反的角度,你想让别人对你这样吗?当然不!你可以通过在数据库录下执行ls -l命令确定你的数据库是否包含不安全的文件和目录。查找有“组”和“其他用户”权限设置的文件和目录。下面是一个不安全数据目录的一部分列出:
% ls -l
total 10148
drwxrwxr-x 11 MySQL(和PHP搭配之最佳组合)adm wheel 1024 May 8 12:20
drwxr-xr-x 22 root wheel 512 May 8 13:31 ..
drwx------ 2 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 512 Apr 16 15:57 menagerie
drwxrwxr-x 2 MySQL(和PHP搭配之最佳组合)adm wheel 512 Jan 25 20:40 MySQL(和PHP搭配之最佳组合)
drwxrwxr-x 7 MySQL(和PHP搭配之最佳组合)adm wheel 512 Aug 31 1998 sql-bench
drwxrwxr-x 2 MySQL(和PHP搭配之最佳组合)adm wheel 1536 May 6 06:11 test
drwx------ 2 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 1024 May 8 18:43 tmp
....
正如你看到的,有些数据库有正确的权限,而其他不是。本例的情形是经过一段时间后的结果。较少限制的权限由在权限设置方面比更新版本更不严格的较早版本服务器设置的(注意更具限制的目录menageria和tmp都有较近日期)。MySQL(和PHP搭配之最佳组合)当前版本确保这些文件只能由运行服务器的用户读取。
让我们来修正这些权限,使得只用服务器用户可访问它们。你的主要保护工具来自于由UNIX文件系统本身提供的设置文件和目录属主和模式的工具。下面是我们要做的:
进入该目录
% cd DATADIR
设置所有在数据目录下的文件属主为由用于运行服务器的账号拥有(你必须以root执行这步)。在本文使用MySQL(和PHP搭配之最佳组合)adm和MySQL(和PHP搭配之最佳组合)grp作为该账号的用户名和组名。你可以使用下列命令之一改变属主:
# chown MySQL(和PHP搭配之最佳组合)adm.MySQL(和PHP搭配之最佳组合)grp .
# find . -follow -type d -print | xargs chown MySQL(和PHP搭配之最佳组合)adm.MySQL(和PHP搭配之最佳组合)grp
设置你的数据目录和数据库目录的模式使得他们只能由MySQL(和PHP搭配之最佳组合)adm读取,这阻止其他用户访问你数据库目录的内容。你可以用下列命令之一以root或MySQL(和PHP搭配之最佳组合)adm身份运行。
% chmod -R go-rwx .
% find . -follow -type d -print | xargs chmod go-rwx
数据目录内容的属主和模式为MySQL(和PHP搭配之最佳组合)adm设置。现在你应该保证你总是以MySQL(和PHP搭配之最佳组合)adm用户运行服务器,因为现在这是唯一由访问数据库目录权限的用户(除root)。
在完成这些设置后,你最终应该得到下面的数据目录权限:
% ls -l
total 10148
drwxrwx--- 11 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 1024 May 8 12:20 .
drwxr-xr-x 22 root wheel 512 May 8 13:31 ..
drwx------ 2 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 512 Apr 16 15:57 menagerie
drwx------ 2 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 512 Jan 25 20:40 mysq
drwx------ 7 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 512 Aug 31 1998 sql-bench
drwx------ 2 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 1536 May 6 06:11 test
drwx------ 2 MySQL(和PHP搭配之最佳组合)adm MySQL(和PHP搭配之最佳组合)grp 1024 May 8 18:43 tmp
....
二、外部安全性-保证网络访问的安全
MySQL(和PHP搭配之最佳组合)的安全系统是很灵活的,它允许你以多种不同方式设置用户权限。一般地,你可使用标准的SQL语句GRANT和REVOKE语句做,他们为你修改控制客户访问的授权表,然而,你可能由一个不支持这些语句的老版本的MySQL(和PHP搭配之最佳组合)(在3.22.11之前这些语句不起作用),或者你发觉用户权限看起来不是以你想要的方式工作。对于这种情况,了解MySQL(和PHP搭配之最佳组合)授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解允许你通过直接修改授权表增加、删除或修改用户权限,它也允许你在检查这些表时诊断权限问题。
关于如何管理用户账号,见《MySQL(和PHP搭配之最佳组合)的用户管理》。而对GRANT和REVOKE语句详细描述,见《MySQL(和PHP搭配之最佳组合)参考手册》。
更多精彩
赞助商链接