Версия: 1.0.0 Дата: Декабрь 2025 Статус: Production Ready
Безопасная система управления секретами на базе внутренних средств Linux, без внешних зависимостей типа HashiCorp Vault или облачных KMS.
Целевая аудитория: Системные администраторы, разработчики приложений, DevOps инженеры
Предварительные знания: Linux администрирование, systemd, GPG
| Версия | Дата | Описание |
|---|---|---|
| 1.0.0 | 2025-12 | Первоначальный релиз с поддержкой Docker |
- Полное руководство:
docs/unix-secrets-manager-guide.md - Документация скриптов:
scripts/README.md - Пример с Telegram ботом:
examples/telegram-bot/README.md
Unix Secrets Manager предоставляет enterprise-grade управление секретами (паролями, API ключами, токенами) используя только встроенные средства Linux. Система обеспечивает:
- Полную безопасность: Секреты никогда не хранятся в открытом виде на диске
- Изоляцию: Каждый сервис имеет доступ только к своим секретам
- Аудит: Полное логирование всех операций с секретами
- Ротацию: Безопасная смена секретов без downtime
- Изолированные (air-gapped) среды
- Встроенные системы и appliances
- Регулируемые среды с ограничениями на внешние зависимости
- Microservices архитектуры
- CI/CD пайплайны
Зашифрованные секреты (.gpg файлы)
↓ [GPG дешифрование]
Расшифрованные секреты (tmpfs RAM)
↓ [systemd credentials]
Изолированные сервисы
↓ [SecretsManager API]
Приложения с секретами
Ключевые компоненты:
- GPG шифрование: Военный уровень защиты секретов
- tmpfs хранилище: Секреты существуют только в RAM
- systemd credentials: Изоляция доступа по сервисам
- POSIX ACL: Детальный контроль прав доступа
Поддерживаемые платформы:
- Linux с systemd
- Docker контейнеры
- Kubernetes (через адаптацию)
unixSecrets/
├── docs/ # 📚 Полная документация
│ └── unix-secrets-manager-guide.md
├── examples/ # 🚀 Примеры использования
│ └── telegram-bot/ # Telegram бот с 50+ секретами
├── scripts/ # ⚙️ Инструменты управления
│ ├── decrypt-secrets.sh # Дешифрация секретов
│ ├── generate-test-secrets.sh # Генерация тестовых секретов
│ └── rotate-secret.sh # Ротация секретов
├── systemd-units/ # 🔧 Systemd конфигурации
│ ├── secrets-decrypt.service # Сервис дешифрации
│ └── example-app.service # Пример сервиса
├── secrets.encrypted/ # 🔒 Зашифрованные секреты
├── samples/ # 💡 Примеры кода
│ └── example-app.py # Python приложение
└── README.md # 📖 Этот файл
Сценарий 1: Веб-приложение с базой данных
Приложение → SecretsManager → DB пароль из /run/secrets/db_password
Сценарий 2: API сервис с внешними интеграциями
API сервис → SecretsManager → API ключи из /run/secrets/
├── stripe_secret_key
├── openai_api_key
└── slack_webhook_url
Сценарий 3: CI/CD пайплайн
Pipeline → SecretsManager → Ключи для развертывания
- Системный администратор: Установка и настройка системы
- Разработчик приложений: Интеграция секретов в код
- DevOps инженер: Автоматизация развертывания
- Оператор безопасности: Мониторинг и аудит
Минимальные требования:
- Linux с systemd (Ubuntu 18.04+, RHEL 7+)
- GPG 2.2+
- 100 MB свободного места
- Root доступ для установки
Рекомендуемые:
- Ubuntu 20.04+ или RHEL 8+
- 1 GB RAM
- SSD хранилище
- Root доступ к системе
- Интернет для загрузки пакетов
- GPG не установлен (будет установлен)
Шаг 1: Установка зависимостей
sudo apt update && sudo apt install -y gnupg systemdШаг 2: Создание GPG ключа
gpg --full-generate-key
# Выберите:
# - Тип ключа: RSA
# - Размер: 4096 бит
# - Идентификатор: secrets@host
# - Без пароля для автоматической работыШаг 3: Развертывание системы
# Копирование скриптов
sudo cp scripts/decrypt-secrets.sh /usr/local/bin/
sudo cp systemd-units/secrets-decrypt.service /etc/systemd/system/
sudo chmod +x /usr/local/bin/decrypt-secrets.sh
# Создание директорий
sudo mkdir -p /etc/secrets.encrypted
sudo chmod 700 /etc/secrets.encryptedШаг 4: Создание тестового секрета
echo "testpassword" | gpg --encrypt --recipient secrets@host > /etc/secrets.encrypted/test.gpgШаг 5: Запуск системы
sudo systemctl daemon-reload
sudo systemctl enable secrets-decrypt.service
sudo systemctl start secrets-decrypt.service- Сервис
secrets-decrypt.serviceзапущен и активен - Секреты расшифрованы в
/run/secrets/ - Доступен тестовый секрет
/run/secrets/test
# Проверка статуса сервиса
sudo systemctl status secrets-decrypt.service
# Проверка секретов
ls -la /run/secrets/
cat /run/secrets/testЦель: Добавить новый секрет в систему
Предусловия:
- Система установлена и работает
- GPG ключ доступен
- Root права
Шаги:
-
Создайте секрет в файле:
echo "my_secret_value" > /tmp/secret.txt
-
Зашифруйте секрет:
gpg --encrypt --recipient secrets@host /tmp/secret.txt
-
Переместите в хранилище:
sudo mv /tmp/secret.txt.gpg /etc/secrets.encrypted/my_secret.gpg
-
Перезапустите сервис:
sudo systemctl restart secrets-decrypt.service
Результат: Секрет доступен в /run/secrets/my_secret
[Service]
LoadCredential=db_password:/run/secrets/db_password
LoadCredential=api_key:/run/secrets/api_key
Environment=CREDENTIALS_DIR=/run/credentials/%n
ExecStart=/usr/bin/myappfrom secrets_manager import SecretsManager
secrets = SecretsManager()
db_password = secrets.get_secret('db_password')
api_key = secrets.get_secret('api_key')[Service]
LoadCredential=db_password:/run/secrets/db_password
DynamicUser=yes
Environment=CREDENTIALS_DIR=/run/credentials/%nimport os
credentials_dir = os.environ['CREDENTIALS_DIR']
with open(f'{credentials_dir}/db_password', 'r') as f:
password = f.read().strip()Симптомы:
secrets-decrypt.service: Failed with result 'exit-code'
Решение:
# Проверить логи
sudo journalctl -u secrets-decrypt.service -n 20
# Возможные причины:
# - Отсутствует GPG ключ secrets@host
# - Повреждены .gpg файлы в /etc/secrets.encrypted/
# - Недостаточно прав доступаСимптомы:
ls /run/secrets/ # пусто или отсутствуют ожидаемые файлыРешение:
# Проверить GPG ключи
gpg --list-keys secrets@host
# Проверить зашифрованные файлы
ls -la /etc/secrets.encrypted/
# Ручная дешифрация для теста
gpg --decrypt /etc/secrets.encrypted/test.gpgСимптомы:
Permission denied: /run/credentials/service/secret
FileNotFoundError: /run/credentials/service/secret
Решение:
# Проверить systemd конфигурацию сервиса
sudo systemctl cat your-service.service
# Проверить что LoadCredential указан правильно
grep LoadCredential /etc/systemd/system/your-service.service
# Проверить права на файлы секретов
ls -la /run/secrets/- Переход на другую систему управления секретами
- Вывод сервера из эксплуатации
- Изменение требований безопасности
- Миграция на новую версию
Шаги:
-
Создать резервную копию (рекомендуется):
sudo tar -czf secrets-backup-$(date +%Y%m%d).tar.gz /etc/secrets.encrypted/ gpg --encrypt --recipient your-email@example.com secrets-backup-*.tar.gz
-
Остановить все зависимые сервисы:
sudo systemctl stop secrets-decrypt.service sudo systemctl stop your-app.service # все сервисы использующие секреты -
Удалить компоненты системы:
# Удалить скрипты sudo rm /usr/local/bin/decrypt-secrets.sh # Удалить systemd unit sudo rm /etc/systemd/system/secrets-decrypt.service sudo systemctl daemon-reload # Удалить секреты sudo rm -rf /etc/secrets.encrypted/ sudo rm -rf /run/secrets/
-
Очистить GPG ключи (опционально):
gpg --delete-secret-key secrets@host gpg --delete-key secrets@host
-
Перезагрузить систему для очистки RAM:
sudo reboot
| Термин | Определение |
|---|---|
| Секрет | Конфиденциальная информация (пароль, API ключ, токен) |
| GPG | GNU Privacy Guard - система шифрования с открытым ключом |
| tmpfs | Виртуальная файловая система в RAM |
| systemd credentials | Механизм безопасной передачи секретов в сервисы |
| DynamicUser | Автоматическое создание изолированных пользователей systemd |
| POSIX ACL | Система контроля доступа Portable Operating System Interface |
| Сокращение | Расшифровка |
|---|---|
| ACL | Access Control List |
| API | Application Programming Interface |
| GPG | GNU Privacy Guard |
| RAM | Random Access Memory |
| UUID | Universally Unique Identifier |
- Установка: 3. Установка и настройка
- Использование: 4. Процедуры использования
- Устранение неисправностей: 5. Устранение неисправностей
- Безопасность: 2.3 Архитектура системы
- Docker: Примеры
- Ротация секретов: 4.1 Добавление секретов
- 📖 Полное руководство администратора:
docs/unix-secrets-manager-guide.md - ⚙️ Документация скриптов:
scripts/README.md - 🚀 Пример с Telegram ботом:
examples/telegram-bot/README.md
-
🐳 Docker контейнеры:
examples/telegram-bot/- Telegram бот с 50+ секретами
- Полная интеграция с Docker Compose
- Health checks и monitoring
-
🔧 Systemd сервисы:
systemd-units/- Примеры конфигурации systemd
- LoadCredential интеграция
Этот проект распространяется под лицензией MIT и может свободно использоваться в коммерческих и некоммерческих целях.
Unix Secrets Manager v1.0.0 - Enterprise-grade управление секретами на Linux 🎉