# 基本的なGitea情報

{{#include ../../banners/hacktricks-training.md}}

## 基本構造

基本的なGitea環境の構造は、**組織**によってリポジトリをグループ化することです。各組織は**いくつかのリポジトリ**と**いくつかのチーム**を含むことができます。ただし、githubと同様に、ユーザーは組織外にリポジトリを持つことができます。

さらに、**ユーザー**は**異なる組織のメンバー**であることができます。組織内では、ユーザーは**各リポジトリに対して異なる権限**を持つことがあります。

ユーザーはまた、異なるリポジトリに対して異なる権限を持つ**異なるチームの一員**であることもできます。

最後に、**リポジトリには特別な保護メカニズム**がある場合があります。

## 権限

### 組織

**組織が作成されると**、**Owners**というチームが**作成され**、ユーザーはその中に配置されます。このチームは**組織に対する管理者アクセス**を提供し、その**権限**と**チームの名前**は**変更できません**。

**Org admins**（オーナー）は、組織の**可視性**を選択できます：

- 公開
- 限定（ログインユーザーのみ）
- 非公開（メンバーのみ）

**Org admins**は、**リポジトリ管理者**が**チームのアクセスを追加または削除**できるかどうかも示すことができます。また、最大リポジトリ数を指定することもできます。

新しいチームを作成する際には、いくつかの重要な設定が選択されます：

- チームのメンバーがアクセスできる**組織のリポジトリ**が指定されます：特定のリポジトリ（チームが追加されたリポジトリ）またはすべて。
- **メンバーが新しいリポジトリを作成できるかどうか**も指定されます（作成者はそのリポジトリに管理者アクセスを得ます）。
- リポジトリの**メンバーが持つ**権限：
- **管理者**アクセス
- **特定の**アクセス：

![](<../../images/image (118).png>)

### チームとユーザー

リポジトリ内で、**org admin**と**リポジトリ管理者**（組織によって許可されている場合）は、コラボレーター（他のユーザー）やチームに与えられた**役割を管理**できます。可能な**役割**は**3**つです：

- 管理者
- 書き込み
- 読み取り

## Gitea認証

### ウェブアクセス

**ユーザー名 + パスワード**を使用し、可能であれば（推奨）2FAを使用します。

### **SSHキー**

関連する**秘密鍵があなたの代わりにアクションを実行できるように**、1つまたは複数の公開鍵でアカウントを構成できます。[http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys)

#### **GPGキー**

これらのキーを使用してユーザーを偽装することは**できません**が、使用しない場合、**署名なしでコミットを送信することで発見される可能性があります**。

### **個人アクセストークン**

アプリケーションにあなたのアカウントへのアクセスを**与えるために個人アクセストークンを生成できます**。個人アクセストークンはあなたのアカウントに対する完全なアクセスを提供します：[http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications)

### Oauthアプリケーション

個人アクセストークンと同様に、**Oauthアプリケーション**はあなたのアカウントとあなたのアカウントがアクセスできる場所に対して**完全なアクセス**を持ちます。なぜなら、[docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes)に示されているように、スコープはまだサポートされていないからです：

![](<../../images/image (194).png>)

### デプロイキー

デプロイキーはリポジトリに対して読み取り専用または書き込みアクセスを持つことができるため、特定のリポジトリを侵害するのに興味深いかもしれません。

## ブランチ保護

ブランチ保護は、ユーザーに**リポジトリの完全な制御を与えない**ように設計されています。目標は、**いくつかの保護方法を設けて、特定のブランチ内にコードを書くことができるようにすること**です。

**リポジトリのブランチ保護**は、_https://localhost:3000/\<orgname>/\<reponame>/settings/branches_で見つけることができます。

> [!NOTE]
> 組織レベルでブランチ保護を設定することは**できません**。したがって、すべての保護は各リポジトリで宣言する必要があります。

ブランチに適用できるさまざまな保護があります（例えば、masterに）：

- **プッシュを無効にする**：誰もこのブランチにプッシュできません
- **プッシュを有効にする**：アクセス権のある誰でもプッシュできますが、強制プッシュはできません。
- **ホワイトリスト制限プッシュを有効にする**：選択されたユーザー/チームのみがこのブランチにプッシュできます（ただし、強制プッシュはできません）。
- **マージホワイトリストを有効にする**：ホワイトリストに登録されたユーザー/チームのみがPRをマージできます。
- **ステータスチェックを有効にする**：マージする前にステータスチェックが通過することを要求します。
- **承認を要求する**：PRをマージする前に必要な承認の数を示します。
- **ホワイトリストに制限された承認**：PRを承認できるユーザー/チームを示します。
- **拒否されたレビューでのマージをブロックする**：変更が要求された場合、マージできません（他のチェックが通過しても）。
- **公式レビューリクエストでのマージをブロックする**：公式レビューリクエストがある場合、マージできません。
- **古い承認を無効にする**：新しいコミットがあると、古い承認は無効になります。
- **署名されたコミットを要求する**：コミットは署名されなければなりません。
- **プルリクエストが古くなった場合はマージをブロックする**
- **保護された/保護されていないファイルパターン**：変更から保護/保護解除するファイルのパターンを示します。

> [!NOTE]
> ご覧のとおり、ユーザーの資格情報を取得できたとしても、**リポジトリが保護されているため、例えばmasterにコードをプッシュすることができない場合があります**。

{{#include ../../banners/hacktricks-training.md}}
