2017-01-09 5 views
1

Я хочу установить сертификат в хранилище ssl пользователей. Поэтому я хочу запустить Start-Process с учетными данными пользователей, а также установить -LoadUserProfile. В противном случае процесс импорта завершится с ошибкой «Файл не найден».CustomScriptExtension не может запускать Start-Process (доступ запрещен)

Поскольку я хочу это сделать при подготовке моей виртуальной машины, я использую CustomScriptExtension. Команда работает нормально при входе в систему с RDP, но не в расширении. Я получаю «Start-Process: эта команда не может быть запущена из-за ошибки: Access denied».

Я думал, что исполняющий пользователь (NTAUTHORITY \ SYSTEM) имеет достаточные разрешения для выполнения этой команды. Какие-либо предложения?

Создана новая учетная запись пользователя со случайным паролем и ее учетные данные хранятся в $credentials. $filePath указывает на пользовательский инструмент командной строки C# для импорта сертификата. В качестве параметра представлен параметр $certPass. Вот мой код:

Start-Process -LoadUserProfile -NoNewWindow -Credential $credentials -FilePath $filePath -ArgumentList @("--importCertificate", $certPass) 

Этот вопрос в той или иной степени связаны с this one.

ответ

1

По соображениям безопасности пользователь SYSTEM не может выдавать себя за других пользователей (через Start-Process, runas и т. Д.) - см. Impersonate a client after authentication для получения подробной информации о выдаче.

Хотя вы можете попробовать настроить объекты групповой политики или редактировать реестр (используя инструмент командной строки, такой как ntrights.exe), чтобы использовать Start-Process, я предпочитаю using PsExec (from the Sysinternals Suite). Аналогично Start-Process, PsExec позволяет передавать имя пользователя и пароль, но также имеет флаг -h, который вызывает процесс с повышенным токеном учетной записи, если он доступен.

Ваша команда будет затем что-то вроде:

psexec -h -u $username -p $password c:\path\to\tool.exe --importCertificate $certPass 

В моей ARM скрипты шаблона CustomScriptExtension PowerShell, я хотел установить PsExec с помощью шоколадным:

Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) 
C:\ProgramData\chocolatey\bin\choco.exe install -y sysinternals