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

6.0 KiB
Executable File
Raw Blame History

🔒 Миграция: Обязательные системные credentials

⚠️ Критическое обновление безопасности

Начиная с этой версии, API ТРЕБУЕТ явной установки системных credentials.

Это изменение устраняет критическую уязвимость - захардкоженные дефолтные пароли в коде.


📋 Что изменилось?

До:

# ❌ НЕБЕЗОПАСНО: Дефолтные значения в коде
self._system_username = os.getenv("SYSTEM_ADMIN_USERNAME", "guacadmin")
self._system_password = os.getenv("SYSTEM_ADMIN_PASSWORD", "guacadmin")

После:

# ✅ БЕЗОПАСНО: Обязательные переменные окружения
self._system_username = os.getenv("SYSTEM_ADMIN_USERNAME")
self._system_password = os.getenv("SYSTEM_ADMIN_PASSWORD")

if not self._system_username or not self._system_password:
    raise ValueError("Credentials required!")

🚀 Быстрая миграция (2 минуты)

Шаг 1: Генерируем безопасный пароль

openssl rand -base64 32

Пример вывода: Xk7N9pQ2vT8mL5wR3jH6yU4aF1sD0eG9


Шаг 2: Меняем пароль в Guacamole

  1. Войдите в Guacamole: https://mc.exbytestudios.com
  2. SettingsUsersguacadmin
  3. Change password → вставьте сгенерированный пароль
  4. Сохраните

Шаг 3: Обновляем production.env

cd /usr/local/guacomole_project
nano GuacamoleRemoteAccess/production.env

Найдите и обновите:

# 🔒 System Admin Account
SYSTEM_ADMIN_USERNAME=guacadmin
SYSTEM_ADMIN_PASSWORD=Xk7N9pQ2vT8mL5wR3jH6yU4aF1sD0eG9  # ⬅️ Ваш новый пароль!

⚠️ Пароли ДОЛЖНЫ совпадать!


Шаг 4: Перезапускаем API

cd GuacamoleRemoteAccess
docker compose restart remote_access_api

Шаг 5: Проверяем работу

# Проверяем запуск API
docker compose logs remote_access_api | tail -20

# ✅ Должно быть:
# "System token refreshed successfully"
# "Application startup complete"

# ❌ Если ошибка:
# "SYSTEM_ADMIN_USERNAME and SYSTEM_ADMIN_PASSWORD environment variables are required"
# → Вернитесь к Шагу 3

🔄 Для существующих установок с дефолтным паролем

Если вы ранее использовали дефолтный пароль guacadmin, ваша установка продолжит работать, но:

⚠️ Рекомендуем немедленно обновить!

# 1. Сгенерируйте новый пароль
NEW_PASSWORD=$(openssl rand -base64 32)
echo "Новый пароль: $NEW_PASSWORD"

# 2. Обновите в Guacamole UI (см. выше)

# 3. Обновите production.env
echo "SYSTEM_ADMIN_PASSWORD=$NEW_PASSWORD" >> GuacamoleRemoteAccess/production.env

# 4. Перезапустите
cd GuacamoleRemoteAccess && docker compose restart remote_access_api

🆘 Troubleshooting

Проблема: API не запускается после обновления

Логи:

ValueError: SYSTEM_ADMIN_USERNAME and SYSTEM_ADMIN_PASSWORD environment 
variables are required

Решение:

# Проверьте наличие переменных в production.env
grep SYSTEM_ADMIN GuacamoleRemoteAccess/production.env

# Должно быть:
# SYSTEM_ADMIN_USERNAME=guacadmin
# SYSTEM_ADMIN_PASSWORD=какой-то_пароль

# Если пусто - добавьте:
echo "SYSTEM_ADMIN_USERNAME=guacadmin" >> GuacamoleRemoteAccess/production.env
echo "SYSTEM_ADMIN_PASSWORD=ваш_пароль_из_guacamole" >> GuacamoleRemoteAccess/production.env

Проблема: Failed to authenticate system user

Причина: Пароль в production.env не совпадает с паролем в Guacamole.

Решение:

  1. Войдите в Guacamole UI
  2. Убедитесь какой пароль установлен для guacadmin
  3. Обновите SYSTEM_ADMIN_PASSWORD в production.env
  4. Перезапустите API

Проблема: Хочу продолжить использовать guacadmin:guacadmin

⚠️ НЕ РЕКОМЕНДУЕТСЯ для production!

Но если очень нужно (только для dev/test):

# production.env
SYSTEM_ADMIN_USERNAME=guacadmin
SYSTEM_ADMIN_PASSWORD=guacadmin

⚠️ КРИТИЧНО: Эта конфигурация небезопасна и может быть скомпрометирована!


Checklist миграции

  • Сгенерирован новый пароль
  • Пароль guacadmin изменен в Guacamole UI
  • production.env обновлен
  • API успешно перезапущен
  • Логи подтверждают успешную аутентификацию
  • Дефолтный пароль больше НЕ используется

📚 Дополнительная информация

  • SECURITY_SETUP.md - полная инструкция по безопасной настройке
  • DEPLOYMENT_API_GUIDE.md - руководство по деплою
  • production.env - файл с переменными окружения

Время миграции: ~2-5 минут
Downtime: ~10 секунд (только перезапуск API)
Риски: Минимальные (откат = вернуть старый пароль)