init_guac

This commit is contained in:
root
2025-11-25 09:58:37 +03:00
parent 68c8f0e80d
commit 9d5bdd57a7
57 changed files with 18272 additions and 0 deletions

View File

@ -0,0 +1,298 @@
# 🔒 Исправление захардкоженных паролей
## ✅ **Что исправлено:**
### **1. Убраны fallback пароли из кода**
#### **До (НЕБЕЗОПАСНО):**
```python
# ❌ Если не установлен - использует "redis_pass"
password=os.getenv("REDIS_PASSWORD", "redis_pass")
# ❌ Если не установлен - использует "guacamole_pass"
'password': os.getenv('POSTGRES_PASSWORD', 'guacamole_pass')
```
#### **После (БЕЗОПАСНО):**
```python
# ✅ Если не установлен - приложение упадет (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 скрипт **автоматически проверяет** все критичные пароли:
```bash
[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**
```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) при первом запуске?**
**ДА!** Полностью поддерживается:
```env
# 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: Отразятся ли изменения на эти участки?**
**ДА! Полностью отражаются:**
#### **При деплое:**
```bash
./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: Генерируем пароли**
```bash
# Генерируем 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**
```bash
cd GuacamoleRemoteAccess
nano production.env
```
**Вставляем сгенерированные пароли:**
```env
REDIS_PASSWORD=Xk7N9pQ2vT8mL5wR3jH6yU4aF1sD0eG9
POSTGRES_PASSWORD=aB3cD4eF5gH6iJ7kL8mN9oP0qR1sT2u
SYSTEM_ADMIN_USERNAME=admin # ⬅️ Можно менять!
SYSTEM_ADMIN_PASSWORD=uV3wX4yZ5aB6cD7eF8gH9iJ0kL1mN2o
```
---
### **Шаг 3: Запускаем deploy**
```bash
chmod +x deploy.sh
./deploy.sh
```
**Скрипт автоматически:**
- ✅ Проверит что все пароли установлены
- ✅ Проверит что пароли не дефолтные
- ✅ Сгенерирует SQL с вашими credentials
- ✅ Запустит контейнеры с безопасными паролями
---
## 🛡️ **Уровни защиты:**
### **1. Deploy скрипт (предотвращение)**
```bash
# Не даст запустить с небезопасными паролями
[ERROR] REDIS_PASSWORD is not set or using default value!
```
### **2. Docker Compose (конфигурация)**
```yaml
# Использует ТОЛЬКО переменные окружения (без fallback)
REDIS_PASSWORD: ${REDIS_PASSWORD}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
```
### **3. Python код (runtime)**
```python
# Если пароль не установлен - приложение упадет
password=os.getenv("REDIS_PASSWORD")
# None → Redis connection error → crash
```
**Три уровня защиты = невозможно запустить с небезопасными паролями!**
---
## 📊 **Сравнение ДО и ПОСЛЕ:**
### **❌ ДО (Небезопасно):**
```bash
# Можно запустить вообще без паролей
docker compose up -d
# → Redis: redis_pass
# → PostgreSQL: guacamole_pass
# → Guacamole Admin: guacadmin:guacadmin
# ⚠️ КРИТИЧЕСКАЯ УЯЗВИМОСТЬ!
```
### **✅ ПОСЛЕ (Безопасно):**
```bash
# БЕЗ паролей в .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!"
**Решение:**
```bash
# Добавьте в production.env:
REDIS_PASSWORD=$(openssl rand -base64 32)
```
---
### Проблема: "Redis connection error"
**Причина:** Пароль в .env не совпадает с паролем Redis.
**Решение:**
```bash
# Проверьте что docker-compose.yml использует переменную
grep REDIS_PASSWORD docker-compose.yml
# Должно быть:
# REDIS_PASSWORD: ${REDIS_PASSWORD}
# БЕЗ :-default_value
```
---
### Проблема: "PostgreSQL authentication failed"
**Причина:** Пароль в .env не совпадает с паролем PostgreSQL.
**Решение:**
```bash
# Если БД уже создана с другим паролем - нужно пересоздать 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` - миграция существующих установок
---
**Теперь система полностью защищена от захардкоженных паролей!** 🔒