# Kubernetes SecurityContext(s)

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

## PodSecurityContext <a href="#podsecuritycontext-v1-core" id="podsecuritycontext-v1-core"></a>

[**Iz dokumenata:**](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core)

Kada definišete bezbednosni kontekst Pod-a, možete koristiti nekoliko atributa. Sa stanovišta odbrane, trebali biste razmotriti:

- Da **runASNonRoot** bude **True**
- Da konfigurišete **runAsUser**
- Ako je moguće, razmotrite **ograničavanje** **dozvola** označavanjem **seLinuxOptions** i **seccompProfile**
- **NE** dajte **privilegovan** **grupni** pristup putem **runAsGroup** i **supplementaryGroups**

| Parametar                                                                                                                                                                                                                                                                                                                                                                                                                                  | Opis                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p>                                                                                                                                                                                                                                                 | <p>Specijalna dopunska grupa koja se primenjuje na <strong>sve kontejnere u podu</strong>. Neki tipovi volumena omogućavaju Kubelet-u da <strong>promeni vlasništvo tog volumena</strong> da bude u vlasništvu poda:<br>1. Vlasnički GID će biti FSGroup<br>2. setgid bit je postavljen (nove datoteke kreirane u volumenu će biti u vlasništvu FSGroup)<br>3. Dozvola je OR'd sa rw-rw---- Ako nije postavljeno, Kubelet neće menjati vlasništvo i dozvole bilo kog volumena</p> |

| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p>                                                                                                                                                                                                                                      | Ovo definiše ponašanje **promene vlasništva i dozvola volumena** pre nego što bude izložen unutar Pod-a.                                                                                                                                                                                                                                                                                                                                                                         |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p>                                                                                                                                                                                                                                              | **GID za pokretanje ulazne tačke procesa kontejnera**. Koristi podrazumevanu vrednost vremena izvođenja ako nije postavljeno. Može se takođe postaviti u SecurityContext.                                                                                                                                                                                                                                                                                                                                                        |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p>                                                                                                                                                                                                                                            | Ukazuje da kontejner mora da se pokrene kao korisnik koji nije root. Ako je tačno, Kubelet će validirati sliku u vreme izvođenja kako bi osigurao da se ne pokreće kao UID 0 (root) i neće moći da pokrene kontejner ako to učini.                                                                                                                                                                                                                                                                          |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p>                                                                                                                                                                                                                                               | **UID za pokretanje ulazne tačke procesa kontejnera**. Podrazumevano se postavlja na korisnika navedenog u metapodacima slike ako nije navedeno.                                                                                                                                                                                                                                                                                                                                                              |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Više informacija o</em> <em><strong>seLinux</strong></em></p>                                                           | **SELinux kontekst koji će se primeniti na sve kontejnere**. Ako nije navedeno, kontejnerski runtime će dodeliti nasumičan SELinux kontekst za svaki kontejner.                                                                                                                                                                                                                                                                                                                             |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a><br><em>Više informacija o</em> <em><strong>Seccomp</strong></em></p>                                                           | **seccomp opcije koje koriste kontejneri** u ovom podu.                                                                                                                                                                                                                                                                                                                                                                                                                         |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>supplementalGroups</strong></a><br><em>integer array</em></p>                                                                                                                                                                                                                                | Lista **grupa primenjenih na prvi proces pokrenut u svakom kontejneru**, pored primarnog GID-a kontejnera.                                                                                                                                                                                                                                                                                                                                                                  |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>sysctls</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#sysctl-v1-core"><em>Sysctl</em></a> <em>array</em><br><em>Više informacija o</em> <a href="https://www.garron.me/en/go2linux/sysctl-linux.html"><em><strong>sysctls</strong></em></a></p> | Sysctls sadrži listu **imenskih sysctls korišćenih za pod**. Podovi sa nepodržanim sysctls (od strane kontejnerskog runtime-a) mogu propasti prilikom pokretanja.                                                                                                                                                                                                                                                                                                                                        |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p>                                                                                           | Windows specifične postavke primenjene na sve kontejnere. Ako nije navedeno, koristiće se opcije unutar SecurityContext-a kontejnera.                                                                                                                                                                                                                                                                                                                                               |

