经典 ASP - 文件移动 IIS 的权限被拒绝

Posted

技术标签:

【中文标题】经典 ASP - 文件移动 IIS 的权限被拒绝【英文标题】:Classic ASP - Permission Denied on file move IIS 【发布时间】:2014-04-17 14:57:02 【问题描述】:

我的 Windows 权限有点问题,我有一个脚本(不是我写的),它将文件上传到本地临时区域,然后被移动并重命名为 UNC 共享。

我试过了:

创建一个具有域权限的域用户,在连接身份和目录安全 - 身份验证中使用该用户,并且在目标源上作为读/写用户。我已使用该用户登录到测试服务器,并验证该用户可以写入源位置,它可以。

但我收到错误消息:

Microsoft VBScript 运行时错误“800a0046”

权限被拒绝

/Admin/News/insert.asp,第 56 行

尝试执行移动的有问题的代码是(尽管这可能与安全问题无关):

    if fileUploaded then
    dim fs,f,savedFileLocation
    set fs=Server.CreateObject("Scripting.FileSystemObject")
    savedFileLocation = server.MapPath("/Files") & "\Briefings\" & right("00" & day(now()),2) & right("00" & month(now()),2) & year(now()) & " - " & fileName
    if not fs.FileExists(savedFileLocation) then
        Set f=fs.GetFile(pathToFile)
        f.Move(savedFileLocation)
    end if
    set f=nothing
    set fs=nothing
end if

感谢任何指点,我发现 IIS 的安全权限是一场噩梦!

【问题讨论】:

可以帮忙,但是您运行的是哪个版本的 IIS,因为版本之间的答案不同?但是基本上看一下匿名账户通常设置为IUSR_machinename,然后尝试给这个账户权限。 感谢您如此迅速地响应,在 Server 2003 上运行 IIS6。这是否适用于 UNC 路径,因为 IUSR 帐户在源服务器上不可用 您可以在 IIS 网站的 Document Security 中将匿名帐户设置为域帐户,然后将该帐户权限授予您的 UNC 路径。请注意您授予它的访问权限,因为它将用作网站的匿名帐户,如果未正确锁定,可能会危及安全。 谢谢 - 我会试试看效果如何。 【参考方案1】:

IIS6 支持应用程序池,您可以使应用程序池作为指定用户帐户而不是 IUSR 运行。如果您手边有一个 AD 域,那么这可以是一个域帐户,并且共享很简单。如果您没有使用 AD 域,那么您仍然可以解决这个问题 - 只需在两个框上创建一个具有相同用户名和密码的帐户,NTLM 就会自动工作。

自从我接触 IIS6 已经有一段时间了,但我似乎记得 IIS6 是作为 NT AUTHORITY\NETWORK SERVICE 开箱即用的。如果是这种情况,并且您有一个方便的域,您还可以授予神奇的 DOMAIN\MACHINENAME$ 帐户权限,它也应该可以工作。

【讨论】:

【参考方案2】:

尝试在您的站点中打开此 UNC 文件夹/共享的 IIS 属性(我猜它被设置为虚拟文件夹),并查看您的用户是否有写入权限。基本上我宁愿给应用程序池用户写权限而不是创建新用户,但这是你的选择。因为您的网站应用程序池必须在此用户名下运行。

无论如何,因为文件传输发生在应用程序池用户下,如果您有集群或负载平衡系统,您需要在每个 Web 服务器上验证其对两个文件夹(本地和 UNC 共享)的权限。

【讨论】:

以上是关于经典 ASP - 文件移动 IIS 的权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

使用应用程序池标识在 IIS 上的 ASP.NET 中查询 Win32_Printer 时权限被拒绝

IIS7 上的经典 ASP:拒绝在 500 Internal Server Error 上向浏览器发送错误

IIS发布的网页上传文件被拒绝

ASP.net 5 在 Live Windows Server 上自托管 - EACCES 权限被拒绝?

php/iis:打开流失败:权限被拒绝

IIS7 上的 ASP Classic 无法创建 COM 对象