February 17

Почему я никогда не храню пароли в скриптах (и как я вместо этого обеспечиваю безопасность автоматизации)

Это перевод оригинальной статьи Why I Never Store Passwords in Scripts (and How I Secure Automation Instead).

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге

Автоматизация упрощает жизнь — до тех пор, пока случайно не приводит к утечке ваших учетных данных.
За эти годы я видел, как производственные системы выходили из строя из-за того, что кто-то оставил пароль в скрипте Bash, скрипте PowerShell или файле Python.

Это одна из самых простых ошибок — и одна из самых опасных.

Вот как я перестал хранить пароли в скриптах и ​​что использую вместо этого.

⚠️ Реальная проблема из практики

Это случается совершенно безобидно:
вы пишете небольшой скрипт для подключения к базе данных, выполнения резервного копирования или перезапуска сервиса.

Вы прописываете в коде вручную:

mysql -u admin -pSuperSecret123 -e "BACKUP DATABASE prod"

или

$Password = "P@ssw0rd!"
Invoke-Sqlcmd -Username 'admin' -Password $Password

Затем этот скрипт загружается в GitHub, отправляется по электронной почте или копируется на 10 серверов.
И вуаля — ваши учетные данные становятся глобальной собственностью.

Я видел, как злоумышленники целенаправленно сканируют публичные репозитории в поисках строк вроде "Password=" или "aws_secret_key".
Даже приватные репозитории не застрахованы — одна взломанная учетная запись разработчика может привести к утечке всей информации.

🔐 Правильный подход: безопасная работа с учётными данными

🐧 На Linux / Ubuntu

Используйте переменные окружения

  • export DB_USER=admin export DB_PASS=$(cat /run/secrets/db_pass)
  • Затем безопасно ссылайтесь на них: mysql -u "$DB_USER" -p"$DB_PASS"

Используйте .env-файлы (с корректными правами доступа)

  • Храните конфиденциальные данные в: DB_USER=admin DB_PASS=SuperSecret123
  • Защитите файл: chmod 600 .env
  • Никогда не коммитьте .env-файлы — добавляйте их в .gitignore.

Используйте системные хранилища ключей / секретов

  • GNOME Keyring или KWallet
  • CLI-инструмент:secret-tool store --label='DB Password' service mysql user admin

🪟 На Windows

Используйте Windows Credential Manager или PowerShell Get-Credential:

$Cred = Get-Credential
Invoke-Sqlcmd -Credential $Cred

Или же безопасно экспортируйте зашифрованные учетные данные:

$Cred = Get-Credential
$Cred | Export-Clixml "C:\secure\sql_cred.xml"

Затем безопасно загрузите:

$Cred = Import-Clixml "C:\secure\sql_cred.xml"

Это работает только на одном и том же компьютере и под той же учетной записью пользователя — идеально подходит для автоматизации.

🧠 Бонус: используйте Vault и менеджеры секретов

Для автоматизации корпоративных процессов (Ansible, Jenkins, CI/CD):

  • HashiCorp Vault
  • AWS Secrets Manager
  • Azure Key Vault
  • Ansible Vault ( ansible-vault encrypt_string)

Эти системы хранят учётные данные в зашифрованном виде, автоматически ротируют их и предоставляют доступ только тем процессам, которым он действительно необходим.

🧰 Совет по аудиту

Быстро обнаруживайте утечки учётных данных в скриптах:

grep -R --line-number -E "(password|passwd|secret|token|key)" /path/to/scripts

Для PowerShell:

Select-String -Path "C:\scripts\*.ps1" -Pattern "password|secret|token"

Если вы что-то нашли — немедленно выполните ротацию этих данных.

⚡ Краткое и практичное изложение

  • Никогда не прописывайте пароли в скриптах напрямую.
  • Используйте переменные окружения, кейринги или хранилища.
  • Защитите .env-файлы с помощью строгих прав доступа.
  • Используйте зашифрованный экспорт учетных данных для автоматизации.
  • Произведите замену всех учетных данных, которые когда-либо были скомпрометированы.

🔒 Заключительная мысль

Автоматизация должна ускорять вашу работу, а не делать вас более уязвимыми.
Каждый написанный вами скрипт представляет потенциальную угрозу со стороны инсайдеров, если он содержит секретную информацию в открытом виде.

Делайте автоматизацию умной и безопасной — вы сами (и ваша команда SOC) будете вам благодарны в будущем.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.