Warning: curl_exec() has been disabled for security reasons in /pub/host/sunboyu/sunboyu/www/wp-includes/http.php on line 1022
IIS安全机制详解 » Blog Archive 一个程序猿 孙小一,孙小二,PHP,MYSQL,LINUX,APACHE,原创技术,扯淡

IIS安全机制详解

作者 : admin 于 2008-11-04 18:11:33 标签: ,
2008
11-4

2005年前后曾经风靡过一阵旁注入侵,其利用的原理是所有的iis站点使用了统一的进程账户,而对所有站点设置了同样的权限,因此,当你有一个站点的权限的时候,就等于拥有了所有站点的权限。

在虚拟主机上,这么设置,那生意真的是没法做了,因此,基于iis的虚拟主机都用了独立的iis进程账户进行权限的隔离。

现简述安全原理:

现有 site1,site2,site3 三个站点,三个站点目录结构如下

D:\WWW\site1  D:\WWW\site2   D:\WWW\site3

默认会使用 IUSR_SUN 这个账户作为Internet来宾账户,而 IIS_WPG作为IIS工作进程组。那么会在D:\WWW 这个文件夹上使IUSR_SUN有用读写执行脚本的权限,而三个站点的的匿名访问用户均为IUSR_SUN。这样,虽然脚本(asp,php等)运行在D:\WWW\site1目录下,但对D:\WWW\site2   D:\WWW\site3都是有读写权限的。

如果服务器上的站点是一个公司的,那样还好,如果是给不同的用户来用,问题不言而喻。

因此,我们要用独立的账户和权限来运行三个站点。

我们设置三个用户 IUSR_SUN_1  IUSR_SUN_2   IUSR_SUN_3 ,只归入guests组(如果属于多个组,windows会按照权限的交集来计算)三个用户分别作为 D:\WWW\site1  D:\WWW\site2   D:\WWW\site3的匿名访问用户。然后分别给 D:\WWW\site1 IUSR_SUN_1用户读写等权限,依次设置。

这样,每个网站的用户权限被禁锢在自己的文件夹(站点)下,就保证了站点权限的隔离。

------附录------

在设置一个站点的时候,我按照最严格的权限进行设定,但发现一个问题,有些PHP的脚本不能执行。后来发现,当使用require(”./a.php”),这种linux风格的路径的时候,会出问题。后查资料发现,这样访问的时候,脚本需要对本层目录的上一层拥有读的权限,所以,我们在独立设置对上层有个读的权限,这样问题就可以解决。

这个问题发生在ThinkSNS程序中,他们大量使用了linux风格的路径包含方式,因此在权限严格的iis上就跑不动了。而discuz的程序大都不使用这种方式,在兼容性上下了很大功夫。

发表评论




XHTML:你可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(若看不到验证码,请重新加载页面。)