本文详细总结了PHP网站在Linux服务器上的安全配置,包括PHP安全、mysql数据库安全、web服务器安全、木马查杀与防范等,非常不错而且功能强大很安全。(如果需要深入安全部署,建议找国内专业做安全的公司,比如:信安、绿盟、金星等都是比较好的做网站安全的公司)PHP安全配置1.确保运行php的用户为一般用户,如www2.php.ini参数设置disable_functions=passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,phpinfo#禁用函数expose_php=off#避免暴露PHP信息display_errors=off#关闭错误信息提示register_globals=off#关闭全局变量enable_dl=off#不允许调用dlallow_url_include=off#Avoid远程调用文件session.cookie_httponly=1#httponlyopenupload_tmp_dir=/tmp#明确定义上传目录open_basedir=./:/tmp:/home/wwwroot/#限制用户访问该目录open_basedir参数详解open_basedir可以将用户访问文件的范围限制在指定区域,通常是其他家目录的路径,以及符号“.”。也可以用来表示当前目录。请注意,用open_basedir指定的限制实际上是前缀,而不是目录名称。例如:如果“open_basedir=/home/wwwroot”,那么目录“/home/wwwroot”和“/home/wwwroot1”都可以访问。因此,如果您只想限制对指定目录的访问,请以斜线结束路径名。注:从网上查到的资料来看,open_basedir会对php操作io的性能有很大的影响。研究数据表明,配置了php_basedir的脚本io的执行速度会比不配置时慢10倍甚至更多。请自己测量。用冒号分隔目录。应用于Apache模块时,会自动继承父目录下的open_basedir路径。MySQL安全设置1、MySQL版本的选择在正式的生产环境中,禁止使用4.1系列的MySQL数据库。至少需要5.1.39或以上版本。2、网络和端口配置当数据库只供本地使用时,使用--skip-networking参数禁止监听网络。3、确保运行MySQL的用户是普通用户,比如mysql。注意存放数据的目录权限为mysqlvi/etc/my.cnfuser=mysql4。启用mysql二进制日志。一个时间点vi/etc/my.cnflog_bin=mysql-binexpire_logs_days=75。认证与授权(1)禁止root帐号从网络访问数据库,只允许root帐号从本地主机登录。mysql>grantallprivilegeson*.*toroot@localhostidentifiedby'password'withgrantoption;mysql>flushpriveleges;(2)删除匿名账户和空密码账户mysql>USEmysql;mysql>deletefromuserwhereUser=;mysql>deletefromuserwherePassword=;mysql>deletefromdbwhereUser=;web服务器安全确保运行Nginx或Apache的用户为普通用户,如www,注意存储数据目录的权限为www,防止sql注入if($query_string~*".*[\;'\<\>].*"){return404;}关闭存放上传数据的PHP解析位置等目录~*^/(attachments|data)/.*\.(php|php5)${denyall;}对于Apache:关闭php对图片目录/upload等目录的解析orderallow,denyDenyfrommall木马查杀及防范php木马快速搜索命令grep-r--include=*.php'[^a-z]eval($_POST'/home/wwwroot/grep-r--include=*.php'file_put_contents(.*$_POST\[.*\]);'/home/wwwroot/使用findmtime找出哪些PHP文件被been近两天修改或发现木马时find-mtime-2-typef-name\*.php预防措施:1、采取前期安全措施,如禁用PHP相关功能等2、更改目录和文件属性find-typef-name\*.php-execchomd644{}\;find-typed-execchmod755{}\;chown-Rwww.www/home/wwwroot/www.waitalone.cn3。为了防止跨站感染,需要对虚拟主机目录进行隔离(1)nginx的简单实现方法使用nginx运行多个虚拟主机,用于php.ini的open_basedir配置:open_basedir=。/:tmp:/何me/wwwroot/注意:/home/wwwroot/是所有虚拟主机所在的web路径黑客可以利用任意站点的webshel??l进入/home/wwwroot/目录下的任意位置,对各个虚拟主机危害极大host例如:/data/www/wwwroot目录下有2个虚拟主机。修改php.iniopen_basedir=./:/tmp:/home/wwwroot/www.sinesafe.com:/home/wwwroot/back.sinesafe.com使用户上传webshel??l无法跨目录访问(二)Apache实现方式通过在虚拟机主机配置文件中添加php_admin_valueopen_basedir"/tmp:/home/wwwroot/www.sinesafe.com"来控制跨目录访问
