Я уже давно борюсь с чем-то. Босс хочет создать каталог на нашем файловом сервере, куда он будет помещать файлы установки программ, все смогут его читать, а изменять — только он.
Он хочет, чтобы на клиентских рабочих станциях был скрипт, который считывает каталог и показывает пользователю, какие файлы там находятся. Затем пользователь, который является обычным пользователем домена (без возможности что-либо устанавливать), мог бы нажать кнопку «установить», и он бы установил это.
Идея заключается в том, чтобы на рабочем месте пользователя находился локальный администратор и скрипт знал пароль локального администратора, а затем установил программу на компьютер пользователя с этими учетными данными локального администратора.
Это очень проблемная проблема, поскольку я не вижу, как можно ее защитить, не сохраняя пароль локального администратора внутри скрипта, что очень плохо.
Я пытался думать о том, чтобы как-то зашифровать пароль и преобразовать скрипт в исполняемый файл, но не вижу способа, которым пользователь, который немного разбирается в компьютерах, не смог бы декомпилировать исполняемый файл. Если я использую шифрование PowerShell, оно подойдет только для одной машины и одного пользователя.
Затем я придумал другой способ: сделать вызов с клиентской рабочей станции на файлер, а затем заставить файлер использовать psexec для обратного вызова пользователя, но это становится слишком запутанным.
Затем я подумал о том, чтобы сделать вызов с компьютера пользователя на файлер, а затем с файлера обратно на пользователя с помощью invoke-command, но мне нужно разрешить WinRM всем клиентам.
Я использую PowerShell для этого. Может быть, кто-то здесь делал что-то подобное и может посоветовать, как это сделать безопасно.
Первый вариант сработал отлично, поэтому я бы хотел придерживаться его, если это возможно, но мне нужно придумать, как защитить эту штуку, а не просто поместить учетные данные в скрипт PowerShell, который находится на компьютере пользователя.
решение1
Я вижу два подхода.
- Найдите другого начальника. Он, очевидно, понятия не имеет, насколько сложна задача, которую он требует, всегда важны детали, и я сомневаюсь, что он в них заглядывал. Установка Windows чрезвычайно сложна для детального освоения.
Все еще читаете? Ладно. Это можно сделать.
- Ключевым моментом является запуск вашего скрипта как «запланированной задачи» в фоновом режиме. Когда вы настраиваете новую «запланированную задачу» на компьютере, вам предлагается ввести имя пользователя и пароль, которые должна использовать эта задача. Здесь вы передаете учетные данные своей учетной записи для установки. Пароль не может быть восстановлен впоследствии, поэтому ее можно считать безопасной. Эта «запланированная задача» теперь имеет полные административные права, и если вы используете учетную запись пользователя домена (предоставьте ей права администратора на клиентах и только права пользователя на сервере), ваш скрипт может легко получить доступ к установочным файлам по сети и запустить установку.
Однако имейте в виду, что многие программы установки довольно глупы, они установят программу для использования пользователем, который устанавливает программу (т. е. пользователем вашего установщика), а не для пользователя, вошедшего в систему в фоновом режиме. Некоторые установщики можно параметризовать для установки "всем пользователям", что, вероятно, и будет сделано, для других вам придется сделать свой скрипт умнее, чтобы он мог добавлять "все необходимые настройки, лицензии (!), значки, все, что нужно программе для работы" в профиль пользователя переднего плана после завершения установщика программного обеспечения.
Нет абсолютно никакого законного способа заставить учетную запись пользователя выполнить эту задачу. Если бы был какой-либо способ, которым пользователь мог бы повысить свои привилегии до администратора, не зная пароля администратора или не получив от администратора административных прав, любой пользователь мог бы делать что угодно в любое время, что почти эквивалентно запуску всех учетных записей пользователей в качестве администраторов все время.
Теперь вам нужен какой-то дополнительный скрипт, веб-интерфейс, что угодно, что позволит пользователю выбирать из программного обеспечения на сервере, возможно, проверит, есть ли у пользователя разрешения на установку программного обеспечения, и, возможно, соответствует ли компьютер пользователя требованиям для успешной установки (Оборудование? Свободное место на диске? ...). Затем вам придется сохранить эту информацию в месте, где ваш фоновый установщик сможет ее прочитать. Простого списка на сервере будет достаточно.
Наконец, фоновый скрипт будет периодически обращаться к этому списку и запускать установщики.
Сделанный.
Позвольте мне сказать, что вы имеете в виду программирование автоматизированного средства распространения программного обеспечения. Существуют коммерческие инструменты, которые это делают, один из них даже встроен в Windows Active Directory и предоставляется бесплатно. Я не знаю, сколько лет и денег разработчики вложили в каждый из них, чтобы достичь точки, когда их установщики осваивают многие (большинство? все? некоторые?) из множества вариантов установщиков, используемых различным программным обеспечением Windows. Сначала они могут показаться дорогими для клиента, но я сомневаюсь, что вы сможете превзойти любое коммерческое решение с точки зрения стоимости, надежности, функций, документации и поддержки сообщества чем-либо, что вы сможете сделать в Powershell.
решение2
Это похоже на работу по развертыванию программного обеспечения групповой политики. Это позволяет обойти проблему отсутствия у пользователей административных прав.
Киздательскийпакет, он сделает программное обеспечение доступным для пользователей через Панель управления (в отличие от его автоматической установки).
С точки зрения конечных пользователей:
Настраивать
- См. руководство Microsoftздесь(старая статья, но все еще актуальна). Следуйте "Опубликовать пакет" вместо "Назначить пакет".
- Делегируйте соответствующие разрешения для GPO и общего ресурса "репозитория программного обеспечения". Вы можете создать группу безопасности специально для этого, назвав ееДополнительные администраторы программного обеспечения, например, и добавьте своего начальника в качестве участника. Убедитесь, что ACE применяется кЭтот объект и все дочерние объекты: ГрантИзменитьРазрешения NTFS для папки «Программное обеспечение» для дополнительных администраторов программного обеспечения:
- Установите консоль управления групповой политикой на компьютере вашего руководителя, выполнив следующую команду PowerShell с повышенными привилегиями:
Add-WindowsCapability -Name "Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0" -В сети
С этого момента ваш босс готов начать копировать установщики в общий ресурс ПО и соответствующим образом изменять GPO развертывания ПО (хотя изначально ему нужно будет получить указания). И все это без привилегий администратора локальной машины или домена и (достаточно) просто для всех участников!
Вы даже можете облегчить жизнь конечным пользователям и своему боссу, переместив ярлыки прямо туда, куда им нужно. Установка консоли управления групповой политикой также может быть автоматизирована, если необходимо масштабировать ее для большего числа административных пользователей или если ваш босс перемещается между несколькими машинами.