117 lines
4.5 KiB
Bash
Executable File
117 lines
4.5 KiB
Bash
Executable File
#!/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" |