Cos'è Docker senza root?
Normalmente, quando si installa Docker, sono necessarie autorizzazioni complete (root) sul sistema host. Ciò crea un potenziale problema di sicurezza perché sia i contenitori che il servizio Docker (demone) funzioneranno come root. Nell'installazione rootless di Docker, solo il demone Docker viene eseguito come root mentre i container vengono eseguiti come utenti normali.
Perchè importa? Perché se il servizio in esecuzione in un container è compromesso, l'autore dell'attacco potrebbe accedere anche ai file di sistema. Non c'è un vero isolamento dei container.
Il progetto Podman open source è stato creato per eseguire principalmente container senza root. Ciò ha spinto Docker a supportare una funzionalità simile in modo che i contenitori vengano eseguiti come utenti normali ma il servizio Docker (daemon) funzioni come root.
Questa installazione senza root è ora disponibile da Docker stesso e non è necessario utilizzare Podman solo per questa funzione.
In questo articolo, spiegherò come installare Docker senza accesso come root. Ma prima di mostrarti questi passaggi, discutiamo prima lo svantaggio di questa modalità.
Svantaggio dell'esecuzione di Docker in modalità rootless
Il più grande svantaggio di questa modalità è la rete e questi problemi sono presenti anche in Podman.
Per impostazione predefinita, Docker utilizza una rete senza root.
Perché è il più veloce, con una velocità fino a 30 Gbps e supporta IPv4 e IPv6.
Ma ha problemi.
I container non avranno l'IP esterno della richiesta e tutte le richieste appariranno da 127.0.0.1.
Questo è un grosso problema, soprattutto se vuoi mettere una protezione che limiti gli attacchi DDOS (Distributed Denial-of-Service) perché tutte le richieste sembreranno provenire dallo stesso indirizzo.
L'uso della modalità Slirp4netns risolve questo problema e mostra l'indirizzo originale della richiesta. Ma ha anche due problemi.
- IPv6 non supportato.
- La velocità è molto più lenta (circa 7 Gbps).
Prerequisiti
La modalità rootless non utilizza i bit appiccicosi. Hanno bisogno di newuidmap e newgidmap .
Questo è il motivo per cui dovresti assicurarti che i pacchetti newuidmap e newgidmap siano installati (tramite il pacchetto uidmap) e che ci siano 65.536 ID figlio.
mappa nuovauid verifica che il chiamante sia il proprietario del processo indicato da pid .
id -u
1001
whoami
testuser
Successivamente, verifica che l'utente disponga di 65.536 UID secondari:
grep ^$(whoami): /etc/subuid
testuser:231072:65536
grep ^$(whoami): /etc/subgid
testuser:231072:65536
Cosa significano questi numeri? Il primo numero è il primo ID che puoi usare e il successivo indica quanti ID hai. Ad esempio, inizia con 231072, id 0 significa 231072 e id 1000 significa 241072.
Installa la dbus-user-session e fuse-overlayfs pacchetti.
Per Debian, utilizzare il comando per installare dbus-user-session:
sudo apt install -y dbus-user-session
E poi installa fuse-overlayfs:
sudo apt install -y fuse-overlayfs
Si consiglia di utilizzare il kernel 5.11 o successivo.
Installazione della finestra mobile in modalità rootless
Ora arrivi alla parte principale. La prima parte è la normale installazione di Docker e poi vai con la parte senza root.
Mostrerò i passaggi per Ubuntu.
Installa i soliti pacchetti Docker
Disinstalla prima qualsiasi pacchetto Docker esistente:
sudo apt remove docker docker-engine docker.io containerd runc
E poi installa Docker su Ubuntu:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Verifica che Docker Engine sia installato correttamente eseguendo l'immagine hello-world.
sudo docker run hello-world
Considerando che il demone Docker è già in esecuzione, disabilitalo prima.
sudo systemctl disable --now docker.service docker.socket
Installa il pacchetto rootless
Ora installa il pacchetto docker-ce-rootless-extras scaricando lo script ufficiale usando il comando curl:
curl -fsSL https://get.docker.com/rootless | sh
Segui i suggerimenti sullo schermo e avrai installato Docker senza root.
Alla fine di questa schermata di installazione, ci saranno due cose scritte:export=xxx
Copiali e incollali nell'ultimo file .bashrc o se stai usando ZSH, il file .zshrc. Sorgente i file rc che hai appena modificato.
Una volta completata l'installazione, esegui il daemon docker rootless:
systemctl --user start docker
Esegui automaticamente la finestra mobile senza root ad ogni avvio:
systemctl --user enable docker
sudo loginctl enable-linger $(whoami)
Divertiti.
Informazioni sull'autore:Mead Naji è uno sviluppatore web e sviluppatore Linux vecchia scuola.