8.9 KiB
Executable File
8.9 KiB
Executable File
🔒 Исправление захардкоженных паролей
✅ Что исправлено:
1. Убраны fallback пароли из кода
До (НЕБЕЗОПАСНО):
# ❌ Если не установлен - использует "redis_pass"
password=os.getenv("REDIS_PASSWORD", "redis_pass")
# ❌ Если не установлен - использует "guacamole_pass"
'password': os.getenv('POSTGRES_PASSWORD', 'guacamole_pass')
После (БЕЗОПАСНО):
# ✅ Если не установлен - приложение упадет (fail-safe)
password=os.getenv("REDIS_PASSWORD")
# ✅ Если не установлен - приложение упадет (fail-safe)
'password': os.getenv('POSTGRES_PASSWORD')
Измененные файлы:
api/auth/redis_storage.pyapi/auth/ecdh_session.pyapi/auth/csrf_protection.pyapi/auth/saved_machines_db.py
2. Добавлена проверка в deploy.sh
Deploy скрипт автоматически проверяет все критичные пароли:
[INFO] Checking critical passwords...
[ERROR] REDIS_PASSWORD is not set or using default value!
[ERROR] POSTGRES_PASSWORD is not set or using default value!
[ERROR]
[ERROR] Critical passwords are missing or insecure!
[ERROR] Update the following in production.env:
[ERROR] - REDIS_PASSWORD=<secure_random_password>
[ERROR] - POSTGRES_PASSWORD=<secure_random_password>
[ERROR] - SYSTEM_ADMIN_PASSWORD=<secure_random_password>
Деплой НЕ ЗАПУСТИТСЯ без установленных паролей!
3. Обновлен production.env
# 🔒 КРИТИЧНЫЕ ПАРОЛИ - ОБЯЗАТЕЛЬНО измените перед деплоем!
# Redis
REDIS_PASSWORD=CHANGE_ME_$(openssl rand -base64 32)
# PostgreSQL
POSTGRES_PASSWORD=CHANGE_ME_$(openssl rand -base64 32)
# Guacamole Admin
SYSTEM_ADMIN_USERNAME=guacadmin
SYSTEM_ADMIN_PASSWORD=CHANGE_ME_$(openssl rand -base64 32)
🎯 Ответы на вопросы:
Q1: Можно ли менять логин (username) при первом запуске?
✅ ДА! Полностью поддерживается:
# production.env
SYSTEM_ADMIN_USERNAME=admin # ⬅️ Любое имя!
SYSTEM_ADMIN_PASSWORD=SecurePass!
Deploy скрипт автоматически:
- Генерирует SQL с вашим username
- Проверяет создание в БД
- API использует эти credentials
Q2: Есть ли еще захардкоженные пароли?
Были найдены и ИСПРАВЛЕНЫ:
- ✅
REDIS_PASSWORD- fallback "redis_pass" удален - ✅
POSTGRES_PASSWORD- fallback "guacamole_pass" удален - ✅
SYSTEM_ADMIN_PASSWORD- проверяется при деплое
Теперь ВСЕ пароли обязательны!
Q3: Отразятся ли изменения на эти участки?
✅ ДА! Полностью отражаются:
При деплое:
./deploy.sh
[INFO] Loading environment variables...
[INFO] Checking critical passwords...
[OK] All critical passwords are set
[INFO] Checking admin credentials...
[OK] Custom password detected - generating secure admin SQL
При запуске контейнеров:
- Redis использует
$REDIS_PASSWORDиз .env - PostgreSQL использует
$POSTGRES_PASSWORDиз .env - API использует все эти пароли из environment
Никаких дефолтов не осталось!
🚀 Как использовать:
Шаг 1: Генерируем пароли
# Генерируем 3 безопасных пароля
echo "REDIS_PASSWORD=$(openssl rand -base64 32)"
echo "POSTGRES_PASSWORD=$(openssl rand -base64 32)"
echo "SYSTEM_ADMIN_PASSWORD=$(openssl rand -base64 32)"
Шаг 2: Обновляем production.env
cd GuacamoleRemoteAccess
nano production.env
Вставляем сгенерированные пароли:
REDIS_PASSWORD=Xk7N9pQ2vT8mL5wR3jH6yU4aF1sD0eG9
POSTGRES_PASSWORD=aB3cD4eF5gH6iJ7kL8mN9oP0qR1sT2u
SYSTEM_ADMIN_USERNAME=admin # ⬅️ Можно менять!
SYSTEM_ADMIN_PASSWORD=uV3wX4yZ5aB6cD7eF8gH9iJ0kL1mN2o
Шаг 3: Запускаем deploy
chmod +x deploy.sh
./deploy.sh
Скрипт автоматически:
- ✅ Проверит что все пароли установлены
- ✅ Проверит что пароли не дефолтные
- ✅ Сгенерирует SQL с вашими credentials
- ✅ Запустит контейнеры с безопасными паролями
🛡️ Уровни защиты:
1. Deploy скрипт (предотвращение)
# Не даст запустить с небезопасными паролями
[ERROR] REDIS_PASSWORD is not set or using default value!
2. Docker Compose (конфигурация)
# Использует ТОЛЬКО переменные окружения (без fallback)
REDIS_PASSWORD: ${REDIS_PASSWORD}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
3. Python код (runtime)
# Если пароль не установлен - приложение упадет
password=os.getenv("REDIS_PASSWORD")
# None → Redis connection error → crash
Три уровня защиты = невозможно запустить с небезопасными паролями!
📊 Сравнение ДО и ПОСЛЕ:
❌ ДО (Небезопасно):
# Можно запустить вообще без паролей
docker compose up -d
# → Redis: redis_pass
# → PostgreSQL: guacamole_pass
# → Guacamole Admin: guacadmin:guacadmin
# ⚠️ КРИТИЧЕСКАЯ УЯЗВИМОСТЬ!
✅ ПОСЛЕ (Безопасно):
# БЕЗ паролей в .env
./deploy.sh
# [ERROR] REDIS_PASSWORD is not set!
# [ERROR] POSTGRES_PASSWORD is not set!
# [ERROR] SYSTEM_ADMIN_PASSWORD must be set!
# Exit 1 - деплой НЕ ЗАПУСТИТСЯ
# С паролями в .env
./deploy.sh
# [OK] All critical passwords are set
# [OK] Custom password detected
# [OK] Containers started successfully
# ✅ ВСЁ БЕЗОПАСНО!
🆘 Troubleshooting:
Проблема: "REDIS_PASSWORD is not set!"
Решение:
# Добавьте в production.env:
REDIS_PASSWORD=$(openssl rand -base64 32)
Проблема: "Redis connection error"
Причина: Пароль в .env не совпадает с паролем Redis.
Решение:
# Проверьте что docker-compose.yml использует переменную
grep REDIS_PASSWORD docker-compose.yml
# Должно быть:
# REDIS_PASSWORD: ${REDIS_PASSWORD}
# БЕЗ :-default_value
Проблема: "PostgreSQL authentication failed"
Причина: Пароль в .env не совпадает с паролем PostgreSQL.
Решение:
# Если БД уже создана с другим паролем - нужно пересоздать volume
docker compose down -v
# ⚠️ ВНИМАНИЕ: Это удалит все данные!
# Обновите POSTGRES_PASSWORD в .env
nano production.env
# Запустите заново
./deploy.sh
✅ Checklist:
- Сгенерированы 3 безопасных пароля (minimum 20 символов)
REDIS_PASSWORDустановлен в production.envPOSTGRES_PASSWORDустановлен в production.envSYSTEM_ADMIN_USERNAMEустановлен (можно менять!)SYSTEM_ADMIN_PASSWORDустановлен в production.env- Deploy скрипт запущен и прошел все проверки
- Контейнеры запустились успешно
- Логи подтверждают использование паролей из .env
- Дефолтные пароли НИГДЕ не используются
📚 Связанные документы:
AUTO_DEPLOY_GUIDE.md- автоматический деплойQUICK_START_CUSTOM_ADMIN.md- быстрый стартMIGRATION_SECURITY_UPDATE.md- миграция существующих установок
Теперь система полностью защищена от захардкоженных паролей! 🔒