Tutoriel Linux

Podman su Linux: avviare un contenitore senza dare i diritti di root all’intera macchina

Débutant4 min de lecture

Vuoi avviare un servizio di test, uno strumento web o un’immagine Linux senza aggiungere il tuo account al gruppo docker. Podman può eseguire contenitori da una sessione utente, con memorizzazione e processi legati al tuo UID. Questo è utile per iniziare in modo pulito, ma non esime dal controllare l’immagine, i volumi o le porte esposte.

Tux admin avvia un contenitore isolato vicino a un server Linux con un lucchetto e cubi di contenitore
Podman può eseguire contenitori da una sessione utente Linux.

Installare Podman e verificare la modalità rootless

Su Debian o Ubuntu, installa il pacchetto dai repository della tua distribuzione. Anche Fedora lo include nei suoi repository standard.

sudo apt update
sudo apt install podman
podman --version
podman info --debug

Esegui quindi podman info --debug con il tuo account abituale, senza sudo. L’output deve indicare un contesto rootless. Podman utilizza quindi il tuo spazio utente e le gamme definite in /etc/subuid e /etc/subgid per mappare gli identificatori del contenitore.

Un messaggio su newuidmap, subuid o subgid segnala una preparazione incompleta. Non aggirare l’errore passando direttamente a root. Controlla prima il tuo input con il comando seguente, quindi applica il metodo documentato dalla tua distribuzione se manca.

grep "^$USER:" /etc/subuid /etc/subgid

Avviare un primo contenitore senza privilegi

Inizia con un’immagine minuscola e un comando che si ferma da solo. In questo modo verifichi il download dell’immagine, la memorizzazione locale e l’esecuzione senza lasciare un servizio aperto sulla rete.

podman run --rm docker.io/library/alpine:latest echo "Podman funziona"

L’opzione --rm elimina il contenitore al termine. L’immagine rimane in cache. Per vedere le immagini e i contenitori, inclusi quelli fermi, usa:

podman images
podman ps -a

Per un servizio che deve rimanere disponibile, dagli un nome esplicito. Questo esempio avvia nginx in background e pubblica la porta 8080 solo sulla macchina locale.

podman run -d --name web-test 
  -p 127.0.0.1:8080:80 
  docker.io/library/nginx:alpine

podman ps
curl -I http://127.0.0.1:8080

Il prefisso 127.0.0.1: evita di esporre questo test su tutte le interfacce di rete. Se scrivi solo -p 8080:80, controlla il risultato con podman port web-test e con ss -ltnp. Su un server, apri una porta pubblica solo dopo aver scelto il firewall e l’indirizzo di ascolto.

Leggere lo stato, i log e fermare il servizio correttamente

Un contenitore avviato non prova che l’applicazione risponda. Controlla il suo stato, gli ultimi log e il mapping di rete prima di modificare l’immagine o la configurazione.

podman inspect web-test --format '{{.State.Status}}'
podman logs --tail 50 web-test
podman port web-test
podman stop web-test
podman rm web-test

podman inspect mostra i parametri realmente applicati. È più affidabile che rileggere un comando copiato nella tua cronologia. Tieni anche il nome dell’immagine e il suo tag nella tua documentazione. Un tag latest può puntare a una versione diversa al prossimo download. Per un uso duraturo, scegli una versione specifica e pianifica il suo aggiornamento.

I limiti del rootless e i tranelli da evitare

  • Un contenitore rootless limita l’impatto sull’host, ma un’immagine non affidabile, un segreto iniettato come variabile o un volume in scrittura rimangono dei rischi.
  • Evita --privileged, --network host e i montaggi di directory sensibili. Queste opzioni riducono fortemente l’isolamento.
  • Monitora i dati in sola lettura quando l’applicazione non ha bisogno di modificarli, ad esempio -v "$HOME/site:/usr/share/nginx/html:ro".
  • Le porte inferiori a 1024, alcuni dispositivi e alcune restrizioni di rete richiedono una configurazione aggiuntiva. Non aggiungere privilegi per riflesso.
  • Podman accetta gran parte della sintassi Docker, ma i servizi, le reti e la memorizzazione non si comportano sempre allo stesso modo. Testa un progetto in una cartella isolata prima di una migrazione.

Il gruppo docker spesso fornisce un accesso molto ampio al demone Docker. Podman rootless evita questa abitudine per i contenitori avviati dal tuo account. Per confrontare l’installazione di un motore Docker con questa scelta di diritti, puoi anche rileggere la nostra guida su Docker su Debian.

La documentazione ufficiale di Podman dettaglia il funzionamento rootless, e il manuale di podman run elenca le opzioni di rete, volumi e identificatori. Inizia con un’immagine semplice, una porta locale e un volume in sola lettura. Saprai rapidamente se Podman è adatto al tuo utilizzo prima di spostare un servizio utile.

sudo apt update && sudo apt upgrade