Basic Jenkins Information
Pristup
Korisničko ime + Lozinka
Najčešći način prijave u Jenkins je sa korisničkim imenom ili lozinkom.
Kolačić
Ako se ukrade ovlašćeni kolačić, može se koristiti za pristup sesiji korisnika. Kolačić se obično naziva JSESSIONID.*
. (Korisnik može prekinuti sve svoje sesije, ali prvo mora da otkrije da je kolačić ukraden).
SSO/Dodaci
Jenkins se može konfigurisati korišćenjem dodataka da bude pristupačan putem SSO-a trećih strana.
Tokeni
Korisnici mogu generisati tokene kako bi omogućili pristup aplikacijama da ih oponašaju putem CLI-ja ili REST API-ja.
SSH Ključevi
Ovaj komponent pruža ugrađeni SSH server za Jenkins. To je alternativni interfejs za Jenkins CLI, i komande se mogu pozvati na ovaj način korišćenjem bilo kog SSH klijenta. (Iz dokumenata)
Autorizacija
U /configureSecurity
je moguće konfigurisati metodu autorizacije Jenkins-a. Postoji nekoliko opcija:
Svako može uraditi bilo šta: Čak i anonimni pristup može administrirati server
Legacy režim: Isti kao Jenkins <1.164. Ako imate ulogu "admin", bićete dodeljeni puna kontrola nad sistemom, a inače (uključujući anonimne korisnike) imaćete samo pristup za čitanje.
Prijavljeni korisnici mogu uraditi bilo šta: U ovom režimu, svaki prijavljeni korisnik dobija punu kontrolu nad Jenkins-om. Jedini korisnik koji neće imati punu kontrolu je anonimni korisnik, koji dobija samo pristup za čitanje.
Matrix-based security: Možete konfigurisati ko može uraditi šta u tabeli. Svaka kolona predstavlja dozvolu. Svaki red predstavlja korisnika ili grupu/ulogu. Ovo uključuje posebnog korisnika 'anonimni', koji predstavlja neautentifikovane korisnike, kao i 'autentifikovani', koji predstavlja sve autentifikovane korisnike.
Project-based Matrix Authorization Strategy: Ovaj režim je proširenje za "Matrix-based security" koje omogućava dodatnu ACL matricu da se definiše za svaki projekat posebno.
Role-Based Strategy: Omogućava definisanje autorizacija korišćenjem role-based strategije. Upravljajte ulogama u
/role-strategy
.
Bezbednosno područje
U /configureSecurity
je moguće konfigurisati bezbednosno područje. Po podrazumevanim postavkama, Jenkins uključuje podršku za nekoliko različitih bezbednosnih područja:
Delegiraj servlet kontejneru: Za delegiranje autentifikacije servlet kontejneru koji pokreće Jenkins kontroler, kao što je Jetty.
Jenkins-ova sopstvena baza korisnika: Koristi Jenkins-ovu sopstvenu ugrađenu bazu podataka korisnika za autentifikaciju umesto delegiranja spoljnom sistemu. Ovo je podrazumevano omogućeno.
LDAP: Delegira svu autentifikaciju konfigurisanom LDAP serveru, uključujući korisnike i grupe.
Unix baza korisnika/grupa: Delegira autentifikaciju osnovnoj Unix bazi podataka korisnika na Jenkins kontroleru. Ovaj režim takođe omogućava ponovnu upotrebu Unix grupa za autorizaciju.
Dodaci mogu pružiti dodatna bezbednosna područja koja mogu biti korisna za uključivanje Jenkins-a u postojeće sisteme identiteta, kao što su:
Jenkins Čvorovi, Agenti i Izvršioci
Definicije iz dokumenata:
Čvorovi su mašine na kojima se pokreću agenti za izgradnju. Jenkins prati svaki povezan čvor za prostor na disku, slobodan privremeni prostor, slobodnu razmenu, vreme sata/sinhronizaciju i vreme odziva. Čvor se skida sa mreže ako bilo koja od ovih vrednosti pređe konfigurisani prag.
Agenti upravljaju izvršenjem zadatka u ime Jenkins kontrolera koristeći izvršioce. Agent može koristiti bilo koji operativni sistem koji podržava Java. Alati potrebni za izgradnju i testove instalirani su na čvoru na kojem agent radi; mogu biti instalirani direktno ili u kontejneru (Docker ili Kubernetes). Svaki agent je efektivno proces sa svojim PID-om na glavnoj mašini.
Izvršilac je slot za izvršenje zadataka; efektivno, to je nit u agentu. Broj izvršilaca na čvoru definiše broj istovremenih zadataka koji mogu biti izvršeni na tom čvoru u jednom trenutku. Drugim rečima, ovo određuje broj istovremenih faza Pipeline-a koje mogu biti izvršene na tom čvoru u jednom trenutku.
Jenkins Tajne
Enkripcija Tajni i Kredencijala
Definicija iz dokumenata: Jenkins koristi AES za enkripciju i zaštitu tajni, kredencijala i njihovih odgovarajućih ključeva za enkripciju. Ovi ključevi za enkripciju se čuvaju u $JENKINS_HOME/secrets/
zajedno sa glavnim ključem koji se koristi za zaštitu tih ključeva. Ovaj direktorijum treba konfigurisati tako da samo operativni sistem korisnik pod kojim Jenkins kontroler radi ima pristup za čitanje i pisanje ovom direktorijumu (tj. chmod
vrednost 0700
ili korišćenje odgovarajućih atributa datoteke). Glavni ključ (ponekad nazvan "ključ za enkripciju ključeva" u kriptojargonu) je čuvan _nešifrovan_ na Jenkins kontroleru u sistemu datoteka pod nazivom $JENKINS_HOME/secrets/master.key
što ne štiti od napadača sa direktnim pristupom toj datoteci. Većina korisnika i programera će koristiti ove ključeve za enkripciju indirektno putem Secret API-ja za enkripciju generičkih tajnih podataka ili kroz API kredencijala. Za kriptozainteresovane, Jenkins koristi AES u režimu šifrovanja blokova sa lancem (CBC) sa PKCS#5 punjenjem i slučajnim IV-ima za enkripciju instanci CryptoConfidentialKey koji se čuvaju u $JENKINS_HOME/secrets/
sa nazivom datoteke koji odgovara njihovom CryptoConfidentialKey
id-u. Uobičajeni ID-ovi ključeva uključuju:
hudson.util.Secret
: korišćen za generičke tajne;com.cloudbees.plugins.credentials.SecretBytes.KEY
: korišćen za neke tipove kredencijala;jenkins.model.Jenkins.crumbSalt
: korišćen od strane mehanizma zaštite od CSRF-a; i
Pristup podacima za pristupnice
Pristupnice mogu biti ograničene na globalne provajdere (/credentials/
) koji mogu biti pristupačni svakom konfigurisanom projektu, ili mogu biti ograničene na specifične projekte (/job/<ime-projekta>/configure
) i stoga su pristupačne samo iz specifičnog projekta.
Prema dokumentaciji: Pristupnice koje su u opsegu su dostupne u pipelajnu bez ograničenja. Da bi se spriječilo slučajno otkrivanje u zapisniku izgradnje, pristupnice su maskirane iz redovnog izlaza, tako da njihovo otkrivanje u zapisniku izgradnje ne bi bilo moguće putem poziva env
(Linux) ili set
(Windows), ili programa koji ispisuju svoje okruženje ili parametre korisnicima koji inače ne bi imali pristup pristupnicama.
Zato napadaču treba, na primer, da ih enkodira u base64 formatu kako bi iznio pristupnice.
Reference
Last updated