Назад | Перейти на главную страницу

Как заставить PowerShell запретить интерактивное командное окно

Я Citrix администратор и хотел бы ограничить обычную группу пользователей на наших серверах от использования PowerShell для запуска собственных сценариев или для использования его в интерактивном режиме. Мы уже запрещаем использование командной строки через GPO, но с доступной оболочкой PowerShell это практически бесполезно.

Я обнаружил, что Powershell.exe имеет параметр командной строки -NoInteractive который позволяет пользователю запускать сценарий, но не предоставляет интерактивную командную строку. Проблема в том, что я не нашел способа заставить PowerShell работать таким образом. Я даже зашел так далеко, что создал сценарий запуска C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Microsoft.PowerShell_profile.ps1, который проверял бы наличие -NoInteractive параметр, но пользователи могут обойти это, просто запустив Powershell.exe с -NoProfile параметр.

Другая проблема заключается в том, что мы используем множество сценариев PowerShell для запуска приложений для пользователей, а части сценария входа в систему написаны на PowerShell и должны запускаться в контексте пользователя, поэтому я не могу использовать простой ACL-файл EXE. Мне нужно, чтобы они могли использовать PowerShell, но не в интерактивном режиме. В конечном итоге мы хотим обеспечить соблюдение AllSigned политики выполнения и подписать все сценарии, чтобы пользователь мог запустить только сценарий, который мы (администраторы) создали и / или подписали.

Я пробовал поискать в Google этот ответ и обнаружил, что многие люди используют -NoInteractive, но я не нашел случая, чтобы кто-то пытался заставить его. Любые идеи?

Я думаю, вы неправильно понимаете использование переключателя -NonInteractive; ты все еще можешь бежать powershell -noninteractive и получите интерактивную подсказку. Неинтерактивный переключатель предназначен для сценариев автоматического создания сценариев, когда вы не хотите, чтобы PowerShell отправлял пользователю приглашение и ждал ответа. Например, в неинтерактивном окне PowerShell, если вы запустите Get-Credential без каких-либо параметров он немедленно завершится ошибкой вместо запроса имени пользователя и пароля. Невзаимодействие НЕ будет действовать как механизм безопасности.

Лучший способ - защитить то, что вы пытаетесь защитить, а не инструменты, которые пользователь может использовать для доступа к нему.

Я считаю, что у меня есть решение, которое сработает, хотя оно не особо красивое. Пользователь jbsmith был на правильном пути. Если я закончу ACLing the powershell.exe для удаления Выполнить разрешения от группы Пользователи, что не позволяет им запускать интерактивное окно. Для тех сценариев PowerShell, которые пользователям НЕОБХОДИМО запускать через сценарий входа в систему, мы можем скомпилировать эти сценарии в EXE, используя PowerGUI и это позволяет запускать сценарии, поскольку при этом не вызывается исполняемый файл PowerShell.

Мы обсуждаем, хотим ли мы сделать еще один шаг вперед и использовать AppLocker GPO для ограничения сценариев PowerShell только теми, которые мы благословили. Конечно, мы можем наложить эти ограничения только на среднего пользователя, не являющегося ИТ-специалистом, и разрешить нашим администраторам продолжать использовать PowerShell как обычно. Это потребует некоторых административных затрат на обслуживание, поэтому часть AppLocker может не сработать.