Проект DAVrun - Это комплекс программ для автоматической и безопасной развёртки самораспаковывающихся архивов на большое количество компьютеров не связанных одной сетью.
Проект полностью открыт и распространяется по лицензии MIT.
Проект DAVrun позволяет обслуживать большое количество компьютеров, которые никак не связаны между собой и могут находиться в любых городах или странах без открытия каких либо портов на компьютерах (открывается только один порт на сервере для приёма соединений). Программа в автоматическом режиме скачивает и запускает самораспаковывающиеся архивы с административными правами, а тут уже можно разгуляться, на сколько хватит фантазии и опыта создания скриптов для автоматизации через самораспаковывающиеся архивы.
Мой проект, использует технологию WebDAV, работающий на зашифрованном HTTPS соединении, а подключение к серверу и обмен данными происходит с помощью библиотеки “libcurl”, с дополнительными защитами.
Это не полностью готовый к использованию проект из коробки, нужно немного поработать ручками, что бы его собрать, но проблем не должно быть, так как постарался сделать максимально подробные инструкции для каждой части проекта с файлами (README #1, README #2 и т.д.), которые находятся в каждой папке к проекту, нужно просто по очереди следовать инструкциям.
В первую очередь делал проект для себя и ради хобби, а так же для рабочих целей на практике.
Проект старался сделать более универсальным, что бы другой человек (сисадмин) без особых знаний в программировании мог собрать проект и использовать для своих нужд.
Очень кратко, что делать и как это работает.
- Поднимается сервер на Линуксе, на котором запускается уже готовый скрипт для настройки серверной части.
- Далее скачиваются программы для компиляции кода на языках “C” и “C#” и компилируем исполняемые файлы.
- Создаём установочный файл для программы “DAVrun” и службы с некоторыми библиотеками, что бы удобно было ставить на большое кол-во компьютеров (тихая установка поддерживается).
- В программе “Admin DAVrun” выбираем уже заранее подготовленный самораспаковывающийся архив с нужными нам действиями, выбираем на какие компьютеры установить (файлы с именами компьютеров тоже нужно подготовить) этот архив и ждём.
- Раз в 10 минут служба на клиентском компьютере будет запускать программу “DAVrun”, и есть указанный компьютер в списке на установку, тогда скачивает самораспаковывающийся архив и запускает его с наивысшими правами на выполнение.
Порядок сборки проекта.
- Скачиваем архив со всем проектом и распаковываем.
- В папке “1. Скрипт сервера WebDAV” и внимательно читаем “README #1.txt”.
- Далее переходим в папку “2. DAVrun” и внимательно читаем “README #2.txt”.
- Переходим в папку “3. SERVICE-DAVrun” и внимательно читаем “README #3.txt”.
- Переходим в папку “4. Создание установочного файла” и внимательно читаем “README #4.txt”.
- И в папке “5. Admin DAVrun” внимательно читаем “README #5.txt”.
Так же для данного проекта рекомендую утилиты.
SwitchRegPowerShell:
GitHub страница: https://github.com/Otto17/SwitchRegPowerShell
GitFlic страница: https://gitflic.ru/project/otto/switchregpowershellCertificateInstaller:
GitHub страница: https://github.com/Otto17/CertificateInstaller
GitFlic страница: https://gitflic.ru/project/otto/certificateinstallerDelCert:
GitHub страница: https://github.com/Otto17/DelCert
GitFlic страница: https://gitflic.ru/project/otto/delcertDelApplication:
GitHub страница: https://github.com/Otto17/DelApplication
GitFlic страница: https://gitflic.ru/project/otto/delapplicationLaunch_LocalSystem:
GitHub страница: https://github.com/Otto17/Launch_LocalSystem
GitFlic страница: https://gitflic.ru/project/otto/launch_localsystem
Версии
30.06.2024г.
- Добавил в “Скрипт сервера WebDAV” очистку локального кэша скаченных и уже установленных пакетов.
- Добавил в программу “Client DAVrun” автообновление списка с именами компьютеров ожидающими установку.
- В программе “Client DAVrun” изменил недочёт связанный с именем при загрузке самораспаковывающегося setup файла на сервер, теперь можно выбирать архивы с любым именем и символами, на сервер всегда будет загружаться автоматически такое имя “setup.exe_хеш”.
- Добавил в папку “Создание установочного файла” bat файл “Silent_Install.bat” для тихой установки.
04.07.2024г.
- Изменил в программе “DAVrun” принцип поиска файлов на сервере, теперь поиск осуществляется через библиотеку “libxml2”, что даёт возможность корректно обрабатывать файлы по маске и с поддержкой Кириллицы.
-
Теперь можно указать не только строго имя компьютера “NoteBook_Otto”, а так же через знак “=”, до которого любой текст будет игнорироваться, это даёт возможность понятным языком написать, что это за компьютер.
Можно писать как “_г. Омск, ул. Буржуйская,17_7 *Мой(ДОМ)*=NoteBook_Otto” или “NoteBook_Otto_” - оба варианта будут корректно обрабатываться (тестировал с 5000 фалов, время поиска составило около 1 секунды +/-).
-
Добавил регистронезависимость в программе “DAVrun” для поиска файлов на сервере с помощью библиотеки “libicu”. Верхний и нижний регистры “NoTebOok_OTTo” теперь будут корректно обрабатываться (тестировал на наборе символов: г. ._-{}()[]!@#$%^&+;~,`’ Гуся, Тест711 % 2A-_ ;%23+!@(&) ТЕСТ=NoTebOok_OTTo).
- В скрипт “Создание установочного файла” добавил автоматическую установку (онлайн) “Visual C++ 2015-2022 Redistributable”, в случае, если данные библиотеки не установлены в системе.
- Так же упросил процесс создания установочного файла, теперь не нужно ничего копировать в корень диска, просто кидаете в папку “build” файлы по инструкции, запускаете скрипт “Script_Setup_DAVrun.iss” и компилируете (обновил Inno Setup до версии v6.3.2).
- Переименовал проект “Client DAVrun” в “Admin DAVrun”, так логичнее, так как утилита для сисадминов, а не пользователей и немного подправил текст уведомлений.
- В окне “Процесс установки” в “Admin DAVrun” изменил вывод, что бы выводился список с полным именем файла, а не только именем компьютера после знака равно, так как уже научил “DAVrun” корректно обрабатывать такие имена файлов.
07.07.2024г.
- Исправил в “Admin DAVrun” дёрганую строку с отображением прогресса загрузки setup файла.
11.07.2024г.
- Добавил в корень проекта папку “Генераторы ключей”, в которую переместил “Keygen bytes AES-256 - key_IV” и добавил ещё генератор “Keygen Pepper Hard Passwd” для создания рандомного ключа и соли для программы “DAVrun”.
13.07.2024г.
- Изменил программу “DAVrun”, теперь она может принимать настройки хоста, логина, пароля, имени сертификата, названия папки на сервере для поиска файлов и кол-во обрезаемых символов имени компьютера от начала (от 0 до 14 символов) и сохранять это в зашифрованный конфиг файл в этой же папке.
Скомпилировать программу можно как с привязкой к компьютеру, это даёт очень высокий уровень защиты конфига, так как ключ шифрования будет храниться в защищённом хранилище Windows, но конфиг будет НЕ переносим на другие ПК.
Второй вариант - это скомпилировать программу без привязки к компьютеру, конфиг будет переносим на другие компьютеры, зашифрованный ключ будет храниться рядом с зашифрованным конфигом, но это уменьшает безопасность, тем не менее расшифровать конфиг и узнать логин/пароль будет очень сложно. В этом случае перед компиляцией нужно обязательно сгенерировать жёстко задаваемый пароль и “перец” через генератор “Keygen Pepper Hard Passwd” из папки “Генераторы ключей”.
Любой из двух вариантов можно выбрать перед компиляцией “DAVrun” в исходном коде.
Вызвать справку по программе можно запустив в командной строке “DAVrun.exe” без аргументов до создания конфиг файла.
Вот так это выглядит:
Использование: DAVrun.exe “Хост” “Логин” “Пароль” “Имя сертификата с расширением” “Каталог ожидания установок на сервере” “Кол-во символов (число от 0 до 14) для обрезки символов от начала имени ПК”
Пример: DAVrun.exe “https://77.77.77.77:7777/webdaw/” “User” “Password” “cert.crt” “Points” 7 - Разбил исходный код программы “DAVrun” на отдельные файлы, так как проект стал уже не маленький и в одном файле заниматься отладкой становиться сложнее.
- Немного улучшил информативность вывода от библиотеки libcurl в лог файл для программы “DAVrun”.
- Добавил в скрипт “Создание установочного файла” возможность указать данные сервера и включить автоматическое создание зашифрованного конфиг файла, так же исправил ошибку с отображением иконки в “Установка и удаление программ”.
29.07.2024г.
- Исправил в “DAVrun” путь с относительного на полный для обращения к конфиг файлу “config.enc” и ключу “key.bin” (данный косяк допустил по невнимательности в прошлом релизе), так как с относительными путями служба “SERVICE-DAVrun” вызывающая “DAVrun” работать корректно не будет из-за того, что запускается от пользователя “СИСТЕМА” в другом изолированном пространстве.
- Добавил в “Создание установочного файла” ярлык для удаления конфиг файла: “DAVrun - УДАЛИТЬ КОНФИГ”.
- Обновил Inno Setup до версии v6.3.3 и подправил описание скрипта в “Создание установочного файла”.
- Добавил новую программу “Launch_LocalSystem”, которая позволяет запустить другую программу от имени “СИСТЕМА” методом перетаскивания на “Launch_LocalSystem.exe” исполняемого файла, либо запуск через аргумент в cmd: Launch_LocalSystem.exe <Путь к запускаемой программе>.
-
В “Создание установочного файла” добавил возможность создания конфиг файла от пользователя “СИСТЕМА”, через программу “Launch_LocalSystem”, если используется “DAVrun” с привязкой к железу и пользователю “strong_Encryption”.
Это нужно для того, что бы привязать конфиг к пользователю “СИСТЕМА”, так как служба “SERVICE-DAVrun” работает от пользователя “СИСТЕМА” и если попытаться запустить “DAVrun” от другого пользователя, тогда сработает защита и конфиг удалится.
Есть и второй вариант, это после создания службы во вкладке “Вход в систему” указать пользователя (с административными правами) от которого будет работать служба, тогда и “DAVrun” будет запускаться от того же пользователя, что и указан в службе, но в этом случае полномочия в системе могут быть ниже.Launch_LocalSystem можно использовать как самостоятельную программу для других своих целей.
-
Обновил библиотеку libcurl до версии 8.9.0.
02.08.2024г.
-
В “Admin DAVrun” изменил принцип шифрования, теперь ключ и вектор инициализации не задаются жёстко в программе, ключ генерируется автоматически и хранится в Windows DPAPI (Программный интерфейс приложения для защиты данных), что значительно повышает безопасность.
Конфиг так же, как и раньше создаётся в %LocalAppData% для каждого пользователя, ключ шифрования при первом запуске программы так же создаётся только для текущего пользователя (от которого запущена программа), то есть открыть конфиг на одном компьютере под другим пользователем не получится, сработает защита и конфиг удалиться.
Это повышает безопасность и даёт возможность использовать на одном ПК под разными пользователями конфиги с разными настройками.DPAPI использует AES или Triple DES, в зависимости от версии операционной системы, он автоматически выбирает алгоритмы и параметры шифрования, основываясь на конфигурации операционной системы.
Windows 7 и 8: Используют “Triple DES”, но могут использовать “AES”, если аппаратные возможности это позволяют.
Windows 8.1 и выше: По умолчанию используют “AES” (предпочтительно “AES-256”), если это поддерживается системой. -
В “Admin DAVrun” обновил “SSH.NET” и немного упростил некоторые выражения в коде, так же добавил выделение строки при ошибочном вводе мастер-пароля и при его создании, что немного упрощает создание/изменение или повторный ввод мастер-пароля.
- Удалил “Keygen bytes AES-256 - key_IV” из папки “Генераторы ключей”, так как он больше не нужен для программы “Admin DAVrun”.
- Удалил из папки “Стороннее ПО” обфускатор “Обфускатор для C#”, так как он больше не нужен для программы “Admin DAVrun”, к тому же 10 антивирусов в VirusTotal ложно определяют обфусцированную программу как вредоносную, без обфускации только 1 ложное определение.
- Добавил в “Создание установочного файла” ярлык для ручного запуска DAVrun от имени системы (что бы не удалился конфиг, если он был создан от имени СИСТЕМА) “DAVrun - Запустить от имени СИСТЕМА”.
- Добавил в “Скрипт сервера WebDAV” принудительный запрет подключения от root по SSH, добавил установку “rsyslog” (требуется для Debian, что бы корректно работал Fail2Ban).
-
В скрипт “Создание установочного файла” по окончанию инсталляции установил по умолчанию пункт “Нет, я произведу перезагрузку позже”, так же добавил ключ “/NORESTART” в bat файл “Silent_Install.bat” для тихой установке, что бы подавить и отклонить предложение перезагрузки компьютера (так как это не обязательно в нашем случае, можно перезагрузить и потом). Так же добавил bat файл со скрытой установкой “VerySilent_Install.bat”.
“Silent_Install.bat” - Запускает установщик в автоматическом режиме (отображается окно выполнения).
“VerySilent_Install.bat” - Очень тихий режим. Никакие окна не отображаются.
05.08.2024г.
- В “Admin DAVrun” исправил зависание программы при вычислении хеш-суммы большого setup файла и добавил gif анимацию ожидания, пока происходит вычисление хеш-суммы.
- Для “DAVrun” сделал отдельные иконки SOFT и STRONG для исполняемых файлов, что бы можно было их отличить не по размеру файла, а по иконке.
30.08.2024г.
- Добавил 11 примеров самораспаковывающихся архивов для проекта DAVrun.
16.09.2024г.
-
Исправил маленький косяк, который приводил к серьёзной уязвимости в “Скрипт сервера WebDAV”, позволяя зайти без авторизации в любой каталог, кроме главного каталога “_/webdav_”.
В остальном за время использования не обнаружил других багов или проблем, проект работает хорошо.
05.12.2024г.
- Добавил в “SERVICE-DAVrun” после первого запуска службы запуск “DAVrun.exe” через 10 секунд, дальнейшие запуски остались так же, раз в 10 минут.
- Добавил в “SERVICE-DAVrun” перед запуском “DAVrun.exe” проверку зависших процессов “DAVrun.exe” если они есть (любое количество), то они убиваются и запускается единственный экземпляр “DAVrun.exe”.
- Добавил ещё 2 примера самораспаковывающихся архивов для проекта DAVrun.
08.12.2024г.
- Добавил в “DAVrun” дополнительные опции для улучшения надежности и производительности загрузки.
- Обновил библиотеку libcurl до версии 8.11.0.
- Обновил библиотеку ICU до версии 76_.1_.
- Обновил (в скомпилированном DAVrun.exe) GCC до версии 14.2.0.
- Добавил ещё 2 примера самораспаковывающихся архивов для обновления DAVrun.
Автор Otto, г. Омск 2024
Описание
Комплекс программ для автоматической и безопасной развёртки самораспаковывающихся архивов на большое количество компьютеров не связанных одной сетью.