Доступ запрещен при попытке остановить службу Windows C # - PullRequest
5 голосов
/ 08 июля 2011

Я создал веб-сервис на C # с использованием Visual Studio для остановки службы Windows «Простой протокол передачи почты (SMTP)» под названием SMTPSVC. ​​

Ниже приведен веб-метод для этого:

[WebMethod]
public string StopService()
{
    String status = "";
    try
    {
        ServiceController scAlerter = new ServiceController("SMTPSVC");

        Console.WriteLine(scAlerter.DisplayName);
        Console.WriteLine(scAlerter.CanStop);

        scAlerter.Stop();
        Console.WriteLine("Service stopped");
        status = "STOPPED";
    }
    catch (Exception e)
    {
        Console.WriteLine("Exception caught here" + e.ToString());
        status = "Exception" + e.ToString();
    }
    return status;
}

Я опубликовал этот веб-сервис на своем сервере IIS 5.1. Когда я вызывал службу, она выдает следующее исключение «Отказано в доступе»

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="http://y-square.org/">
    ExceptionSystem.InvalidOperationException: Cannot open SMTPSVC service on 
    computer '.'. ---> System.ComponentModel.Win32Exception: Access is denied 
    --- End of inner exception stack trace --- at 
    System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)
    at System.ServiceProcess.ServiceController.Stop() at Service.RestartService()
    in c:\Inetpub\wwwroot\RestartService\App_Code\Service.cs:line 38
</string> 

По умолчанию служба использует учетную запись пользователя IUSER_system-name, и я добавил эту учетную запись пользователя в группу системных администраторов, а также добавил ASPNET учетную запись пользователя в группу администраторов.

Мне удалось остановить / запустить эту службу Windows из автономной программы C #.

Не могли бы вы сообщить мне, в чем проблема? Какие-либо настройки разрешений или права доступа пользователей IIS нужно изменить, чтобы запустить это?

Также сообщите мне, какую учетную запись пользователя будет использовать эта служба C # для остановки службы Windows?

Ваша помощь очень ценится.

Спасибо заранее, Йог

1 Ответ

5 голосов
/ 08 июля 2011

Учетная запись IUSER_machinename (кратко IUSER, далее), по уважительным причинам, является относительно ограниченной учетной записью с чуть большими привилегиями, чем гостевая учетная запись. Запрещено запускать и останавливать службы Windows или даже запрашивать их (чтобы узнать их статус и т. Д.).
При запуске в контексте автономного exe-кода логика, приведенная выше, является успешной, поскольку основной учетной записью является [вероятно] вы, кто, вероятно, является членом группы «Администраторы», или, во всяком случае, достаточно мощная учетная запись.

Простой, но не рекомендуемый выход из этой ситуации - дать учетной записи IUSER больше привилегий. Просто попробуйте добавить эту учетную запись в группу администраторов, bam !, она будет работать (но также создаст потенциально опасную дыру в безопасности).
лучший подход состоит в том, чтобы составить явный список конкретных служб Windows, которым будет разрешено управлять с помощью IIS, и установить дескриптор безопасности их отдельных служб таким образом, чтобы учетная запись IUSER (или другая учетная запись /) группе, созданной по этому случаю) разрешено запускать и / или останавливать их по своему усмотрению.
Сложность в реализации этого подхода заключается в том, что, насколько мне известно, нет графического интерфейса пользователя или интуитивно понятного инструмента администрирования для проверки и изменения дескриптора безопасности служб: вам нужно использовать sd и «изучать» язык SDDL. Вот несколько советов, чтобы сделать это

...