Windows 10 计划任务不使用域凭据访问网络资源

Windows 10 计划任务不使用域凭据访问网络资源

我有一个简单的任务,为了测试目的,它由一个包含两行的批处理文件组成:

whoami >result1.txt
copy \\server\share\test1.txt C:\Users\xxx\Documents > output.txt 2> error.txt

当我从交互式登录运行它时,它运行良好,因为我有允许我访问共享的域凭据。

当我从任务计划程序运行它时,它失败了。第一个命令成功了(顺便说一句,表明计划的任务正在以我的身份运行),但第二个命令失败了,大概是因为它没有使用正确的凭据进行连接。

任务运行后,error.txt为空且output.txt包含"Access is denied." 任务历史记录中没有有用的信息 - 只是Action Completed因为Last Run Result复制(0x1)失败。

计划任务属性上的常规选项是使用我的域用户帐户运行,并且“无论用户是否登录都运行”。我尝试过设置和不设置“以最高权限运行” - 似乎没有任何变化。我还尝试更改“配置”选项 - 再次无效。“不存储密码”未选中 - 但我尝试检查它只是为了完整性,但它并没有改变行为。

在服务器端,我检查了安全事件日志。当命令失败时,我可以看到审计成功匿名登录登录事件,以及审计失败条目,看起来像是匿名登录正在尝试使用 SeBackupPrivilege:

A privileged service was called.

Subject:
  Security ID:      ANONYMOUS LOGON
  Account Name:     ANONYMOUS LOGON
  Account Domain:       NT AUTHORITY
  Logon ID:     0x180e12c36

Service:
  Server:   Security
  Service Name: -

Process:
  Process ID:   0x4
  Process Name: 

Service Request Information:
  Privileges:       SeBackupPrivilege

然后审计成功匿名登录会话被销毁。

客户端是 Windows 10,服务器是 Windows 2008 R2。凭据是 Active Directory 中的域用户帐户。

如果我使用另一台服务器,即运行 IIS 和 WebDAV 的 Windows Server 2016 机箱,则任务可以通过任务计划程序顺利运行。因此,通过 WebDAV 时,我的凭据会被使用,而通过 CIFS 时则不会。

有人能解释一下为什么复制失败吗?是否有解决方法?接下来的测试步骤是什么?我通过在批处理文件中硬编码凭据来使其工作,但显然这是不可接受的。

有人认为这项政策可能相关,但它已被禁用,所以我认为并不相关:

Network access: Do not allow storage of passwords and credentials for network authentication

at

Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options

答案1

我见过更多轶事证据表明权限在交互时的行为与计划任务不同。事件日志消息似乎指向这样一个事实:它需要 seBackupPrivilige(这可能实际上意味着它想要更改对象所有者)。

将运行任务的用户放在目标服务器上的内置本地组(如备份操作员)中可能会起到作用(没有测试平台来测试这一点,但如果不确定,请从两台服务器上的本地管理员开始,然后使用消除)。

理论上,您还可以使用域 GPO 为特定用户或更好的组设置类似的权限。

已编辑:您是否尝试过忽略或更改错误输出?安全事件可能是一种干扰(例如,NTLM 身份验证将始终有一个失败的匿名条目)。

如果我运行你的脚本,它会在计划任务中出错,因为 > output.txt 和 2> error.txt 前面没有路径 - 但这有效:

copy \\two.moh.local\test\test1.txt C:\temp\ > c:\temp\output.txt 2> c:\temp\error.txt

如果您从命令提示符或双击运行脚本,它将起作用,因为它将使用父目录,这与不以交互方式运行时的工作方式不同(我假设它试图在域管理员具有权限而您的用户没有权限的地方写入)。

答案2

首先,“任务计划程序错误 0x1”很难调试,需要尝试几种解决方案才能在您的环境中找到原因。

阅读问题和答案后,我建议:

  1. 尝试明确说明脚本或批处理文件中使用的所有路径。不要使用短路径。将目标路径 C:\Users\xxx\Documents 编辑为 D:\test 之类的路径。
  2. 尝试包含错误和输出文件的完整路径。

此外,我建议检查“操作选项卡”中的选项。尝试在带有空格的路径上使用引号。

您还可以在此找到有关返回错误 0x1 的宝贵信息来源

相关内容