Rover12421's Blog

The End.

Windows Server 2003 下的 Apache 服务器安全设置

        在自己的2003 Server 机器上架了Apache,架好了就一直没管理,现在才发现有多恐怖,只要弄个WebShell上去,这机器就算完完了。下面是我的处理方法,可能并不够完美,但是比以前就要好多了。
       1.修改Apache配置文件http.conf

?View Code APACHE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<VirtualHost 127.0.0.1:80>
    ServerName www.rover12421.cn
    ServerPath E:/htdocs/rover12421
    DocumentRoot E:/htdocs/rover12421
    php_admin_value open_basedir "E:/htdocs/rover12421;E:/php/upload_temp"
</VirtualHost>
 
<Directory "E:/htdocs/rover12421">
    Options Indexes FollowSymLinks
    AllowOverride all
    Options -Indexes
    Order Deny,Allow
    Deny from all
</Directory>

在虚拟主机配置中添加了php_admin_value open_basedir 字段,这是来限制着个虚拟主机只能在他自己的目录里。这里这种了两个目录,第一个是虚拟主机的目录,一个是上传文件的临时目录,第二个也要加上,否则不能上传文件。
Options -Indexes,这个以前就设置了,不允许列目录

       2.修改php.ini配置文件
打开php.ini文件,查找disable_functions,这个是用来禁止某些函数的,我们需要把一些危险的函数禁止掉。

1
disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,error_log,ini_alter,ini_restore,dl,pfsockopen,syslog,readlink,symlink,popen,stream_socket_server,putenv

我这里去掉了 ini_set() 这个函数,这是因为我的RSS聚合需要使用。
下面一些危险函数的说明:

?View Code TEXT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
phpinfo()
功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中
 
passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高
 
exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高
 
system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高
 
chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高
 
scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中
 
chgrp()
功能描述:改变文件或目录所属的用户组。
危险等级:高
 
chown()
功能描述:改变文件或目录的所有者。
危险等级:高
 
shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高
 
proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。
危险等级:高
 
proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。
危险等级:高
 
error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。
危险等级:低
 
ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。
危险等级:高
 
ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。
危险等级:高
 
ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。
危险等级:高
 
dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
危险等级:高
 
pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。
危险等级:高
 
syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。
危险等级:中
 
readlink()
功能描述:返回符号连接指向的目标文件内容。
危险等级:中
 
symlink()
功能描述:在 UNIX 系统中建立一个符号链接。
危险等级:高
 
popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。
危险等级:高
 
stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中
 
putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。
危险等级:高

       3.禁用或修改危险组件
1>WScript.Shell组件:regsvr32 /u %windir%\SYSTEM32\wshom.ocx 2>FileSystemObject组件:regsvr32 /u %windir%\SYSTEM32\scrrun.dll
3>Shell.Application组件:regsvr32 /u %windir%\SYSTEM32\shell32.dll
Shell.Application组件就这样是不能起作用的,需要操作注册表。
把[HKEY_LOCAL_MACHINE\SOFTWARE\Classes]下的[Shell.Application][Shell.Application.1][13709620-C279-11CE-A49E-444553540000]全部删除或改名,主要要备份哦,以便到需要使用的时候可以恢复。
除此之外还可以禁止guests用户执行cmd.exe的命令是: cacls %windir%\system32\cmd.exe /e /d guests
至于组件的文件删不删除,就看你自己认为了,删除前千万要备份。

Comments