SharePoint 2007远程文件访问被拒绝CAS

时间:2009-03-19 09:20:26

标签: asp.net security sharepoint moss code-access-security

我在SharePoint 2007中的PageLayout内的ascx中运行代码,该代码访问远程服务器上的文件,即File.Create(“\ servername \ sharename \ folder \ file.txt”)。该代码在SharePoint Web应用程序中运行,该Web应用程序在web.config中将CAS信任设置为“完全”。 File.Create抛出以下异常: -

System.UnauthorizedAccessException的

拒绝访问路径'\\ servername \ sharename \ folder \ file.txt'。

共享对具有完全控制权限的所有人共享,并且NTFS权限设置为具有完全控制权限的所有人。 Web应用程序应用程序池在域帐户下运行,并且具有访问该资源的显式权限(不应该需要这样)。

我在远程计算机上运行了Process Monitor,并且没有在服务器上记录命中。这使我相信这是SharePoint代码访问安全设置的问题。就像我上面所说的那样,web.config中的信任设置为Full。

CAS是否仍然可以阻止远程访问?谁能想到任何其他领域要审查?


更新

更多信息......

我已尝试制作应用程序池帐户管理员,但问题仍然存在。使用相同的方法访问本地计算机上的驱动器时,它工作正常。使用应用程序池帐户在sharepoint之外的SnippetCompiler中运行相同的代码可以正常工作。

希望这会有所帮助,请告诉我您是否可以考虑我可以尝试的更多调查途径或测试。


更新

我不确定这是否会影响问题,但本地服务器正在运行Windows Server 2003,而远程服务器正在运行Windows 2000。


更新

我刚尝试通过网络部件运行代码,它运行正常。我在项目中使用的文件结构失败如下: -

wss
 - VirtualDirectories
   - SharePointWebApp
     - ...sp web app files
     - .
     - .
   - PageLayoutControls
     - control.ascx
     - .
     - .

然后在IIS中我有以下结构: -

IIS
 - Websites
   - SharePointWebApp (pointing to \wss\VirtualDirectories\SharePointWebApp)
     - PageLayoutControls (virtual directory pointing to \wss\VirtualDirectories\PageLayoutControls)

然后在PageLayouts中,我使用以下内容引用控件: -

<%@ Register TagPrefix="TEST" TagName="MyControl" Src="~/PageLayoutControls/control.ascx" %>
<asp:Content ContentPlaceholderID="PlaceHolderMain" runat="server">
  <TEST:MyControl id="myControl" runat="server"/>
</asp:Content>Let me know if you need more info.

更新

神秘感加深......

当我从SharePoint Web前端服务器上的Internet Explorer(6或7)访问sharepoint站点时,我没有得到异常。

当我从SP Web前端服务器从Mozilla Firefox访问sharepoint站点时,我得到了例外。

当我从任何浏览器远程访问sharepoint站点时,我得到了例外。

此外,只要他们有权访问sharepoint网站,我用来登录网站的用户就没有区别。

有什么想法吗?


更新

嗯,我现在发现如果我远程访问sharepoint站点并且sharepoint站点尝试在本地执行File.Create()(即File.Create(“C:\ temp \ abc.txt”))然后它工作。如果我从sharepoint框访问sharepoint站点并远程执行File.Create()(即File.Create(“\ ServerName \ ShareName \ FolderName \ file.txt”)),那么它可以工作。

只有当我远程访问sharepoint站点并让sharepoint站点尝试远程执行File.Create()时,它才会失败。一种双跳问题。这让我觉得它可能是NTLM / Kerberos问题。

目前,我们正在使用NTLM身份验证运行。

还有其他人遇到过这类问题吗?


更新

是的,我很确定这是一个不允许双跳的NTLM问题。我刚刚更改了sharepoint站点上的身份验证以使用基本身份验证,并且其工作正常。将其更改回集成身份验证,但失败了。

现在决定是否移动服务器场以使用Kerberos或找到解决问题的另一种方法。 : - /


更新

现在就给SPSecurity.RunWithElevatedPrivileges一个镜头。但有一件事是RunWithElevatedPrivileges意味着在这种情况下使用?以前,我只使用它来访问SharePoint中的列表和库,而不是访问文件访问网络。

有什么想法吗?


更新

是的,SPSecurity.RunWithElevatedPrivileges解决了这个问题。 : - )

1 个答案:

答案 0 :(得分:1)

我想知道这是否是双跳问题,并且您的代码尝试以模拟用户身份访问资源,但由于NTLM不会模拟到其他服务器(Kerberos会),因此会失败。

您是否尝试过SPSecurity.RunWithElevatedPrivileges?那将删除模仿(RevertToSelf),然后应用程序池所有者可能只是作为他自己(她自己?),而也许它之前不能。

只是一个想法,应该很容易尝试。