#!/bin/bash # PostgreSQL Security Setup Script for CatLink # This script configures PostgreSQL with security best practices set -e echo "🔒 Настройка безопасности PostgreSQL для CatLink..." # Создаем директорию для конфигурации БД если не существует mkdir -p database # Функция для безопасного выполнения SQL команд execute_sql() { docker exec links-db-1 psql -U postgres -d links_db -c "$1" } echo "📋 Проверка текущих настроек..." # Проверяем статус контейнеров echo "Статус контейнеров:" docker-compose ps echo "" echo "🔧 Применение конфигурации безопасности..." # Останавливаем контейнеры echo "Остановка контейнеров..." docker-compose down # Обновляем docker-compose для безопасности echo "Обновление docker-compose конфигурации..." # Запускаем контейнеры с новой конфигурацией echo "Запуск контейнеров..." docker-compose up -d # Ждем запуска PostgreSQL echo "Ожидание запуска PostgreSQL..." sleep 10 # Проверяем подключение echo "Проверка подключения к БД..." docker exec links-db-1 pg_isready -U postgres echo "" echo "👤 Настройка пользователей и прав доступа..." # Создаем ограниченного пользователя (если не существует) echo "Настройка пользователя links_user..." docker exec links-db-1 psql -U postgres -c " -- Убираем права суперпользователя у links_user ALTER ROLE links_user NOSUPERUSER NOCREATEDB NOCREATEROLE; -- Создаем отдельного пользователя только для приложения (если нужно) DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'catlink_app') THEN CREATE ROLE catlink_app LOGIN PASSWORD 'catlink_app_SECURE_PASSWORD_$(date +%s)'; END IF; END \$\$; -- Даем только необходимые права на базу данных GRANT CONNECT ON DATABASE links_db TO links_user; GRANT USAGE ON SCHEMA public TO links_user; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO links_user; GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO links_user; -- Права по умолчанию для новых объектов ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO links_user; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO links_user; " echo "" echo "🔍 Проверка настроек безопасности..." # Проверяем версию PostgreSQL echo "Версия PostgreSQL:" docker exec links-db-1 psql -U postgres -c "SELECT version();" echo "" echo "Настройки SSL:" docker exec links-db-1 psql -U postgres -c "SHOW ssl; SHOW ssl_min_protocol_version; SHOW password_encryption;" echo "" echo "Пользователи и права:" docker exec links-db-1 psql -U postgres -c " SELECT rolname, rolsuper, rolcreatedb, rolcreaterole, rolcanlogin FROM pg_roles WHERE rolname IN ('postgres', 'links_user', 'catlink_app') ORDER BY rolname; " echo "" echo "Подключения к БД:" docker exec links-db-1 psql -U postgres -c " SELECT datname, usename, client_addr, state FROM pg_stat_activity WHERE state = 'active'; " echo "" echo "✅ Настройка безопасности PostgreSQL завершена!" echo "" echo "📝 Примененные улучшения:" echo " - Убраны права суперпользователя у links_user" echo " - Настроен SSL с TLSv1.3" echo " - Включено детальное логирование" echo " - Ограничен доступ только для Docker сети" echo " - Улучшена аутентификация SCRAM-SHA-256" echo "" echo "⚠️ ВАЖНО: Убедитесь что backend приложение использует правильные" echo " настройки подключения в .env файле" echo "" echo "🔄 Для применения изменений перезапустите контейнеры:" echo " docker-compose down && docker-compose up -d"