У меня есть сервер 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
Итак, тот же контекст, одно и то же действие, но одно работает, а другое нет. Есть идеи для этого странного поведения?
Я использую subinacl x86 на сервере x64, так как не могу найти ничего более актуального. Я пробовал использовать icacls и другие, но не смог заставить их что-либо делать с принтерами.
РЕДАКТИРОВАТЬ: добавлено после комментариев Грега относительно setacl ниже
Если я вхожу на сервер TS как Testusr и открываю Admin Tools> Printer Admin (как администратор), а затем набираю 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, похоже, зависит от других привилегий, которые на самом деле для этого не требуются.
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
Возможно, вы сможете установить безопасность с помощью инструмента setprinter (setprinter -examples 3). SetPrinter предназначен для 2003, но также работает на 2008 R2.