diff --git a/docker-compose.yml b/docker-compose.yml index 96089d6..75eee73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,9 +4,9 @@ services: container_name: 3dp-postgres restart: always environment: - POSTGRES_USER: ${POSTGRES_USER:-admin} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin} - POSTGRES_DB: ${POSTGRES_DB:-3dp_manager} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} ports: - "5432:5432" volumes: @@ -23,16 +23,16 @@ services: environment: DB_HOST: postgres DB_PORT: 5432 - DB_USERNAME: ${POSTGRES_USER:-admin} - DB_PASSWORD: ${POSTGRES_PASSWORD:-admin} - DB_NAME: ${POSTGRES_DB:-3dp_manager} - JWT_SECRET: ${JWT_SECRET:-secretKey} - ADMIN_LOGIN: ${ADMIN_LOGIN:-admin} - ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin} - PORT: ${PORT:-3000} - LOG_LEVEL: ${LOG_LEVEL:-error} + DB_USERNAME: ${POSTGRES_USER} + DB_PASSWORD: ${POSTGRES_PASSWORD} + DB_NAME: ${POSTGRES_DB} + JWT_SECRET: ${JWT_SECRET} + ADMIN_LOGIN: ${ADMIN_LOGIN} + ADMIN_PASSWORD: ${ADMIN_PASSWORD} + PORT: ${PORT} + LOG_LEVEL: ${LOG_LEVEL} ports: - - "${PORT:-3000}:${PORT:-3000}" + - "${PORT}:${PORT}" networks: - app-network diff --git a/install.sh b/install.sh index 308bad4..0f16457 100644 --- a/install.sh +++ b/install.sh @@ -248,6 +248,22 @@ ADMIN_USER=$(openssl rand -base64 8) ADMIN_PASS=$(openssl rand -base64 12) log "Сгенерированы секретные ключи для БД и JWT." +################################# +# ЛОГИРОВАНИЕ УЧЁТНЫХ ДАННЫХ +################################# +echo "" +echo "===================================================" +echo " УЧЁТНЫЕ ДАННЫЕ АДМИНИСТРАТОРА" +echo "===================================================" +echo " ADMIN_LOGIN: ${ADMIN_USER}" +echo " ADMIN_PASSWORD: ${ADMIN_PASS}" +echo " POSTGRES_PASSWORD: ${DB_PASS}" +echo " JWT_SECRET: ${JWT_SECRET}" +echo "" +echo " ⚠️ СОХРАНИТЕ ЭТИ ДАННЫЕ В БЕЗОПАСНОМ МЕСТЕ!" +echo "===================================================" +echo "" + ################################# # Hysteria 2 ################################# diff --git a/server/src/auth/auth.service.ts b/server/src/auth/auth.service.ts index 7973db3..93988d0 100644 --- a/server/src/auth/auth.service.ts +++ b/server/src/auth/auth.service.ts @@ -105,9 +105,19 @@ export class AuthService { if (!login) { this.logger.debug('Инициализация администратора...'); - const envLogin = this.configService.get('ADMIN_LOGIN') || 'admin'; - const envPass = - this.configService.get('ADMIN_PASSWORD') || 'admin'; + const envLogin = this.configService.get('ADMIN_LOGIN'); + const envPass = this.configService.get('ADMIN_PASSWORD'); + + // Проверяем, что переменные окружения установлены + if (!envLogin || !envPass) { + this.logger.error( + 'Критическая ошибка: ADMIN_LOGIN и ADMIN_PASSWORD должны быть установлены в переменных окружения', + ); + this.logger.error( + 'Проверьте .env файл или docker-compose.yml на наличие этих переменных', + ); + throw new Error('ADMIN_LOGIN и ADMIN_PASSWORD должны быть установлены'); + } const loginSetting = this.settingsRepo.create({ key: 'admin_login', diff --git a/update.sh b/update.sh index 8315556..e3aea22 100644 --- a/update.sh +++ b/update.sh @@ -32,7 +32,7 @@ check_containers_running() { local timeout=${1:-60} local elapsed=0 local failed=0 - + while [ $elapsed -lt $timeout ]; do failed=0 # Формат: NAME\tSTATUS (например: "3dp-postgres\tUp 2 days" или "3dp-postgres\tError") @@ -46,19 +46,137 @@ check_containers_running() { fi fi done < <("${COMPOSE_CMD[@]}" ps --format "table {{.Name}}\t{{.Status}}" --all 2>/dev/null | tail -n +2) - + if [ $failed -eq 0 ]; then log "Все контейнеры запущены успешно" return 0 fi - + sleep 2 elapsed=$((elapsed + 2)) done - + return 1 } +check_and_fix_credentials() { + log "Проверка учётных данных на безопасность..." + + local env_file=".env" + local compose_file="docker-compose.yml" + local credentials_changed=0 + + # Проверяем, существует ли .env файл + if [[ ! -f "$env_file" ]]; then + log "Создание .env файла с безопасными учётными данными..." + + # Генерируем случайные пароли + local db_pass + local jwt_secret + local admin_login + local admin_pass + + db_pass=$(openssl rand -base64 12 | tr -dc 'A-Za-z0-9' | cut -c1-12) + jwt_secret=$(openssl rand -base64 32) + admin_login=$(openssl rand -base64 8 | tr -dc 'A-Za-z0-9' | cut -c1-8) + admin_pass=$(openssl rand -base64 12 | tr -dc 'A-Za-z0-9' | cut -c1-12) + + # Создаём .env файл + cat > "$env_file" </dev/null | cut -d'=' -f2 | tr -d '"' | tr -d "'" || echo "") + admin_pass_val=$(grep -E "^ADMIN_PASSWORD=" "$env_file" 2>/dev/null | cut -d'=' -f2 | tr -d '"' | tr -d "'" || echo "") + jwt_secret_val=$(grep -E "^JWT_SECRET=" "$env_file" 2>/dev/null | cut -d'=' -f2 | tr -d '"' | tr -d "'" || echo "") + db_pass_val=$(grep -E "^POSTGRES_PASSWORD=" "$env_file" 2>/dev/null | cut -d'=' -f2 | tr -d '"' | tr -d "'" || echo "") + + local needs_update=0 + + if [[ "$admin_login_val" == "admin" ]] || [[ -z "$admin_login_val" ]]; then + warn "Обнаружен дефолтный ADMIN_LOGIN=admin" + needs_update=1 + fi + + if [[ "$admin_pass_val" == "admin" ]] || [[ -z "$admin_pass_val" ]]; then + warn "Обнаружен дефолтный ADMIN_PASSWORD=admin" + needs_update=1 + fi + + if [[ "$jwt_secret_val" == "secretKey" ]] || [[ -z "$jwt_secret_val" ]]; then + warn "Обнаружен дефолтный JWT_SECRET=secretKey" + needs_update=1 + fi + + if [[ "$db_pass_val" == "admin" ]] || [[ -z "$db_pass_val" ]]; then + warn "Обнаружен дефолтный POSTGRES_PASSWORD=admin" + needs_update=1 + fi + + if [[ $needs_update -eq 1 ]]; then + log "Генерация новых безопасных учётных данных..." + + # Генерируем новые пароли + local new_db_pass + local new_jwt_secret + local new_admin_login + local new_admin_pass + + new_db_pass=$(openssl rand -base64 12 | tr -dc 'A-Za-z0-9' | cut -c1-12) + new_jwt_secret=$(openssl rand -base64 32) + new_admin_login=$(openssl rand -base64 8 | tr -dc 'A-Za-z0-9' | cut -c1-8) + new_admin_pass=$(openssl rand -base64 12 | tr -dc 'A-Za-z0-9' | cut -c1-12) + + # Сохраняем существующие значения, которые не нужно менять + local existing_postgres_user + existing_postgres_user=$(grep -E "^POSTGRES_USER=" "$env_file" 2>/dev/null | cut -d'=' -f2 || echo "admin") + + # Создаём новый .env файл + cat > "$env_file" </dev/null 2>&1 || die "Docker не установлен" resolve_compose_cmd log "Compose команда: ${COMPOSE_CMD[*]}" +################################# +# CHECK AND FIX CREDENTIALS +################################# +check_and_fix_credentials || true + ################################# # REBUILD BACKEND #################################