try to fix security/advisories/GHSA-5x57-h7cw-9jmw

This commit is contained in:
iqubik
2026-03-31 00:38:00 +03:00
parent 295a582828
commit 41265ccf37
4 changed files with 168 additions and 19 deletions
+12 -12
View File
@@ -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
View File
@@ -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
#################################
+13 -3
View File
@@ -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',
+127 -4
View File
@@ -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
#################################