我有一台安装了终端服务器角色的 Windows 2008 R2 服务器。我发现服务器上本地打印机操作员组的普通用户遇到了问题。
如果用户使用“以管理员身份运行”打开 cmd 窗口,他们可以运行 printmanager.msc,而无需再次输入密码。在 printmanager 中,他们可以毫无问题地更改重定向(轻松打印)打印机的所有权。
如果他们从同一个 cmd 窗口使用 subinacl 尝试将队列的所有权更改为自己,则会被拒绝访问:
>subinacl.exe /printer "_#MyPrinter (2 redirected)" /setowner="MyDom\MyUsr"
Elapsed Time: 00 00:00:00
Done: 1, Modified 0, Failed 1, Syntax errors 0
Last Done : _#MyPrinter (2 redirected)
Last Failed: _#MyPrinter (2 redirected) - OpenPrinter Error : 5 Access denied
因此,同样的上下文,同样的操作,但一个有效,一个无效。对于这种奇怪的行为,您有什么想法吗?
我在 x64 服务器上使用 subinacl x86,因为我找不到更新的版本。我尝试使用 icacls 和其他程序,但无法让它们对打印机执行任何操作。
编辑:在 Gregs 对 setacl 的评论之后添加
如果我以 Testusr 身份登录 TS 服务器并打开管理工具 > 打印机管理(以管理员身份),然后输入 mydomain\testusr 和 testusr 的密码,那么我可以更改打印机队列的所有权并将 testusr 设置为所有者。
但是,如果我以管理员身份打开 cmd,并再次输入 mydomain\testusr 和用户密码,当我尝试更改重定向打印机的所有权时,我会得到以下信息:
C:\>setacl -on "Bullzip PDF Printer (12 redireccionado)" -ot prn -actn setowner -ownr n:mydom\testusr
WARNING: Privilege 'Back up files and directories' could not be enabled. SetACL's powers are restricted.
WARNING: Privilege 'Restore files and directories' could not be enabled. SetACL's powers are restricted.
INFORMATION: Processing ACL of: <Bullzip PDF Printer (12 redireccionado)>
ERROR: Enabling the privilege SeTakeOwnershipPrivilege failed with: No todos los privilegios o grupos a los que se hace referencia son asignados al llamador.
[meaning not all referenced privs or groups are assigned to the caller]
SetACL finished with error(s):
SetACL error message: A privilege could not be enabled
也许我理解错了,但是如果内置的 Windows 工具仅通过“打印操作员”组的成员身份就可以做到这一点,那么 setacl 也应该可以做到,不是吗?
然而 setacl 似乎依赖于其他权限,而实际上不需要这样做。
答案1
Windows 通常不允许用户将任何对象的所有权更改为管理员以外的任何人(或他们自己,如果他们对该对象具有所有权权限),除非他们是管理员或他们拥有某些特殊的 Windows 用户权限(您不应授予)。
我推测已有七年历史的 x86 版本的 subinacl.exe 无法与提升进程中的安全令牌一起正常工作。
一些建议:
尝试使用更新版本的 subinacl,5.2.3790.1180,可从以下网址获取:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b
尝试使用免费的 SetAcl.exe 实用程序。这是权限管理工具的瑞士军刀,包含 x64 版本。这是一个活跃的项目,包含 Microsoft 实用程序所缺乏的许多功能。
文档:
http://helgeklein.com/setacl/documentation/command-line-version-setacl-exe/
http://helgeklein.com/setacl/examples/managing-printer-service-and-share-permissions-with-setacl-exe/
使用示例:
setacl -on "Printer Name" -ot prn -actn setowner -ownr n:domainNetbiosName\userName
答案2
也许您可以使用 setprinter 工具 (setprinter -examples 3) 设置安全性。SetPrinter 适用于 2003,但也适用于 2008 R2。