e博士看台(5):IIS服务器权限和NTFS权限是一回事吗

网络通信

  很多人都有这样一个错误的认识:要让IIS运行ASP文件就必须给予它们“运行”的NTFS权限。

  其实只要给予“读取”的NTFS权限就行了。为什么这样说呢?要回答这个问题,我们首先要搞清楚“NTFS权限”与“IIS服务器权限”之间的区别。

  “IIS服务器权限”直观地说就是站点或虚拟目录属性窗口中“主目录”标签里的读取、写入、日志访问等项权限(图1),NTFS权限是操作系统级的,它作用于整个文件系统,是更高层次的控制,而IIS服务器权限是应用程序级的,是IIS所特有的,作用于IIS站点虚拟目录;NTFS权限可以针对不同的用户设置不同的权限,但IIS服务器权限是针对所有用户的。

  从图2可以看出,在IIS检查了IIS服务器权限之后还要检查相应的NTFS权限,在默认情况下访问者的身份是IUSR或IWAM用户,他们都被认为是Guests组的成员,但同时他们也是内置的Users和Authenticated Users组中的成员,所以你在IIS站点的文件目录NTFS权限中可能看不到明确的IUSR和IWAM账号,但可以发现会有Users组,当你的站点主目录不是默认的文件目录时,特别要注意这个目录的NTFS权限中有无Users组及相应的权限,不然访问者将会遇到一个要求他输入用户名和密码的对话框。

  理解了上面二者的区别,大家也许还有疑问:这也不能说明ASP文件不需要“运行”类的NTFS权限嘛!是的,博士我还没有说明IIS处理ASP文件的过程,有这个疑问很正常。

  其实IIS执行ASP时,它是首先把这个ASP文件从磁盘上读取进来,然后交由asp.dll进行处理的,所以在这里ASP只要有读取的NTFS权限就行了,并不需要NTFS的运行权限,但需要为这类文件赋予可执行的“IIS服务器权限”(在图1中选中“读取”项和选择“执行许可”下的“纯脚本”项,默认情况下就是这样的),其实对ASP这种映射到某个DLL文件的文件来说只需要赋予读取的NTFS权限,没有必要给它们运行的NTFS权限,这样就会最大限度地降低风险。也许你现在要问到底哪些文件需要给予“运行”的NTFS权限呢?如果你的应用程序中包含有DLL或EXE等可执行文件,那么你就需要为它们给予“运行”的权限,一般来说,DLL文件就是ISAPI过滤器或ISAPI扩展的表现形式,而EXE文件则是CGI程序的表现。