以下是针对win2003 服务器下防范PHP木马的小计,如有不妥之处,恳请批评指出,谢谢
一、IIS的相关设置:
删除默认建立的站点的虚拟目录,停止默认web站点,删除对应的文件目录c:inetpub,
配置所有站点的公共设置,设置好相关的连接数限制,带宽设置以及性能设置等其他设置。
配置应用程序映射,删除所有不必要的应用程序扩展,只保留asp,php,cgi,pl,aspx应用程序扩展,如果环境是php环境只保留php扩展,
其他的全部删除。
对于php和cgi,推荐使用isapi方式解析,用exe解析对安全和性能有所影响。用户程序调试设置发送文本错误信息给客户。
对于数据库,尽量采用mdb后缀,不需要更改为asp,可在IIS中设置一个mdb的扩展映射,将这个映射使用一个无关的dll文件
如C:\WINNT\system32\inetsrvssinc.dll来防止数据库被下载。设置IIS的日志保存目录,调整日志记录信息。
设置为发送文本错误信息。修改403错误页面,将其转向到其他页,可防止一些扫描器的探测。
另外为隐藏系统信息,防止telnet到80端口所泄露的系统版本信息可修改IIS的banner信息,
可以使用winhex手工修改或者使用相关软件如banneredit修改。
对于用户站点所在的目录,在此说明一下,用户的FTP根目录下对应三个文件佳,wwwroot,database,logfiles,分别存放站点文件,
数据库备份和该站点的日志。
如果一旦发生入侵事件可对该用户站点所在目录设置具体的权限,图片所在的目录只给予列目录的权限,
程序所在目录如果不需要生成文件(如生成html的程序)不给予写入权限。
因为是虚拟主机平常对脚本安全没办法做到细致入微的地步,更多的只能在方法用户从脚本提升权限:
二、PHP的安全设置:
默认安装的php需要有以下几个注意的问题:
C:\winnt\php.ini(具体视你的路径而定)只给予users读权限即可。在php.ini里需要做如下设置:
#######################################################################################
Safe_mode=on
php的safe_mode功能对很多函数进行了限制或禁用了,能在很大程度解决php的安全问题。
这样就打开了safe_mode功能。象一些能执行系统命令的函数shell_exec()和``被禁止,
其它的一些执行函数如:exec(), system(), passthru(), popen()将被限制只能执行
safe_mode_exec_dir指定目录下的程序。如果你实在是要执行一些命令或程序,找到以下:
safe_mode_exec_dir =
指定要执行的程序的,如:
safe_mode_exec_dir = 路径
然后把要用的程序拷到 路径 目录下,这样,象上面的被限制的函数还能执行该目录里的程序。
#########################################################################################
register_globals = Off
allow_url_fopen = Off
display_errors = Off
magic_quotes_gpc = On [默认是on,但需检查一遍]
open_basedir = web目录(这个可以选择留空,如果出现附件不能上传,可以先注释此处)
disable_functions =passthru,exec,shell_exec,system,phpinfo,get_cfg_var,popen,chmod,eval,phpinfo
disable_functions =
在=后面加上要禁止的函数,多个函数用","隔开。
#############################################################################################
默认设置com.allow_dcom = true修改为false[修改前要取消掉前面的;]
#############################################################################################
三、MySQL安全设置:
如果服务器上启用MySQL数据库,MySQL数据库需要注意的安全设置为:
删除mysql中的所有默认用户,只保留本地root帐户,为root用户加上一个复杂的密码。
赋予普通用户update delete alert create drop权限的时候,并限定到特定的数据库,尤其要避免普通客户拥有对mysql数据库操作的权限。
检查mysql.user表,取消不必要用户的shutdown_priv,relo ad_priv,process_priv和File_priv权限,
这些权限可能泄漏更多的服务器信息包括非mysql的其它信息出去。
可以为mysql设置一个启动用户,该用户只对mysql目录有权限。设置安装目录的data数据库的权限(此目录存放了mysql数据库的数据信息)。
对于mysql安装目录给users加上读取、列目录和执行权限。
四、Serv-u安全问题:
安装程序尽量采用最新版本,避免采用默认安装目录,设置好serv-u目录所在的权限,设置一个复杂的管理员密码。
修改serv-u的banner信息,设置被动模式端口范围(4001—4003)
在本地服务器中设置中做好相关安全设置:包括检查匿名密码,禁用反超时调度,拦截“FTP bounce”攻击和FXP,对于在30秒内连接超过3次的用户拦截10分钟。
域中的设置为:要求复杂密码,目录只使用小写字母,高级中设置取消允许使用MDTM命令更改文件的日期。
更改serv-u的启动用户:在系统中新建一个用户,设置一个复杂点的密码,不属于任何组。将servu的安装目录给予该用户完全控制权限。建立一个FTP根目录,需要给予这个用
户该目录完全控制权限,因为所有的ftp用户上传,删除,更改文件都是继承了该用户的权限,否则无法操作文件。另外需要给该目录以上的上级目录给该用户的读取权限,
否则会在连接的时候出现530 Not logged in, home directory does not exist。比如在测试的时候ftp根目录为d:soft,必须给d盘该用户的读取权限,为了安全取消d盘其
他文件夹的继承权限。而一般的使用默认的system启动就没有这些问题,因为system一般都拥有这些权限的。
五、操作系统方面,
我把所有的驱动器都设置成了administrators和system有所有访问权限,users只对c盘有访问权限,去掉users对c盘的写入和修改权限,其他用户组都去掉。
然后对C盘的几个殊目录分别设置权限,比如C:\Documents and Settings\All Users\Application Data目录,C:\WINDOWS\system32\inetsrv目录,还有cmd.exe ,
command.com除administrators和system用户组外没有任何访问执行权限。另外,最好不要用FTP和3389,因为口令都是明文传输,可以嗅探破解。
最好用有加密方式的同等功能的软件替代
对溢出攻击的安全防范:
关闭139端口,停掉icp/ip netbios服务。
在本地连接的属性窗口中tcp/ip协议中的高级选项里"禁用tcp/ip上的netbios(s)"因为很多溢出都是利用的这个通道
六、安装杀毒软件和防火墙(软件使用,按照你熟悉的软件去操作)
一、IIS的相关设置:
删除默认建立的站点的虚拟目录,停止默认web站点,删除对应的文件目录c:inetpub,
配置所有站点的公共设置,设置好相关的连接数限制,带宽设置以及性能设置等其他设置。
配置应用程序映射,删除所有不必要的应用程序扩展,只保留asp,php,cgi,pl,aspx应用程序扩展,如果环境是php环境只保留php扩展,
其他的全部删除。
对于php和cgi,推荐使用isapi方式解析,用exe解析对安全和性能有所影响。用户程序调试设置发送文本错误信息给客户。
对于数据库,尽量采用mdb后缀,不需要更改为asp,可在IIS中设置一个mdb的扩展映射,将这个映射使用一个无关的dll文件
如C:\WINNT\system32\inetsrvssinc.dll来防止数据库被下载。设置IIS的日志保存目录,调整日志记录信息。
设置为发送文本错误信息。修改403错误页面,将其转向到其他页,可防止一些扫描器的探测。
另外为隐藏系统信息,防止telnet到80端口所泄露的系统版本信息可修改IIS的banner信息,
可以使用winhex手工修改或者使用相关软件如banneredit修改。
对于用户站点所在的目录,在此说明一下,用户的FTP根目录下对应三个文件佳,wwwroot,database,logfiles,分别存放站点文件,
数据库备份和该站点的日志。
如果一旦发生入侵事件可对该用户站点所在目录设置具体的权限,图片所在的目录只给予列目录的权限,
程序所在目录如果不需要生成文件(如生成html的程序)不给予写入权限。
因为是虚拟主机平常对脚本安全没办法做到细致入微的地步,更多的只能在方法用户从脚本提升权限:
二、PHP的安全设置:
默认安装的php需要有以下几个注意的问题:
C:\winnt\php.ini(具体视你的路径而定)只给予users读权限即可。在php.ini里需要做如下设置:
#######################################################################################
Safe_mode=on
php的safe_mode功能对很多函数进行了限制或禁用了,能在很大程度解决php的安全问题。
这样就打开了safe_mode功能。象一些能执行系统命令的函数shell_exec()和``被禁止,
其它的一些执行函数如:exec(), system(), passthru(), popen()将被限制只能执行
safe_mode_exec_dir指定目录下的程序。如果你实在是要执行一些命令或程序,找到以下:
safe_mode_exec_dir =
指定要执行的程序的,如:
safe_mode_exec_dir = 路径
然后把要用的程序拷到 路径 目录下,这样,象上面的被限制的函数还能执行该目录里的程序。
#########################################################################################
register_globals = Off
allow_url_fopen = Off
display_errors = Off
magic_quotes_gpc = On [默认是on,但需检查一遍]
open_basedir = web目录(这个可以选择留空,如果出现附件不能上传,可以先注释此处)
disable_functions =passthru,exec,shell_exec,system,phpinfo,get_cfg_var,popen,chmod,eval,phpinfo
disable_functions =
在=后面加上要禁止的函数,多个函数用","隔开。
#############################################################################################
默认设置com.allow_dcom = true修改为false[修改前要取消掉前面的;]
#############################################################################################
三、MySQL安全设置:
如果服务器上启用MySQL数据库,MySQL数据库需要注意的安全设置为:
删除mysql中的所有默认用户,只保留本地root帐户,为root用户加上一个复杂的密码。
赋予普通用户update delete alert create drop权限的时候,并限定到特定的数据库,尤其要避免普通客户拥有对mysql数据库操作的权限。
检查mysql.user表,取消不必要用户的shutdown_priv,relo ad_priv,process_priv和File_priv权限,
这些权限可能泄漏更多的服务器信息包括非mysql的其它信息出去。
可以为mysql设置一个启动用户,该用户只对mysql目录有权限。设置安装目录的data数据库的权限(此目录存放了mysql数据库的数据信息)。
对于mysql安装目录给users加上读取、列目录和执行权限。
四、Serv-u安全问题:
安装程序尽量采用最新版本,避免采用默认安装目录,设置好serv-u目录所在的权限,设置一个复杂的管理员密码。
修改serv-u的banner信息,设置被动模式端口范围(4001—4003)
在本地服务器中设置中做好相关安全设置:包括检查匿名密码,禁用反超时调度,拦截“FTP bounce”攻击和FXP,对于在30秒内连接超过3次的用户拦截10分钟。
域中的设置为:要求复杂密码,目录只使用小写字母,高级中设置取消允许使用MDTM命令更改文件的日期。
更改serv-u的启动用户:在系统中新建一个用户,设置一个复杂点的密码,不属于任何组。将servu的安装目录给予该用户完全控制权限。建立一个FTP根目录,需要给予这个用
户该目录完全控制权限,因为所有的ftp用户上传,删除,更改文件都是继承了该用户的权限,否则无法操作文件。另外需要给该目录以上的上级目录给该用户的读取权限,
否则会在连接的时候出现530 Not logged in, home directory does not exist。比如在测试的时候ftp根目录为d:soft,必须给d盘该用户的读取权限,为了安全取消d盘其
他文件夹的继承权限。而一般的使用默认的system启动就没有这些问题,因为system一般都拥有这些权限的。
五、操作系统方面,
我把所有的驱动器都设置成了administrators和system有所有访问权限,users只对c盘有访问权限,去掉users对c盘的写入和修改权限,其他用户组都去掉。
然后对C盘的几个殊目录分别设置权限,比如C:\Documents and Settings\All Users\Application Data目录,C:\WINDOWS\system32\inetsrv目录,还有cmd.exe ,
command.com除administrators和system用户组外没有任何访问执行权限。另外,最好不要用FTP和3389,因为口令都是明文传输,可以嗅探破解。
最好用有加密方式的同等功能的软件替代
对溢出攻击的安全防范:
关闭139端口,停掉icp/ip netbios服务。
在本地连接的属性窗口中tcp/ip协议中的高级选项里"禁用tcp/ip上的netbios(s)"因为很多溢出都是利用的这个通道
六、安装杀毒软件和防火墙(软件使用,按照你熟悉的软件去操作)