Tutoriel Linux

Podman na Linuksa: uruchamianie kontenera bez przyznawania uprawnień root całej maszynie

Débutant4 min de lecture

Chcesz uruchomić usługę testową, narzędzie internetowe lub obraz systemu Linux bez dodawania swojego konta do grupy docker. Podman potrafi uruchamiać kontenery z sesji użytkownika, z pamięcią i procesami przypisanymi do twojego UID. To praktyczne, aby wystartować czysto, ale nie zwalnia z konieczności kontroli obrazu, wolumenów ani opublikowanych portów.

Tux admin uruchamia izolowany kontener obok serwera Linux z kłódką i kostkami kontenera
Podman może uruchamiać kontenery z sesji użytkownika Linux.

Zainstaluj Podman i sprawdź tryb rootless

Na Debianie lub Ubuntu zainstaluj pakiet z repozytoriów swojej dystrybucji. Fedora również uwzględnia go w swoich standardowych repozytoriach.

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

Następnie uruchom podman info --debug z normalnym kontem, bez sudo. Wynik powinien wskazywać na kontekst rootless. Podman używa wtedy twojej przestrzeni użytkownika oraz zakresów zdefiniowanych w /etc/subuid i /etc/subgid do mapowania identyfikatorów kontenera.

Wiadomość o newuidmap, subuid lub subgid wskazuje na niekompletną konfigurację. Nie omijaj błędu, przechodząc bezpośrednio na konto root. Najpierw sprawdź swoje wpisy za pomocą następującego polecenia, a następnie zastosuj metodę udokumentowaną przez swoją dystrybucję, jeśli brakuje jej w konfiguracji.

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

Uruchom pierwszy kontener bez uprawnień

Rozpocznij od małego obrazu i polecenia, które zakończy się samoistnie. W ten sposób sprawdzisz pobieranie obrazu, lokalne przechowywanie i uruchamianie bez pozostawiania otwartej usługi w sieci.

podman run --rm docker.io/library/alpine:latest echo "Podman działa"

Opcja --rm usuwa kontener po zakończeniu. Obraz pozostaje w pamięci podręcznej. Aby zobaczyć obrazy i kontenery, w tym te zatrzymane, użyj:

podman images
podman ps -a

Dla usługi, która ma pozostać dostępna, nadaj jej wyraźną nazwę. Ten przykład uruchamia nginx w tle i publikuje port 8080 tylko na lokalnej maszynie.

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

Prefiks 127.0.0.1: zapobiega wystawieniu tego testu na wszystkie interfejsy sieciowe. Jeśli napiszesz tylko -p 8080:80, sprawdź wynik za pomocą podman port web-test oraz ss -ltnp. Na serwerze otwieraj publiczny port tylko po wybraniu zapory i adresu nasłuchu.

Odczytaj stan, dzienniki i zatrzymaj usługę poprawnie

Uruchomiony kontener nie dowodzi, że aplikacja odpowiada. Sprawdź jego stan, ostatnie dzienniki i mapowanie sieci przed wprowadzeniem zmian w obrazie lub konfiguracji.

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 wyświetla rzeczywiste zastosowane ustawienia. Jest to bardziej wiarygodne niż przeglądanie skopiowanego polecenia w historii. Zachowaj również nazwę obrazu i jego tag w dokumentacji. Tag latest może wskazywać na inną wersję przy następnym pobraniu. Do długoterminowego użytku wybierz precyzyjną wersję i zaplanuj jej aktualizację.

Ograniczenia rootless i pułapki do unikania

  • Kontejner rootless ogranicza wpływ na hosta, ale niesprawdzony obraz, tajemnica wstrzyknięta jako zmienna lub wolumen zapisywalny pozostają ryzykiem.
  • Unikaj --privileged, --network host oraz montowania wrażliwych katalogów. Te opcje znacząco zmniejszają izolację.
  • Montuj dane jako tylko do odczytu, gdy aplikacja nie musi ich modyfikować, na przykład -v "$HOME/site:/usr/share/nginx/html:ro".
  • Porty poniżej 1024, niektóre urządzenia i określone ograniczenia sieciowe wymagają dodatkowej konfiguracji. Nie dodawaj uprawnień z przyzwyczajenia.
  • Podman akceptuje dużą część składni Dockera, ale usługi, sieci i przechowywanie nie zawsze zachowują się w ten sam sposób. Przetestuj projekt w odizolowanym katalogu przed migracją.

Grupa docker często daje bardzo szeroki dostęp do demona Dockera. Podman rootless unika tego przyzwyczajenia dla kontenerów uruchamianych z twojego konta. Aby porównać instalację silnika Dockera z tym wyborem uprawnień, możesz również przeczytać nasz przewodnik dotyczący Dockera na Debianie.

Oficjalna dokumentacja Podman szczegółowo opisuje działanie rootless, a podręcznik podman run wymienia opcje sieciowe, wolumeny i identyfikatory. Rozpocznij od prostego obrazu, lokalnego portu i wolumenu tylko do odczytu. Szybko dowiesz się, czy Podman nadaje się do twojego użytku, zanim przeniesiesz przydatną usługę.

sudo apt update && sudo apt upgrade