Files
links/scripts/setup-db-security.sh
Andrey K. Choi 735c1984f9
Some checks failed
continuous-integration/drone/push Build is failing
secrutiry update
2025-11-04 13:44:00 +09:00

117 lines
4.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"