În primul rând, numai utilizatorilor de încredere ar trebui să li se permită să vă controleze demonul Docker
Daemonul docker rulează implicit ca root pe o instalare Debian Bullseye. Adăugarea unui utilizator la docher
grupul îi oferă utilizatorului acces rădăcină psuedo datorită controlului asupra demonului docker care are această cantitate de acces. Fiecare utilizator din grupul docker va avea control complet asupra gazdei și a altor containere și poate rula un container care --publica
este orice port.
Există câteva opțiuni pentru a oferi securitate utilizatorilor accesul la docker.
- Docker fără rădăcini
sudo
- API
1. Docker fără rădăcini
A configurarea docker fără rădăcină ar permite fiecărui utilizator să ruleze un docker deamon. Pentru porturile mai mici de 1024, ar trebui să respecte informații despre porturile neprivilegiate bob furnizat deoarece fiecare utilizator își va „deține” propriul deamon. Docker oferă, de asemenea îndrumări aferente. Asta nu o împiedică pe Anna să ia portul lui Bobs.
2. sudo
Cea mai simplă metodă de a permite utilizatorilor să ruleze comenzi docker este de a oferi un script controlat de rădăcină prin sudo, care este fie static, fie controlează intrarea utilizatorului pentru argumente opționale:
#!/bin/bash
docker run --detach --publish 1300:1300 anna/app-image
anna ALL=(rădăcină) NOPASSWD: /usr/local/bin/start-anna-image
Dacă doriți ca utilizatorii să își poată adăuga propriile opțiuni, trebuie să fiți foarte atenți la controlul intrării lor, deoarece este foarte ușor să
3. Plugin de autorizare sau API pentru Docker
Deoarece Docker nu oferă niciun strat de autorizare pe demon, trebuie să adăugați ceva pentru a controla accesul utilizatorilor.
Docker oferă un sistem integrat plugin de autorizare cadru pentru a permite acest lucru. Câteva exemple sunt opa-docker-authz și casbin-authz-plugin
Puteți oferi utilizatorilor acces la o formă de API proxy care oferă autentificarea și autorizarea asupra a ceea ce este transmis API-ului REST Docker. Există biblioteci docker pentru majoritatea limbajelor de programare.Kubernetes+RBAC este un exemplu de API care se află în fața demonului Docker și controlează accesul (doar unul foarte mare/complex care face mult mai mult).