init_guac
This commit is contained in:
298
guacamole_test_11_26/docs/HARDCODED_PASSWORDS_FIX.md
Executable file
298
guacamole_test_11_26/docs/HARDCODED_PASSWORDS_FIX.md
Executable 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` - миграция существующих установок
|
||||
|
||||
---
|
||||
|
||||
**Теперь система полностью защищена от захардкоженных паролей!** 🔒
|
||||
|
||||
Reference in New Issue
Block a user