5.4 KiB
gitea-token-access
Скрипты и документация для настройки ограниченного read-only доступа к приватным репозиториям Gitea.
Зачем это нужно
Есть приватные репо на Gitea-сервере. Нужно дать автоматическим инструментам (установщики, CI/CD, скрипты) доступ на чтение — без раскрытия админских учётных данных.
Схема
Трёхуровневая модель доступа:
Владелец (admin)
│
├── создаёт "бомж"-аккаунт (через Admin API)
├── выдаёт доступ к конкретным репо (collaborator, read)
│
v
Бомж-аккаунт (reader)
│
├── не имеет админ-прав
├── видит только те репо, куда его добавили
│
v
API-токен (scope: read:repository)
│
├── может только читать
├── используется в скриптах/установщиках
└── при утечке — ротируем, админ-данные не раскрыты
Быстрый старт
# 1. Скопировать и заполнить конфиг
cp config.example.ini config.ini
nano config.ini
# 2. Создать бомж-аккаунт и токен
bash scripts/setup-reader.sh
# 3. Дать доступ к конкретному репо
bash scripts/grant-access.sh my-private-repo
# 4. Проверить что всё работает
bash scripts/test-access.sh my-private-repo
Скрипты
| Скрипт | Описание |
|---|---|
setup-reader.sh |
Создать бомж-аккаунт + API-токен |
grant-access.sh <repo> |
Выдать доступ на чтение к репо |
revoke-access.sh <repo> |
Забрать доступ |
list-access.sh |
Показать все доступные репо |
rotate-token.sh |
Удалить старый токен, создать новый |
test-access.sh [repo] |
Проверить что токен и доступ работают |
Конфигурация
Скопируйте config.example.ini в config.ini и заполните своими данными:
[gitea]
url = https://git.example.com
api_url = https://git.example.com/api/v1
[owner]
username = ваш-админ
password = ваш-пароль
[reader]
username = reader-аккаунт
password = пароль-reader
email = reader@noreply.local
token_name = installer-readonly
token_scope = read:repository
Файл config.ini добавлен в .gitignore и никогда не будет закоммичен.
Использование токена
В скриптах (curl)
curl -H "Authorization: token ВАШ_ТОКЕН" \
https://git.example.com/api/v1/repos/owner/repo/raw/file.txt
Git clone
git clone https://reader:ВАШ_ТОКЕН@git.example.com/owner/repo.git
Git credential store
echo "https://reader:ВАШ_ТОКЕН@git.example.com" >> ~/.git-credentials
git config --global credential.helper store
git clone https://git.example.com/owner/repo.git
FAQ
Что делать если токен утёк?
bash scripts/rotate-token.sh
Старый токен будет удалён и перестанет работать. Новый будет записан в config.ini. Обновите токен во всех системах, которые его используют.
Как дать доступ к новому репо?
bash scripts/grant-access.sh имя-нового-репо
Как убрать доступ к репо?
bash scripts/revoke-access.sh имя-репо
Как посмотреть к чему есть доступ?
bash scripts/list-access.sh
Можно ли использовать для другого Gitea-сервера?
Да. Просто измените url и api_url в config.ini. Скрипты универсальны и работают с любым Gitea-инстансом.
Нужен ли jq или python?
Нет. Скрипты используют только bash, curl, grep, sed — стандартные утилиты Linux.
Документация
- Архитектура — схема владелец/бомж/токен
- Ручная настройка — пошаговые curl-команды
- README (English)
Безопасность
- Токен имеет scope
read:repository— не может писать, удалять или использовать админ API - Доступ гранулярный: бомж видит только те репо, где он явно добавлен как collaborator
- При компрометации токена: запустите
rotate-token.sh config.iniсодержит учётные данные — он в.gitignoreи не коммитится
Требования
- Gitea-инстанс с включённым API
- Аккаунт владельца с правами администратора
curlиbash- Никаких внешних зависимостей