try to fix security/advisories/GHSA-5x57-h7cw-9jmw
This commit is contained in:
+12
-12
@@ -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
|
||||
|
||||
|
||||
+16
@@ -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
|
||||
#################################
|
||||
|
||||
@@ -105,9 +105,19 @@ export class AuthService {
|
||||
|
||||
if (!login) {
|
||||
this.logger.debug('Инициализация администратора...');
|
||||
const envLogin = this.configService.get<string>('ADMIN_LOGIN') || 'admin';
|
||||
const envPass =
|
||||
this.configService.get<string>('ADMIN_PASSWORD') || 'admin';
|
||||
const envLogin = this.configService.get<string>('ADMIN_LOGIN');
|
||||
const envPass = this.configService.get<string>('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',
|
||||
|
||||
@@ -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" <<EOF
|
||||
POSTGRES_USER=admin
|
||||
POSTGRES_PASSWORD=${db_pass}
|
||||
POSTGRES_DB=3dp_manager
|
||||
JWT_SECRET=${jwt_secret}
|
||||
ADMIN_LOGIN=${admin_login}
|
||||
ADMIN_PASSWORD=${admin_pass}
|
||||
EOF
|
||||
|
||||
log "Сгенерированы новые учётные данные:"
|
||||
log " ADMIN_LOGIN: ${admin_login}"
|
||||
log " ADMIN_PASSWORD: ${admin_pass}"
|
||||
log " POSTGRES_PASSWORD: ${db_pass}"
|
||||
log " JWT_SECRET: ${jwt_secret}"
|
||||
log "⚠️ Сохраните эти данные в безопасном месте!"
|
||||
|
||||
credentials_changed=1
|
||||
else
|
||||
# Проверяем, не используются ли дефолтные значения
|
||||
local admin_login_val
|
||||
local admin_pass_val
|
||||
local jwt_secret_val
|
||||
local db_pass_val
|
||||
|
||||
admin_login_val=$(grep -E "^ADMIN_LOGIN=" "$env_file" 2>/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" <<EOF
|
||||
POSTGRES_USER=${existing_postgres_user:-admin}
|
||||
POSTGRES_PASSWORD=${new_db_pass}
|
||||
POSTGRES_DB=3dp_manager
|
||||
JWT_SECRET=${new_jwt_secret}
|
||||
ADMIN_LOGIN=${new_admin_login}
|
||||
ADMIN_PASSWORD=${new_admin_pass}
|
||||
EOF
|
||||
|
||||
log "Сгенерированы новые учётные данные:"
|
||||
log " ADMIN_LOGIN: ${new_admin_login}"
|
||||
log " ADMIN_PASSWORD: ${new_admin_pass}"
|
||||
log " POSTGRES_PASSWORD: ${new_db_pass}"
|
||||
log " JWT_SECRET: ${new_jwt_secret}"
|
||||
log "⚠️ Сохраните эти данные в безопасном месте!"
|
||||
|
||||
credentials_changed=1
|
||||
else
|
||||
log "Учётные данные безопасны ✅"
|
||||
fi
|
||||
fi
|
||||
|
||||
return $credentials_changed
|
||||
}
|
||||
|
||||
need_root() {
|
||||
[[ $EUID -eq 0 ]] || die "Запускать только от root"
|
||||
}
|
||||
@@ -86,6 +204,11 @@ command -v docker >/dev/null 2>&1 || die "Docker не установлен"
|
||||
resolve_compose_cmd
|
||||
log "Compose команда: ${COMPOSE_CMD[*]}"
|
||||
|
||||
#################################
|
||||
# CHECK AND FIX CREDENTIALS
|
||||
#################################
|
||||
check_and_fix_credentials || true
|
||||
|
||||
#################################
|
||||
# REBUILD BACKEND
|
||||
#################################
|
||||
|
||||
Reference in New Issue
Block a user