Files
Remote-Control-Center/guacamole_test_11_26/docs/HARDCODED_PASSWORDS_FIX.md
2025-11-25 09:58:37 +03:00

8.9 KiB
Executable File
Raw Blame History

🔒 Исправление захардкоженных паролей

Что исправлено:

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.py
  • api/auth/ecdh_session.py
  • api/auth/csrf_protection.py
  • api/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: Есть ли еще захардкоженные пароли?

Были найдены и ИСПРАВЛЕНЫ:

  1. REDIS_PASSWORD - fallback "redis_pass" удален
  2. POSTGRES_PASSWORD - fallback "guacamole_pass" удален
  3. 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.env
  • POSTGRES_PASSWORD установлен в production.env
  • SYSTEM_ADMIN_USERNAME установлен (можно менять!)
  • SYSTEM_ADMIN_PASSWORD установлен в production.env
  • Deploy скрипт запущен и прошел все проверки
  • Контейнеры запустились успешно
  • Логи подтверждают использование паролей из .env
  • Дефолтные пароли НИГДЕ не используются

📚 Связанные документы:

  • AUTO_DEPLOY_GUIDE.md - автоматический деплой
  • QUICK_START_CUSTOM_ADMIN.md - быстрый старт
  • MIGRATION_SECURITY_UPDATE.md - миграция существующих установок

Теперь система полностью защищена от захардкоженных паролей! 🔒