Я пытаюсь удаленно удалить определенную службу, но получаю известное сообщение «FAILED 5: Access is denied». сообщение. Я сократил тестовый пример до запуска
sc \\remotemachine.domain.local query "flexnet licensing service"
и я получаю
[SC] EnumQueryServicesStatus:OpenService FAILED 5:
Access is denied.
Интересно то, что я могу удаленно запросить практически любую другую службу от того же клиента, и это не проблема. Хост-машина
Используя того же пользователя при входе в систему непосредственно на машине, я могу без проблем запрашивать, запускать или останавливать эту «службу лицензирования flexnet», только когда я пытаюсь сделать это удаленно, я сталкиваюсь с проблемой.
Первоначально мы столкнулись с этой проблемой, когда наш деинсталлятор не смог удалить эту службу с помощью Windows C API. Программа удаления будет нормально работать при запуске непосредственно на машине, но при удаленном вызове через WMI она не сработает. Мы постепенно сокращаем количество тестовых примеров, и до сих пор во всех случаях запросы, попытки остановить или удалить эту конкретную службу заканчивались неудачей при удаленной попытке.
Я также пробовал удаленно вызвать пакетный скрипт, который содержал команды:
powershell.exe -Command "Start-process C:\myDeleteSvc.exe -Verb RunAs"
Где myDeleteSvc.exe - это простая программа, установленная на целевой машине для удаления службы. с помощью Windows C API, но это также не удалось при вызове OpenService с отказом в доступе. Опять же, он отлично работает, если запускать его прямо на машине.
У меня такое случалось с сервисом, установленным на машинах с Windows 7 и 2008R2 (не тестировал на других платформах).
Данная услуга предназначена для стороннего программного обеспечения. Он зависит от службы инструментария управления Windows, но даже когда я вручную удаляю все зависимости (и иждивенцы), его по-прежнему нельзя запросить удаленно.
Есть ли у кого-нибудь дополнительные предложения по расследованию (или решениям)?
Есть один случай, когда сервис можно удалить удаленно. Мы поговорили со службой поддержки этого продукта, пытаясь разобраться в проблеме, и, хотя они тоже озадачены, они предоставили msi-файл, который при удаленном запуске удалял рассматриваемую службу. У нас нет доступа к тому сценарию, который использовался для создания этого msi-файла, но нам сказали, что это «очень просто, и все, что он сделал, - это удалил службу». Один из возможных путей исследования - понять, делает ли деинсталляция службы msi что-то «лишнее», когда выполняет деинсталляцию - кто-нибудь знает?
Некоторые связанные вопросы, хотя все они кажутся одной и той же темой UAC и работы от имени администратора, и поскольку я могу удаленно запрашивать другие службы, я думаю, что моя проблема должна быть немного другой. Включение ссылок заставляет бота думать, что это спам, поэтому просто ищите по заголовкам.
Благодаря Craig620 проблема действительно была связана с дескриптором безопасности.
C:>sc sdshow "flexnet licensing service"
D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;NU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCLCSWRPLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
C:>sc sdshow myService
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
И из Синтаксис SID мы видим первую запись ((D;;...;;;NU)
) Отключает большинство разрешений для всего, что поступает по сети (NU
). Когда я изменил SD, чтобы иметь те же разрешения без NU
отключение, я мог запросить и удалить службу удаленно, используя sc.exe
команда.