保障MySQL安全的十四个最佳方法(2)

  常见的数据库安全建议都有“降低给各方的特权”这一说法。对于MySQL也是如此。一般情况下,开发人员会使用最大的许可,不像安全管理一样考虑许可原则,而这样做会将数据库暴露在巨大的风险中。

  为保护数据库,务必保证真正存储MySQL数据库的文件目录是由”mysql” 用户和” mysql”组所拥有的。

  shell>ls -l /var/lib/mysql

  此外,还要确保仅有用户”mysql”和root用户可以访问/var/lib/mysql目录。

  Mysql的二进制文件存在于/usr/bin/目录中,它应当由root用户或特定的”mysql”用户所拥有。对这些文件,其它用户不应当拥有“写”的访问权:

  shell>ls -l /usr/bin/my*

  9、降低用户的数据库特权

  有些应用程序是通过一个特定数据库表的用户名和口令连接到MySQL的,安全人员不应当给予这个用户完全的访问权。

  如果攻击者获得了这个拥有完全访问权的用户,他也就拥有了所有的数据库。查看一个用户许可的方法是在MySQL控制台中使用命令SHOW GRANT

  >SHOW GRANTS FOR 'user'@'localhost';

  为定义用户的访问权,使用GRANT命令。在下面的例子中,user1仅能从dianshang数据库的billing表中选择:

  > GRANT SELECT ON billing.dianshang TO 'user1'@'localhost';

  > FLUSH PRIVILEGES;

  如此一来,user1用户就无法改变数据库中这个表和其它表的任何数据。

  另一方面,如果你要从一个用户移除访问权,就应使用一个与GRANT命令类似的REVOKE命令:

  > REVOKE SELECT ON billing.ecommerce FROM 'user1'@'localhost';

  > FLUSH PRIVILEGES;

  10、移除和禁用.mysql_history文件

  在用户访问MySQL控制台时,所有的命令历史都被记录在~/.mysql_history中。如果攻击者访问这个文件,他就可以知道数据库的结构。

  $ cat ~/.mysql_history

  为了移除和禁用这个文件,应将日志发送到/dev/null。

  $export MYSQL_HISTFILE=/dev/null

  上述命令使所有的日志文件都定向到/dev/null,你应当从home文件夹移除.mysql_history:$ rm ~/.mysql_history,并创建一个到/dev/null的符号链接。

  11、安全补丁

  务必保持数据库为最新版本。因为攻击者可以利用上一个版本的已知漏洞来访问企业的数据库。

  12、启用日志

  如果你的数据库服务器并不执行任何查询,建议你启用跟踪记录,你可以通过在/etc/my.cnf文件的[Mysql]部分添加:log =/var/log/mylogfile。

  对于生产环境中任务繁重的MySQL数据库,因为这会引起服务器的高昂成本。

  此外,还要保证只有root和mysql可以访问这些日志文件。

  错误日志

  务必确保只有root和mysql可以访问hostname.err日志文件。该文件存放在mysql数据历史中。该文件包含着非常敏感的信息,如口令、地址、表名、存储过程名、代码等,它可被用于信息收集,并且在某些情况下,还可以向攻击者提供利用数据库漏洞的信息。攻击者还可以知道安装数据库的机器或内部的数据。

  MySQL日志

  确保只有root和mysql可以访问logfileXY日志文件,此文件存放在mysql的历史目录中。

  13、改变root目录

  Unix操作系统中的chroot可以改变当前正在运行的进程及其子进程的root目录。重新获得另一个目录root权限的程序无法访问或命名此目录之外的文件,此目录被称为“chroot监狱”。

  通过利用chroot环境,你可以限制MySQL进程及其子进程的写操作,增加服务器的安全性。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11201.html