C # Удалить учетную запись компьютера AD, работающую в службе Windows - PullRequest
0 голосов
/ 28 августа 2018

Я хочу написать функцию в приложении службы Windows для удаления заданного имени компьютера из Active Directory.

Служба Windows работает на компьютере, который присоединен к домену DC. В настоящее время я вошел на эту машину с учетной записью администратора домена.

Служба Windows работает в контексте безопасности «NT AUTHORITY / SYSTEM», и это не должно изменяться, так как после установки приложения не должно быть никакого взаимодействия с пользователем, то есть администратор не должен вводить свои учетные данные в услуги.

Когда я запускаю приложение с добавленным кодом для удаления учетной записи компьютера, оно не работает. Однако, когда я изменяю информацию для входа в службу Windows и обновляю ее с помощью учетных данных администратора домена, она может успешно удалить учетную запись компьютера из AD.

Ниже [сокращенная версия] функции, используемой для удаления учетных записей компьютеров.

Можно ли как-нибудь изменить код, чтобы можно было удалять учетные записи компьютеров, используя тот же контекст безопасности (NT AUTHORITY / SYSTEM)?

private void DeleteComputerAccount(string CompName, DirectoryEntry DirEntry)
{
    try
    {
        //Delete computer account
        DirectorySearcher search = new DirectorySearcher(DirEntry, "(name=" + CompName + ")");
        SearchResult res = search.FindOne();
        res.GetDirectoryEntry().DeleteTree();
    }
    catch (Exception)
    {
        Throw();
    }
}

Где DeleteComputerAccount называется:

DirectoryEntry dirEntry = new DirectoryEntry("LDAP://domain.contoso.com");

string compName = "MyWorkstation01";
DeleteComputerAccount(compName, dirEntry);

1 Ответ

0 голосов
/ 29 августа 2018

Когда служба работает как локальная система, она получает доступ к сети (и, следовательно, к AD) в контексте безопасности учетной записи компьютера хоста. Вы можете делегировать учетной записи компьютера (точнее, группе, членом которой является компьютер) возможность удаления объектов из AD. По этой ссылке даны точные советы о том, как выполнить эту задачу - http://sigkillit.com/2013/06/12/delegate-adddelete-computer-objects-in-ad/

Хотя не то, что вы просили, мне выделяются еще пара вещей:

  1. Вы плохо фильтруете свой поиск. Вы можете получить что-то кроме того, что вы хотите вернуть. Вместо этого я бы предложил такой фильтр: (&(objectClass=computer)(sAMAccountName=<PCName>$))

  2. Локальная система имеет много доступа. Не могли бы вы запустить это как сетевой сервис?

...