Требования регуляторов, шифрование данных, аудит, политики доступа, соответствие 152-ФЗ и GDPR.
Требования регуляторов, шифрование данных, аудит, политики доступа, соответствие 152-ФЗ и GDPR
Вы развёртываете Gitea в российской компании. На серверах хранится код, персональные данные разработчиков, служебная информация. С 1 сентября 2023 года ужесточились требования Роскомнадзора к обработке персональных данных. Штрафы за нарушения 152-ФЗ достигают 500 000 рублей за первое нарушение и 10 млн рублей за повторные.
Эта тема — практическое руководство по настройке Gitea для соответствия 152-ФЗ, GDPR и лучшим практикам безопасности.
┌────────────────────────────────────────────────────────────────────┐
│ Уровень защиты │
├────────────────────────────────────────────────────────────────────┤
│ 1. Периметр: Firewall, VPN, доступ по SSH-ключам │
│ 2. Аутентификация: LDAP/SSO, 2FA, политики паролей │
│ 3. Авторизация: Ролевая модель, branch protection │
│ 4. Данные: Шифрование TLS, шифрование на диске, секреты │
│ 5. Аудит: Журналы действий, логирование, SIEM-интеграция │
│ 6. Резервирование: Бэкапы, восстановление, HA │
└────────────────────────────────────────────────────────────────────┘
Что требует закон:
Обработка персональных данных граждан РФ должна осуществляться на территории Российской Федерации (ч. 5 ст. 18 152-ФЗ).
Реализация в Gitea:
Развёртывание на серверах в РФ:
Проверка локации:
# Проверка IP и локации сервера
curl ifconfig.me
curl ipinfo.io
# Проверка хостинг-провайдера
whois $(curl -s ifconfig.me)Что требует закон:
Оператор ПДн обязан уведомить Роскомнадзор до начала обработки данных.
Реализация:
Подача уведомления:
Сведения для уведомления:
Наименование оператора: ООО "Ваша Компания"
Адрес: г. Москва, ул. Примерная, д. 1
Цель обработки: Обеспечение работы Git-платформы для разработчиков
Категории данных: ФИО, email, должность, служебные контакты
Категории субъектов: Сотрудники компании
Что требует закон:
Обработка ПДн допускается с согласия субъекта (ст. 6 152-ФЗ).
Реализация в Gitea:
Создайте страницу /privacy в Gitea:
# Политика конфиденциальности
## Какие данные мы собираем
- ФИО (для идентификации пользователя)
- Корпоративный email (для связи и уведомлений)
- Должность и отдел (для управления доступом)
- IP-адрес и время входа (для аудита безопасности)
- Git-коммиты и код (служебная информация)
## Как мы используем данные
- Предоставление доступа к репозиториям
- Уведомления о событиях в репозиториях
- Аудит действий пользователей
- Отчётность по требованиям регуляторов
## Ваши права
- Доступ к своим данным
- Исправление неточных данных
- Удаление аккаунта (с ограничениями)
- Экспорт данных в машиночитаемом форматеВ app.ini:
[service]
; Требовать согласие при регистрации
REGISTER_EMAIL_CONFIRM = true
; Показать ссылку на политику конфиденциальности
; (кастомизация через templates)Что требует закон:
Оператор обязан принимать меры по защите ПДн от неправомерного доступа.
Реализация в Gitea:
[security]
; Запрет простой регистрации
DISABLE_REGISTRATION = false
; Требование подтверждения email
REGISTER_EMAIL_CONFIRM = true
; Минимальная длина пароля
MIN_PASSWORD_LENGTH = 12
; Запрет слабых паролей
PASSWORD_COMPLEXITY = upper,lower,digit,special
[session]
; HTTPS только
COOKIE_SECURE = true
; SameSite защита
COOKIE_SAME_SITE = strict
; Время жизни сессии
SESSION_LIFE_TIME = 86400Включение 2FA для всех пользователей:
[security]
; Требовать 2FA для всех
ENABLE_2FA = true
; Запрет доступа без 2FA
DISABLE_REGISTRATION = true
; Принудительное включение 2FA
; (требуется через API или политику компании)Настройка 2FA пользователем:
TLS для веб-доступа:
# NGINX конфигурация
server {
listen 443 ssl http2;
server_name git.company.ru;
ssl_certificate /etc/letsencrypt/live/git.company.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.company.ru/privkey.pem;
# Современные настройки безопасности
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
}Шифрование базы данных:
PostgreSQL с шифрованием:
# postgresql.conf
ssl = on
ssl_cert_file = '/etc/ssl/certs/server.crt'
ssl_key_file = '/etc/ssl/private/server.key'
ssl_min_protocol_version = 'TLSv1.2'Шифрование на диске (LVM/dm-crypt):
# Создание зашифрованного раздела
cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 gitea_data
mkfs.ext4 /dev/mapper/gitea_data
mount /dev/mapper/gitea_data /opt/giteaЧто требует закон:
Оператор должен обеспечивать учёт машинных носителей ПДн и регистрацию действий с данными.
Реализация в Gitea:
app.ini:
[log]
MODE = console, file
LEVEL = info
ROUTER = console
[log.file]
LEVEL = info
FILE_NAME = gitea.log
MAX_SIZE_SHIFT = 28
DAILY_ROTATE = true
MAX_DAYS = 30
[log.audit]
MODE = file
LEVEL = info
FILE_NAME = audit.logtimestamp level message
2026-03-19 10:30:00 INFO [audit] user=admin action=login source=LDAP ip=192.168.1.100
2026-03-19 10:31:15 INFO [audit] user=admin action=create_repo repo=team/backend
2026-03-19 10:35:22 INFO [audit] user=admin action=push repo=team/backend commit=abc123
2026-03-19 11:00:00 INFO [audit] user=developer action=login source=internal ip=192.168.1.105
Отправка логов в syslog:
[log]
MODE = console, syslog
[log.syslog]
LEVEL = info
NETWORK = udp
ADDR = 192.168.1.50:514
FACILITY = local0Если у вас есть пользователи из ЕС, применяется GDPR.
Реализация в Gitea:
Пользователь может запросить экспорт данных:
Реализация в Gitea:
Важно: Git-история содержит авторство коммитов. Полное удаление требует:
# Фильтрация истории (если критично)
git filter-branch --env-filter '
if [ "$GIT_AUTHOR_EMAIL" = "user@company.ru" ]; then
export GIT_AUTHOR_EMAIL="deleted@company.ru"
export GIT_AUTHOR_NAME="Deleted User"
fi
' -- --allРеализация:
Gitea предоставляет:
git clone --mirror# Экспорт через API
curl -H "Authorization: token $TOKEN" \
https://git.company.ru/api/v1/user/emails
curl -H "Authorization: token $TOKEN" \
https://git.company.ru/api/v1/user/repos| Роль | Описание |
|---|---|
| Admin | Полный доступ ко всем функциям |
| Owner | Владелец организации, управление членами |
| Member | Участник организации, доступ к репозиториям |
| Outside Collaborator | Внешний collaborator с ограниченным доступом |
[repository]
; Требовать review перед merge
DEFAULT_BRANCH_PROTECTION = true
; Запрет force push
DISABLE_FORCE_PUSH = true
; Требовать CI перед merge
DEFAULT_REQUIRE_STATUS_CHECKS = trueНастройка через веб-интерфейс:
main[repository]
; Запрет на создание тегов без прав
DEFAULT_TAG_PROTECTION = true[service]
; Требовать вход для просмотра
REQUIRE_SIGNIN_VIEW = true
; Запрет анонимного доступа
ENABLE_BASIC_AUTHENTICATION = trueСм. тему LDAP/SSO аутентификация.
Отправка логов в Splunk:
[log.syslog]
MODE = syslog
NETWORK = tcp
ADDR = splunk.company.ru:514
FACILITY = local0Отправка в ELK Stack:
# Filebeat конфигурация
filebeat.inputs:
- type: log
paths:
- /opt/gitea/logs/audit.log
fields:
log_type: gitea_audit
output.logstash:
hosts: ["logstash.company.ru:5044"]Интеграция через webhooks:
{
"webhook_url": "https://dlp.company.ru/api/git-events",
"events": ["push", "pull_request", "repository.created"],
"secret": "your-webhook-secret"
}# Множественные неудачные логины
grep "Failed login" /opt/gitea/logs/audit.log | sort | uniq -c | sort -rn
# Доступ в нерабочее время
grep "action=login" /opt/gitea/logs/audit.log | grep "22:\|23:\|00:\|01:\|02:\|03:\|04:\|05:"
# Массовое скачивание репозиториев
grep "action=clone" /opt/gitea/logs/audit.log | cut -d' ' -f2 | sort | uniq -c | sort -rn# Логи за период
grep "2026-03-19" /opt/gitea/logs/audit.log > incident_20260319.log
# Действия конкретного пользователя
grep "user=suspicious_user" /opt/gitea/logs/audit.log > user_actions.log
# Доступ к конкретному репозиторию
grep "repo=sensitive-project" /opt/gitea/logs/audit.log > repo_access.log| Нарушение | Риск | Как избежать |
|---|---|---|
| Сервер за пределами РФ | Штраф до 500 тыс. руб. | Развёртывание в российском DC |
| Нет уведомления РКН | Штраф до 100 тыс. руб. | Подать уведомление до запуска |
| Слабые пароли | Утечка данных | MIN_PASSWORD_LENGTH=12, 2FA |
| Нет audit log | Невозможно расследовать инцидент | Включить логирование в app.ini |
| Отсутствие бэкапов | Потеря данных | Ежедневный backup.sh в cron |
| Открытый доступ без входа | Утечка кода | REQUIRE_SIGNIN_VIEW=true |
Следующий шаг: CI/CD: Gitea Actions и внешние интеграции
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.