# Osnovne Gitea Informacije

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

## Osnovna Struktura

Osnovna struktura Gitea okruženja je grupisanje repozitorijuma po **organizacijama**, svaka od njih može sadržati **several repositories** i **several teams**. Međutim, imajte na umu da, kao i na github-u, korisnici mogu imati repozitorijume van organizacije.

Štaviše, **korisnik** može biti **član** **različitih organizacija**. Unutar organizacije, korisnik može imati **različite dozvole za svaki repozitorijum**.

Korisnik može biti i **deo različitih timova** sa različitim dozvolama za različite repozitorijume.

I konačno, **repozitorijumi mogu imati posebne mehanizme zaštite**.

## Dozvole

### Organizacije

Kada se **organizacija kreira**, tim pod nazivom **Owners** se **kreira** i korisnik se stavlja unutar njega. Ovaj tim će dati **admin pristup** nad **organizacijom**, te **dozvole** i **ime** tima **se ne mogu menjati**.

**Org admins** (vlasnici) mogu odabrati **vidljivost** organizacije:

- Javno
- Ograničeno (samo prijavljeni korisnici)
- Privatno (samo članovi)

**Org admins** takođe mogu naznačiti da li **repo admins** mogu **dodavati ili uklanjati pristup** za timove. Takođe mogu naznačiti maksimalan broj repozitorijuma.

Kada se kreira novi tim, biraju se nekoliko važnih podešavanja:

- Naznačuje se **repozitorijumi organizacije kojima će članovi tima moći da pristupaju**: specifični repozitorijumi (repozitorijumi gde je tim dodat) ili svi.
- Takođe se naznačuje **da li članovi mogu kreirati nove repozitorijume** (kreator će dobiti admin pristup).
- **Dozvole** koje će **članovi** repozitorijuma **imati**:
- **Administrator** pristup
- **Specifičan** pristup:

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

### Timovi & Korisnici

U repozitorijumu, **org admin** i **repo admins** (ako to dozvoljava org) mogu **upravljati ulogama** dodeljenim saradnicima (drugim korisnicima) i timovima. Postoje **3** moguće **uloge**:

- Administrator
- Pisanje
- Čitanje

## Gitea Autentifikacija

### Web Pristup

Korišćenje **korisničkog imena + lozinke** i potencijalno (i preporučeno) 2FA.

### **SSH Ključevi**

Možete konfigurisati svoj nalog sa jednim ili više javnih ključeva koji omogućavaju povezani **privatni ključ da izvršava radnje u vaše ime.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys)

#### **GPG Ključevi**

Ne **možete se pretvarati da ste korisnik sa ovim ključevima**, ali ako ih ne koristite, može biti moguće da **budete otkriveni zbog slanja commit-a bez potpisa**.

### **Lični Pristupni Tokeni**

Možete generisati lični pristupni token da **dajte aplikaciji pristup vašem nalogu**. Lični pristupni token daje potpun pristup vašem nalogu: [http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications)

### Oauth Aplikacije

Baš kao lični pristupni tokeni, **Oauth aplikacije** će imati **potpun pristup** vašem nalogu i mestima kojima vaš nalog ima pristup, jer, kao što je naznačeno u [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes), opsezi još nisu podržani:

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

### Ključevi za Implementaciju

Ključevi za implementaciju mogu imati pristup samo za čitanje ili pisanje repozitorijumu, tako da mogu biti zanimljivi za kompromitovanje specifičnih repozitorijuma.

## Zaštite Grana

Zaštite grana su dizajnirane da **ne daju potpunu kontrolu nad repozitorijumom** korisnicima. Cilj je **postaviti nekoliko metoda zaštite pre nego što se može pisati kod unutar neke grane**.

**Zaštite grana repozitorijuma** mogu se naći na _https://localhost:3000/\<orgname>/\<reponame>/settings/branches_

> [!NOTE]
> **Nije moguće postaviti zaštitu grane na nivou organizacije**. Tako da sve one moraju biti deklarisane na svakom repozitorijumu.

Različite zaštite mogu se primeniti na granu (kao na master):

- **Onemogući Push**: Niko ne može da pošalje na ovu granu
- **Omogući Push**: Svako ko ima pristup može da pošalje, ali ne može da forsira push.
- **Whitelist Ograničen Push**: Samo odabrani korisnici/timovi mogu da pošalju na ovu granu (ali ne i forsirati push)
- **Omogući Merge Whitelist**: Samo korisnici/timovi sa liste mogu da spajaju PR-ove.
- **Omogući Status provere:** Zahteva da provere statusa prođu pre spajanja.
- **Zahteva odobrenja**: Naznačite broj odobrenja potrebnih pre nego što se PR može spojiti.
- **Ograniči odobrenja na belu listu**: Naznačite korisnike/timove koji mogu odobriti PR-ove.
- **Blokiraj spajanje na odbijenim recenzijama**: Ako su tražene izmene, ne može se spojiti (čak i ako ostale provere prođu)
- **Blokiraj spajanje na zvanične zahteve za recenziju**: Ako postoje zvanični zahtevi za recenziju, ne može se spojiti
- **Odbaci zastarele odobrenja**: Kada su novi commit-i, stara odobrenja će biti odbijena.
- **Zahteva Potpisane Commit-e**: Commit-i moraju biti potpisani.
- **Blokiraj spajanje ako je pull request zastareo**
- **Zaštićeni/Nezaštićeni obrasci datoteka**: Naznačite obrasce datoteka koje treba zaštititi/nezaštititi od izmena

> [!NOTE]
> Kao što možete videti, čak i ako ste uspeli da dobijete neka akreditivna sredstva korisnika, **repozitorijumi mogu biti zaštićeni sprečavajući vas da šaljete kod na master**, na primer, da biste kompromitovali CI/CD pipeline.

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