## SecurityContext

[**Iz dokumenata:**](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core)

Ovaj kontekst se postavlja unutar **definicija kontejnera**. Sa stanovišta odbrane, trebali biste razmotriti:

- **allowPrivilegeEscalation** da bude **False**
- Ne dodavati osetljive **kapacitete** (i ukloniti one koje ne trebate)
- **privileged** da bude **False**
- Ako je moguće, postavite **readOnlyFilesystem** na **True**
- Postavite **runAsNonRoot** na **True** i postavite **runAsUser**
- Ako je moguće, razmotrite **ograničavanje** **dozvola** označavanjem **seLinuxOptions** i **seccompProfile**
- **NE** dajte **privilegovan** **grupni** pristup putem **runAsGroup.**

Napomena: Atributi postavljeni u **SecurityContext i PodSecurityContext**, vrednost navedena u **SecurityContext** ima **prioritet**.

| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>boolean</em></p>                                                                                                                                                                      | **AllowPrivilegeEscalation** kontroliše da li proces može **dobiti više privilegija** od svog roditeljskog procesa. Ova bool direktno kontroliše da li će se postaviti no_new_privs flag na procesu kontejnera. AllowPrivilegeEscalation je uvek tačno kada se kontejner pokreće kao **Privileged** ili ima **CAP_SYS_ADMIN** |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>Više informacija o</em> <em><strong>Capabilities</strong></em></p>  | **Kapaciteti za dodavanje/uklanjanje prilikom pokretanja kontejnera**. Podrazumevano se koristi podrazumevani skup kapaciteta.                                                                                                                                                                                                                |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>boolean</em></p>                                                                                                                                                                                    | Pokreni kontejner u privilegovanom režimu. Procesi u privilegovanim kontejnerima su suštinski **ekvivalentni root-u na hostu**. Podrazumevano je false.                                                                                                                                                                           |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p>                                                                                                                                                                                      | procMount označava **tip proc mount-a koji će se koristiti za kontejnere**. Podrazumevano je DefaultProcMount koji koristi podrazumevane vrednosti kontejnerskog runtime-a za samo-za-čitanje i maskirane putanje.                                                                                                                                |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p>                                                                                                                                                                        | Da li ovaj **kontejner ima samo-za-čitanje korenski sistem datoteka**. Podrazumevano je false.                                                                                                                                                                                                                                         |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p>                                                                                                                                                                                    | **GID za pokretanje ulazne tačke** procesa kontejnera. Koristi podrazumevanu vrednost vremena izvođenja ako nije postavljeno.                                                                                                                                                                                                                            |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p>                                                                                                                                                                                  | Ukazuje da kontejner mora **da se pokrene kao korisnik koji nije root**. Ako je tačno, Kubelet će validirati sliku u vreme izvođenja kako bi osigurao da se ne pokreće kao UID 0 (root) i neće moći da pokrene kontejner ako to učini.                                                                                                      |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p>                                                                                                                                                                                     | **UID za pokretanje ulazne tačke** procesa kontejnera. Podrazumevano se postavlja na korisnika navedenog u metapodacima slike ako nije navedeno.                                                                                                                                                                                              |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Više informacija o</em> <em><strong>seLinux</strong></em></p> | **SELinux kontekst koji će se primeniti na kontejner**. Ako nije navedeno, kontejnerski runtime će dodeliti nasumičan SELinux kontekst za svaki kontejner.                                                                                                                                                              |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a></p>                                                               | **seccomp opcije** koje koristi ovaj kontejner.                                                                                                                                                                                                                                                                     |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p>                                 | **Windows specifične postavke** primenjene na sve kontejnere.                                                                                                                                                                                                                                                          |

## References

- [https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core)
- [https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core)

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