secrutiry update
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2025-11-04 13:44:00 +09:00
parent 2b3cb736d5
commit 735c1984f9
9 changed files with 705 additions and 3 deletions

117
scripts/setup-db-security.sh Executable file
View File

@@ -0,0 +1,117 @@
#!/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"