环境配置情况:
apache安装目录:d:\www-s\apache
php目录:d:\www-s\php5
mysql目录:d:\www-s\mysql
网站根目录:d:\www\htdocs
专门为运行Apache运行所使用的用户:apache-u(可不隶属于任何用户组)
PS:这里只说Windows下Apache应用环境相关的目录权限设置,至于其他基本的服务器目录权限设置就不提啦!
Windows下Apache应用环境塔建目录安全设置操作步骤:
配置目录权限
Apache所在的根目录(也就是D盘),只需要读取的权限,并且这个读取权限不需要继承到子目录与文件(可以在权限设置高级里选择——应用到:只有该文件夹——权限:列出文件夹/读取数据, 读取属性,读取扩展属性,读取权限——确定)。
Apache安装目录的上级目录(d:\www-s),需要“读取”的权限(和根目录D盘的权限雷同)。
Apache安装目录,需要“列出文件夹目录”和“读取”的权限(可以为了方便使用继承)。
Apache安装目录下的子目录权限设置
“bin”和“modules”目录需要“读取和运行”、“列出文件夹和目录”、“读取”的权限。
“logs”目录需要“列出文件夹和目录”、“读取”、“写入”的权限(若Apache安装目录的权限使用啦继承,可只添加“写入”权限即可)。
到这里Apache的权限已经设置完毕,接下来设置PHP的权限
PHP目录(PHP5)可简单的设置为“读取和运行”、“列出文件夹和目录”、“读取”的权限。
Mysql目录下的bin文件夹和文件(mysql)需要为添加apache用户的“遍历文件夹和运行文件”、“列出文件夹和读取数据”的权限(可以在权限高级设置里找到)。
到这里Apache+Mysql+Php已经基本可以使用,接着配置网站根目录权限
网站根目录(www\htdocs)的上级目录www需要读取(“列出文件夹和读取数据”、“读取属性”、“读取扩展属性”、“读取权限”)的权限(和Apache的上级目录权限雷同,不需要继承到子目录和文件中去)。
网站根目录(htdocs)可简单的设置“读取”权限就可以啦(然后可以根据需要对缓存文件夹设置可写权限)。
到这里Apache+PHP+Mysql的环境受限制权限设置基本完成。
为Apache服务启用受限制用户
进入服务管理器(Services.msc,或者“我的电脑——属性——管理——服务”),找到Apache的服务项(Apache2.2),设置属性,登录用户选择受限用户(Apache-u)输入受限用户的密码,应用,确定。
这里“确定”之后一般会有提示(已授予账户.\apache-u“以服务方式登录”的权利)。这个提示相当于在组策略(开始->管理工具->本地安全策略,或者使用gpedit.msc打开)中的“用户权利分配”中选择“作为服务登陆”,添加apache-u用户。
可在任务管理器中查看httpd.exe进程的用户名为apache-u,使用PHP+Mysql的程序都可正常运行。
到这里已经完成啦“Windows下Apache应用环境目录权限”的受限制使用设置。
补充3:
可以在目录(具有可写权限的)下建个 .htaccess 内容写上:
RewriteEngine On
Order Allow,Deny
Deny from all
<files ~ “.(css|js)$”>
Allow from all
</files>
css和js为允许的文件扩展类型!
补充2:
1.Apache的权限设置错误提示
apache目录,php目录,网站目录中的一个权限设置不够都不能正常启动Apache服务,一般提示为:
Windows 不能再 本地计算机 启动 Apache2.2。有关更多信息,查阅系统事件日志。如果这是非 Microsoft服务,请与服务厂商联系,并参与特定服务错误代码 1。
查看系统事件日志中的提示为:
Apache2.2 服务因 1 (0×1) 服务性错误而停止。
若是php的权限配置错误会在应用程序事件日志中有记录。
2.另外Mysql的目录权限配置错误,不会对正常启动Apache服务造成影响,但不能网站程序使用Mysql服务(PHPINFO中显示并没有加载Mysql模块)。
补充1:
这个东东在本地机子上用来做测试基本是不用理会这些权限的,因为默认是使用系统用户来启动这个Apache服务的!不过若是暴露在外网就很危险啦!
安全是全方面的架构考虑,这里说的仅仅是冰山一角,不能以点盖面!
发现有遗漏的地方欢迎指正。。
我认为目前Linux的家庭用户比较少,在用户量方面Linux是敌不过Windows的,因为大部分游戏,应用软件等都是基于win平台VB,VC,C#等开发的,而且目前电脑初学者学习的教材方面大部分都是关于Windows的,至少这几年,十几年内微软应该还是win霸主。在Linux挖掘出一个漏洞,能通过利用此漏洞广为传播病毒的计算机感染数量很少,所以Linux的漏洞价值不是很高。而且玩Linux的高手我认为大部分是技术型的,不屑于去追求那些蝇头小利以及炫耀什么,乐于开源以及分享自己最新的研究成果,这个原因也造就了如今Linux的安全性。
Windows只要安全细节做得好,入侵成功的几率是很低的。好了,废话不多说了,下面进入正文,谈谈我对web服务器安全防护的经验和方案。
这个安全防护方案正是我博客网站www.9170.org采用的防护方案,还有更高的防护方案以后再说(我提供一种思路,比如:一个外网IP开放VPN和NAT端口转发,然后路由器里面的一台计算机连接VPN,把80端口转发到内网,内网又有一个MySQL内网服务器)
方案如下:
系统平台:
Win2003sp2企业版,打上所有微软发布的安全更新。
主要硬件:Intel双核CPU,512M内存
优化设置:
关闭默认共享$admin,$c等,代码如下:
net share c$ /delete
net share admin$ /delete
echo .. delshare.reg .......
echo Windows Registry Editor Version 5.00> c:\delshare.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]>> c:\delshare.reg
echo "AutoShareWks"=dword:00000000>> c:\delshare.reg
echo "AutoShareServer"=dword:00000000>> c:\delshare.reg
echo .. delshare.reg .....
regedit /s c:\delshare.reg
echo .. delshare.reg ....
del c:\delshare.reg
新建文本文档另存为.bat文件运行.
尽量不安装任何应用软件(如:迅雷,QQ等)安装好杀毒软件以及防火墙。
安装winrar,关闭多余系统服务项(如自带的防火墙,计划任务,打印机等。注意:请根据服务器实际情况来关闭,如果不懂系统后台服务不建议去修改。可以参考http://baike.baidu.com/view/685551.htm)
开机自启的注册表键值除输入法外一般都可以删除。
系统安全设置
磁盘都使用NTFS格式,如果是FAT32,请转换。命令格式如:convert c:/fs:ntfs(命令默认是C盘,如果是别的分区,请修改盘符)对根目录的权限值保留administrator、system完全权限,如图所示:
Web根目录只保留administrator、system、以及用来启动该web的IIS用户完全访问权限。如图所示:
Web根目录只保留administrator、system、以及用来启动该web的IIS用户完全访问权限。如图所示:
CMD.EXE,NET.EXE,NET1.EXE,以及回收站目录只保留administrator和system的完全权限,如图所示:
删除安装IIS后生成的intepub目录。目录安全权限设置完毕。
PHP安全设置
由于此文说的是安全,跳过PHP安装步骤。编辑PHP配置文件,用文本编辑器打开php.ini。做如下修改:
safe_mode = On
disable_functions = passthru, exec, shell_exec, system, fopen, mkdir, rmdir, chmod, unlink, dir, fopen, fread, fclose, fwrite, file_exists, closedir, is_dir, readdir, opendir, fileperms, copy, unlink, delfile, popen, COM
PHP使用network service这个用户组启动的,所以在PHP的安装目录我们需要给他权限,如图所示:
至此PHP的安全设置已经完毕。
MySQL安全设置
安装好MySQL和phpmyadmin后使用root账户登录,修改root为强密码,最好是数字+大写+小写,如果记得住特殊符号也行。然后点权限,添加新用户新建一个用户,创建与用户同名的数据库并授予所有权限,不给予特殊权限。网站连接MySQL的用户就使用这个新建的,千万不要用root!如图所示:
上传目录无执行可读取。
关闭未知的扩展等,最好在每个网站都用一个独立用户启动,可以命名为IIS_***,对应每一个网站根目录的权限,IIS允许匿名访问,这样可以防止别的网站跨目录访问
防护CC和DDOS攻击
攻击的原理就不说了,搜索引擎搜索一下就知道了,一般的CC攻击都是WEB动态页面发起的,而且会在短时间新建很多TCP端口连接,根据这个特征,我们可以安装一个DDOS防火墙,设置规则,我使用的是冰盾,如图所示是我设置的防护CC攻击规则。
在端口过滤里面可以设置流量
这样设置完以后就能防止DDOS以及CC攻击。
而且能防止扫描软件扫描WEB页面和暴力破解后台登陆(因为做了连接数过多屏蔽,一般的扫描和破解都是多线程开放很多端口同时进行,工具扫描的连接数过多就自动屏蔽了,增大安全性能)
这类原因一般是 Serv-U程序错误,或密码被黑客修改了,注意检查后门。
修复方法:
这个是Serv-u的本地管理密码,如果你忘了,先停掉Serv-U服务,再去Serv-u的安装目录,找到ServUDaemon.ini这个文件,有个local password的密码串,把等号后面加过密的密码删掉,再重新启动Serv-U服务,就没有密码了