Всем привет!
Хотел бы услышать Ваше мнение о концепции, которую я хочу внедрить в своей организации.
Ситуация следующая - у меня большое число автономных компьютеров на Debian, которые нельзя подключить к интернету или локальной сети.
Я администратор безопасности и системный администратор в одном лице и я устал по каждой мелочи совершать обход всех ПК.
Одна смена пароля может затянуться на два дня, пока всех обойдёшь.
У меня работает система обновления баз антивируса с определённой флешкой (флешки кроме разрешённых блокированы).
При подключении определённой флешки с неё скачиваются базы вирусных сигнатур в каталог недоступный пользователю, после чего происходит обновление антивируса.
Система хорошо работает, единственное она мне не очень нравится в возможности пользователя изменить архив с обновлением и закинуть на компьютер лишние файлы (к которым доступа у него в любом случае не будет, но всё равно это не нормально).
И вот вчера я придумал следующую концепцию - использовать эту особенную флешку для автоматического выполнения загруженного мной скрипта с настройками.
Человек подключает флешку, компьютер выполняет скрипт (например смены пароля) и все счастливы.
Единственное «но» в безопасности такой реализации.
Итак концепция - есть два скрипта. Первый скрипт, размещён на моём ПК, он предназначен для подготовки скрипта (шифрования). У меня же размещён публичный ключ для шифрования.
Второй скрипт, размещён на всех автономных ПК. Он предназначен для расшифровки скриптов с настройками и их выполнения. На автономных ПЭВМ так же размещается приватный ключ для расшифровки.
Первый скрипт (шифрование):
#!/bin/bash
file_path_to_encrypt=$1
dir_path_to_result=./task
rm -Rf ./task && mkdir $dir_path_to_result
openssl rand 214 > ./key_to_work.key # Генерируем случайный ключ (он же пароль)
openssl enc -aes-256-ctr -pbkdf2 -in $file_path_to_encrypt -out $dir_path_to_result/encrypt_shell.sh -pass file:./key_to_work.key # Используя симметричное шифрование шифрую файл используя этот ключ (пароль)
openssl rsautl -encrypt -pubin -inkey public.pem -in ./key_to_work.key -out $dir_path_to_result/auth_key.pem # Используя публичный ключ шифрую пароль
rm ./key_to_work.key # Удаляю пароль в открытом виде
Второй скрипт (расшифровка и выполнение):
#!/bin/bash
file_path_to_decrypt="$1"
openssl rsautl -decrypt -inkey private.pem -in ./task/auth_key.pem -out ./key_to_work.key # Расшифрую пароль используя приватный ключ (асимментричное шифрование)
if [[ $? == "0" ]] # Если расшифровка прошла успешно
then
: # Значит скрипт зашифровал я, продолжаем работу
else
echo 'Скрипт не подтверждён. Завершаю работу.' # Иначе вывожу сообщение, удаляю открытый файл ключа, завершаю работу
rm -f ./key_to_work.key
exit 1
fi
openssl enc -d -aes-256-ctr -pbkdf2 -in $file_path_to_decrypt -out ./script.sh -pass file:./key_to_work.key # Расшифрую файл используя полученный пароль (симметричное шифрование)
/bin/bash ./script.sh # Запускаю расшифрованный скрипт
rm -f ./{key_to_work.key,script.sh} # Удаляю файлы пароля и скрипта
На «красоту» и оптимизацию кода прошу внимание не обращать. Это черновой вариант, просто чтобы посмотреть на концепцию.
Безопасно ли это? Какие тонкие места Вы видите в такой реализации (например, возможность замены инструкций скрипта настроек)?
Заранее спасибо!