Gitea и ее безопасность

Рано или поздно, при работе с системой контроля версий Git у разработчиков появляется необходимость в использовании веб интерфейса. Существует несколько различных решений, предоставляющих подобный функционал, разной степени «платности», однако, у многих разработчиков пользуется популярностью решение Gitea, о безопасности которого мы и поговорим сегодня.

Что такое Gitea

Gitea — ПО для хостинга IT-проектов и совместной разработки на базе Git. Поддерживает отслеживание ошибок, вики и обзор кода. Сервис создан как self-hosted решение, однако есть и публичные экземпляры. Цель этого проекта — предоставить самый простой, быстрый и безболезненный способ настройки автономного Git-сервиса.

Gitea поддерживает создание репозиториев и управление ими, просмотр истории коммитов и файлов кода, просмотр и объединение фрагментов кода, совместное управление, обработку ветвей и т.д. Он также поддерживает множество распространенных функций Git, таких как теги, Cherry-pick, перехватчики, интегрированные инструменты для совместной работы и многое другое.

Одна из целей разработки Gitea — быть легкой и быстрой в использовании. В отличие от некоторых крупных платформ для размещения кода, она остается экономичной, обеспечивает высокую скорость работы и подходит для серверных сред с ограниченными ресурсами. Благодаря своей легкой конструкции Gitea потребляет относительно мало ресурсов и хорошо работает в средах с ограниченными ресурсами.

Также важно отметить, что Gitea является важным инструментом процесса CI/CD. Пользователи могут создавать рабочие процессы в привычном формате YAML и повторно использовать различные существующие плагины Gitea Actions. Плагины Actions поддерживают загрузку с любого веб-сайта Git.

Ну, а кроме того, Gitea — это проект с открытым исходным кодом, основанный на лицензии MIT. У него активное сообщество разработчиков, которое постоянно развивает и совершенствует платформу.

Далее мы посмотрим, как обеспечить безопасность собственной инсталляции Gitea. Начнем с рассмотрения структуры безопасности.

Базовая структура безопасности Gitea

Если говорить в целом, то разработчики Gitea уделяют достаточно большое внимание безопасности, предлагая такие функции, как управление разрешениями пользователей, списки контроля доступа и многое другое для обеспечения безопасности кода и данных. Но обо всем по порядку.

Создавая репозиторий, мы делаем его доступным для всех. Другими словами, пользователь без авторизации тоже сможет получить доступ к нашему репозиторию. Для того, чтобы избежать подобной вседозволенности, мы можем ограничить доступ, разрешив доступ к нему только членам организации и владельцу. О том, что из себя представляет организация в Gitea мы поговорим чуть дальше.

fcf4c4f9d3e8bbba84bfeece47200bc1.png

Таким образом, важно помнить, что Публичная видимость нужна только для тех репозиториев, которые действительно должны быть общедоступными.

Теперь поговорим об организациях. Основная структура Gitea заключается в группировании репозиториев по организациям, каждая из которых может содержать несколько репозиториев и несколько команд. Однако, здесь стоит обратить внимание на то, что, как и в Github, пользователи могут создавать репозитории за пределами организации. Более того, пользователь может быть членом разных организаций. Внутри организации у пользователя могут быть разные права доступа к каждому репозиторию.

b1b2b84eb103116042f4372e0198d38c.png

Так, видимость организации может быть публичной, либо ограниченной, то есть видимой только для авторизованных пользователей, либо мы вообще можем предоставить доступ только участникам организации.

Также, пользователь также может быть членом разных команд с разными правами доступа к разным репозиториям.

В завершение темы аутентификации рекомендуем обратить внимание, на то, что по умолчанию Gitea позволяет регистрироваться новым пользователям. Это не даст новым пользователям доступа к репозиториям других организаций/пользователей, но зарегистрированный пользователь сможет увидеть больше доступных репозиториев или организаций.

Разрешения в Gitea

При создании организации создается команда под названием «Владельцы», и пользователь включается в нее. Эта команда предоставляет доступ администратора к организации, эти разрешения и название команды не могут быть изменены.

ce145a0680a6230ddf713e6e0b2711d3.png

Администраторы организации (владельцы) могут выбирать видимость организации: общий, ограниченный или закрытый. Также администратор может указать, могут ли администраторы репозитория добавлять и/или удалять доступ для команд. Они также могут указать максимальное количество репозиториев.

При создании новой команды в Gitea выбирается несколько важных параметров. Указывается, к какой части организации члены команды смогут получить доступ: к определенным репозиториям (тем, в которые добавлена команда) или ко всем. Также указывается, могут ли участники создавать новые репозитории (создатель получит к ним административный доступ).

Защита доступа

Так, как зарегистрированный пользователь может получить доступ к различным репозиториям, то в качестве дополнительного механизма защиты можно рекомендовать использование двухфакторной аутентификации.  Например, можно воспользоваться решением Authenticator для мобильных устройств.

Помимо этого,   Gitea позволяет пользователям устанавливать SSH-ключи, которые будут использоваться в качестве метода аутентификации для загрузки кода в репозиторий от их имени.

Пользовательский токен также может использоваться вместо пароля для аутентификации на сервере Gitea через API. он будет иметь полный доступ к пользователю.

Для генерации токена необходимо указать как минимум одно разрешение, например, доступ к репозиториям, организациям и т.д.

fe7618ecaed5751cdddb466db2568b13.png

Защита ветвей

Мы можем не предоставлять пользователю полный контроль над всем репозиторием. Вместо этого, наша цель состоит в том, чтобы внедрить несколько методов защиты, прежде чем можно будет загружать код внутри какой-либо ветви.

К ветви могут быть применены различные меры защиты (например, к master):

Disable Push: Никто не сможет пушить в эту ветку

Enable Push: Все могут пушить в эту ветку

Whitelist Restricted Push: Разрешено пушить только по белому списку

Enable Merge Whitelist: Разрешено выполнять слияние только по белому списку

Enable Status checks: Перед слиянием требуется пройти проверку статуса…

Require approvals: Укажите количество утверждений, необходимых для объединения PR.

Restrict approvals to whitelisted: Белый список пользователей/команд, которые могут утверждать PR.

Block merge on rejected reviews: Если изменения запрошены, они не могут быть изменены.

Таким образом мы можем ограничить доступ к ветвям на различных уровнях.

Заключение

Мы рассмотрели основные механизмы настройки безопасности в Gitea. С помощью грамотной настройки данных параметров можно существенно повысить защищенность репозитория в целом.

Больше практических навыков по информационной безопасности вы можете получить в рамках практических онлайн-курсов от экспертов отрасли.

© Habrahabr.ru