Олицетворение IIS, вызывающее поток PowerShell? - PullRequest
1 голос
/ 04 февраля 2020

Я недавно изучаю IIS и пытаюсь использовать IIS для размещения приложения для олицетворения пользователя-администратора, а затем выполнить команду powershell от имени администратора для добавления пользователей в локальные группы.

Внутри в ASP . NET код, я запускаю следующее:

private string RunScript()
        {
            StringBuilder stringBuilder = new StringBuilder();

            PowerShell psExec = PowerShell.Create();
            psExec.AddCommand(SCRIPT_LOCATION);
            psExec.AddParameter("username",Username.Text);
            psExec.AddParameter("computer", Computer.Text);
            psExec.AddParameter("group", Group.Text);

            Collection<PSObject> results;

            stringBuilder.AppendLine(System.Security.Principal.WindowsIdentity.GetCurrent().Name);

            results = psExec.Invoke();
            //errors = psExec.Streams.Error.ReadAll();
            foreach (PSObject result in results)
            {
                stringBuilder.AppendLine(result.ToString());
            }
            return stringBuilder.ToString();
        }

В моем файле web.config добавлено следующее:

<authentication mode="Windows" />
<identity impersonate="True" userName="<My admin user name>" password="<My admin password>"/>

Итак, мой GetCurrent (). Имя кажется чтобы вернуть, что я, по крайней мере, запускаю приложение под своим именем администратора. Но при вызове моего сценария powershell:

Write-Output whoami

Возвращает, что я NT Authority \ System .

В моем IIS:
Идентификация пула приложений is "LocalSystem"
Аутентификация Настройка имеет ASP. NET Олицетворение (где администратор пользователя установлен как Specifi c пользователь ) включен.
Windows Аутентификация включена.

Поэтому при попытке добавить пользователя в группу появляется сообщение «Доступ запрещен» ». Так же, как проверка работоспособности, я подтвердил, что если я запускаю сценарий powershell отдельно от имени администратора, адд работает нормально.

Я уверен, что это что-то базовое c Я пропускаю, но если кто-нибудь, пожалуйста, предоставьте Любой совет или руководство, я был бы очень признателен.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 04 февраля 2020

Насколько я знаю, метод psExec.Invoke() создает поток с именем «Pipeline Execution Thread», а команда / скрипт выполняется в этом новом потоке. По умолчанию токен олицетворения не распространяется между потоками, поэтому «Поток выполнения конвейера» не получает токен олицетворения вызывающего потока.

Можно настроить ASP. Net для передачи токена олицетворения. для вновь созданных потоков с помощью элементов конфигурации «AlwaysFlowImpersonationPolicy» и «legacyImpersonationPolicy» в файле asp .config, например:

            <runtime>

                         <legacyImpersonationPolicy enabled=”false”/>

                         <alwaysFlowImpersonationPolicy enabled=”true”/>

           </runtime>

Подробнее о том, как чтобы установить его, вы можете обратиться к статье ниже: https://weblogs.asp.net/owscott/setting-an-aspnet-config-file-per-application-pool

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...