最近遇到一个很有意思的使用环境,操作人员将所有的网站应用内容投放到共享存储里面,并且使用微软的SMB协议将其以CIFS的方式共享出来,使用Windows Server 2008 R2的IIS将其连接起来。在多IIS主机的情况下,实现一次部署,多点生效的效果。

不过在使用的时候遇到了一些问题,在汉语世界里面似乎这样用的环境不多,特别总结一下这样的场景,撰文分享给大家。

错误代码:0x80070003

起初的想法,操作者使用了Windows的映射网络驱动器的方法将UNC路径转换成了一个Windows的盘符,默认的Windows会给整个计算机里的第一个映射Z盘,紧接着,在IIS里面添加这个网站,建个网站的根目录指向到这个Z盘下面的wwwroot文件夹下面,启动一下,浏览后就看到了该错误代码。搜索错误代码,最有用的信息是将其更换成UNC路径而非映射盘符。

错误代码:0x80070005

更换成UNC路径之后,再次浏览后就看到了该错误代码,提示“由于权限不足而无法读取配置文件”。

Figure 1错误提示很明显,权限不足

关于权限相关的问题我自然的想到了procmon工具,和权限有关的肯定逃不过procmon的法眼了!

Figure 2工具呈现出访问被拒绝(Access Denied),path是刚刚更换的unc路径

Figure 3进程选项卡内看到的该进程是由这个IIS资源池下的bbbb用户启动的,这个和我们新建的网站虚拟名称一致

罗列出来的这个IIS APPPOOL\bbbb的用户我们是在Windows传统的用户和用户组下面无法查看到的,而且即便是我们先前映射了Z盘,也是需要口令密码的,这个bbbb用户应该不会走系统层面去找对应的token的,况且机器会有重启,自动更新等操作,新起来之后还要认为的输入用户名和口令(非域环境下),这显然不科学。

网上搜来搜去有些结果,归类如下:

  • 如果使用的是2003系统可以用一个vbs命令来获取到iusr用户的密码,创建网站的时候可以这样来填写认证信息,但是2008系统下面已经不能这样查看。
  • 使用subst创建虚拟映射盘符,来欺骗2008认为这个是本地硬盘而非一个UNC路径,但是这个尝试之后又会回到起初的那个0x80070003错误。
  • 还有的尝试使用mklink创建一个符号连接的方式映射到本地磁盘的固定目录,结果这个也会回到0x80070003错误。

从上面的经历来看,大家的思路有两个,一个是欺骗IIS、一个是使用破解的用户名密码去进行验证。

更换英文关键字接的搜索,突然在一个微软工程师anilr的回帖中找到了问题的解决办法,https://forums.iis.net/post/1905350.aspx

他说继续保持UNC路径,在"connect as"中输入用户名密码进行校验即可。

这个“connect as”对应中文应该是个什么呢?直译叫做“连接为”,这个好像在新建网站的时候见到过。

Figure 4添加网站的时候可以看到连接为,点开始后和凭证有关!

对于新网站可以这样操作,对于已经有的网站该怎么处理呢?

Figure 5通过搜索IIS的内置帮助,看看到底哪些地方会出现“连接为”,发现有物理路径这样的关键字出现

Figure 6顺而在网站的高级设置里面找到了物理路径凭据,下面的解释有需要填写用户名密码这类的要求。

根据需要在物理路径凭据下面输入可以访问那个UNC路径的用户名和密码。

这里补充说明一下,既然还是和微软的SMB协议有关,登陆验证也是基于NTLM的相同用户验证的策略,所以这里我们需要在IIS节点上创建一个和文件服务器用来共享这个UNC路径一致的用户。

否则如果你即便输入了映射时候的对端密码账号也是无效的,因为你本地IIS计算机节点上并没有这个用户。

Figure 7输入和对端一样的用户名密码之后点击确定,生效!

再次浏览问题全无,运行正常。

此时我们再请出Procmon看看。

Figure 8通过查看第一条访问文件的权限,我们看到Impersonating(伪装用户)已经是这个IIS节点上的有权限访问该UNC路径的用户了 。

至此,所有的疑惑已经解决,使用到的知识点都是基本的Windows操作原理,是从系统工作人员的角色解决WEB程序的报错的一个有意思的案例!

-=EOB=-

当web.config文件放置在共享目录下(UNC),启动IIS会提示有错误信息500.19,伴随有错误代码0x80070003和错误代码0x80070005的解决办法的更多相关文章

  1. Web.config文件 详解

    一.认识Web.config文件Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式), ...

  2. .net中Web.config文件的基本原理及相关设置

    11.7  使用web.config配置文件 Web配置文件web.config是Web 应用程序的数据设定文件,它是一份 XML 文件,内含 Web 应用程序相关设定的 XML 标记,可以用来简化  ...

  3. HTTP 错误 500.19 – Internal Server Error web.config 文件的 system.webServer/httpErrors 节中不允许绝对物理路径“C:\inetpub\custerr”[转]

    给ASP或者ASP.NET等需要配置IIS服务器的过程中,很可能会遇到以下两种错误.尤其是用Win7系统的,配置IIS7.0版本比用XP系统配置IIS5.1版本而言要复杂复杂一些.当同时需要配置ASP ...

  4. 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)

    原文:在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据) 我们都知道,在asp.net中修改 ...

  5. DataProtectionConfigurationProvider加密web.config文件

    web.config 文件中经常会包含一些敏感信息,最常见的就是数据库连接字符串了,为了防止该信息泄漏,最好是将相关内容加密. Aspnet_regiis.exe命令已经提供了加密配置文件的方法,系统 ...

  6. C#中web.config文件详解

    C#中web.config文件详解 一.认识Web.config文件 Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NE ...

  7. 微软ASP.NET网站部署指南(3):使用Web.Config文件的Transformations

    1. 综述 大多数程序里都会在Web.config里设置參数,而且在部署的时候须要更改. 每次都手工更改这些配置非常乏味,也easy出错. 该章节将会告诉你假设通过自己主动化更新Web.config文 ...

  8. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  9. Web.Config文件中使用configSource

    我们都知道,在asp.net中修改了配置文件web.config后,会导致应用程序重启,所有会话(session)丢失.然而,应用程序的配置信息放在配置文件里是最佳选择,在后台修改了配置后导致所有会话 ...

随机推荐

  1. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  2. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

  3. python核心编程第二版练习题答案

    2-5 #写一个while循环,输出整型为0~10 a=0while a<11: print a a+=1 #写一个for循环重复以上操作 for i in range(11): print i ...

  4. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  5. Web大前端时代之:HTML5+CSS3入门系列

    准备来一波新技术,待续.... Old: 联系源码:https://github.com/dunitian/LoTHTML5 文档下载:https://github.com/dunitian/LoTD ...

  6. SQL Server 无法连接到服务器。SQL Server 复制需要有实际的服务器名称才能连接到服务器。请指定实际的服务器名称。

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html SQL性能优化汇总篇:http://www.cnblogs.com/dunit ...

  7. Linux 开机时网络自动连接

      简单版本: cd /etc/sysconfig/network-scripts/ vi ifcfg-enoXXX 输入:reboot重启 或者输入:service network restart ...

  8. Phoenix综述(史上最全Phoenix中文文档)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...

  9. iOS开发之ReactiveCocoa下的MVVM(干货分享)

    最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...

  10. JS魔法堂:不完全国际化&本地化手册 之 理論篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...