Автоматическое дешифрование и запуск зашифрованного сценария bash без сохранения расшифрованного файла в файловой системе
У меня есть скрипт оболочки, который создает конфиденциальное содержимое при запуске. Он находится на коробке, доступ к которой имеют только несколько пользователей. Однако я также добавил многоуровневую обфускацию для предотвращения несанкционированного использования, используя следующее:
- скрипт должен быть запущен от имени root
- скрипту должны быть переданы определенные аргументы командной строки для получения любого вывода
- скрипт был закодирован компилятором оболочки "shc " для маскировки фактов #1 и #2 от обычных пользователей (тех, кто бы не знаю, чтобы использовать трассировку или строки для просмотра фактического кода).
Чтобы затем добавить уровень реальной безопасности для защиты снова более продвинутых пользователей и системных администраторов, я также зашифровал скрипт с помощью gpg.
Мой вопрос - есть ли команда gpg (или другой метод шифрования), которую я мог бы запустить, которая запрашивает пароль для расшифровки, и расшифровывает сценарий и запускает его только в памяти (без сохранения расшифрованной версии файла в файловой системе)?
I понимая, что конфиденциальная информация может все еще существовать в незащищенной памяти во время выполнения, я рассмотрю это отдельно.
3 ответа:
Вы можете захватить выходные данные расшифровки с помощью
decrypted=$(gpg -d ...)
Затем вы можете оценить результат
eval "$decrypted"
Еще один простой вариант для сравнения с ответом чоробы:
Сохраните расшифрованный вывод в файле
/dev/shm/
. (Это файловая система tmpfs в оперативной памяти по умолчанию практически во всех дистрибутивах Linux.) Установите atrap
для удаления файла при завершении работы скрипта.
Очень возможно, что я мог бы уточнить это, но вот еще одна идея, где вы выполняете сценарий, а не оцениваете его, как в Примере choroba. Он позволяет передавать аргументы...
bash <( gpg -d ... ) arg1 arg2
...однако он "переопределяет" интерпретатор. То есть я бы запускал свои скрипты с помощью
bash -ue
. Может быть или не быть проблемой в зависимости от сценариев и того, пишете ли вы их сами или нет:)