Dobra wiadomość: nowy doker (wersja 19.03 (obecnie w fazie eksperymentalnej)) będzie mógł uruchamiać się bez rootowania, negując problemy, które mogą wystąpić przy użyciu użytkownika root. Nigdy więcej bałaganu z podwyższonymi uprawnieniami, rootowania i wszystkiego, co może otworzyć twoją maszynę, gdy nie chcesz.
Film na ten temat z [DockerCon 2019] Hardening Docker Daemon w trybie Rootless
Kilka ostrzeżeń do trybu rootera Docker
Inżynierowie Docker twierdzą, że tryb rootowania nie może być uważany za zamiennik pełnego zestawu funkcji silnika Docker. Niektóre ograniczenia trybu bez rootowania obejmują:
- cgroups kontrola zasobów, profile bezpieczeństwa apparmor, punkty kontrolne / przywracanie, sieci nakładek itp. nie działają w trybie rootowania.
- Odsłonięcie portów z kontenerów wymaga obecnie ręcznego procesu pomocnika socat.
- Tylko dystrybucje oparte na Ubuntu obsługują systemy plików nakładek w trybie bez rootowania.
- Tryb rootowania jest obecnie dostępny tylko dla kompilacji nocnych, które mogą nie być tak stabilne, jak zwykle.
Od wersji dokowanej 19.3 jest to przestarzałe (i bardziej niebezpieczne niż to konieczne):
W instrukcji dokera można to powiedzieć:
Udzielanie dostępu innego niż root
Demon dokera zawsze działa jako użytkownik root, a od wersji Docker 0.5.2 demon dokera wiąże się z gniazdem Unix zamiast z portem TCP. Domyślnie gniazdo uniksowe jest własnością użytkownika root, więc domyślnie można uzyskać do niego dostęp za pomocą sudo.
Począwszy od wersji 0.5.3, jeśli Ty (lub Twój instalator Docker) utworzysz grupę Unix o nazwie docker i dodasz do niej użytkowników, demon dokera sprawi, że własność gniazda Unix zostanie odczytana / zapisana przez grupę dokerów podczas uruchamiania demona . Demon dokera musi zawsze działać jako użytkownik root, ale jeśli uruchamiasz klienta dokera jako użytkownik w grupie dokerów, nie musisz dodawać sudo do wszystkich poleceń klienta. Od wersji 0.9.0 możesz określić, że grupa inna niż doker powinna mieć gniazdo Unix za pomocą opcji -G.
Ostrzeżenie: Grupa dokerów (lub grupa określona przez -G) jest równoważna z rootem; zobacz szczegóły Docker Daemon Attack Surface i ten post na blogu: Dlaczego nie pozwalamy użytkownikom innym niż root uruchamiać Dockera w CentOS, Fedorze lub RHEL (dzięki michael-n).
W najnowszej wersji eksperymentalnego trybu bez rootowania na GitHub inżynierowie wspominają, że tryb bez rootowania pozwala na uruchamianie dockerd jako nieuprzywilejowanego użytkownika, używając user_namespaces (7), mount_namespaces (7), network_namespaces (7).
Użytkownicy muszą uruchomić dockerd-rootless.sh zamiast dockerd.
$ dockerd-rootless.sh --experimental
Ponieważ tryb rootowania jest eksperymentalny, użytkownicy muszą zawsze uruchamiać dockerd-rootless.sh z opcją –experimental.
Ważne do przeczytania: kroki poinstalacyjne dla systemu Linux (zawiera także szczegółowe informacje na temat powierzchni Docker Daemon Attack Surface ).
Zarządzaj Dockerem jako użytkownik inny niż root
Demon dokera wiąże się z gniazdem Unix zamiast z portem TCP. Domyślnie gniazdo Unix jest własnością użytkownika root, a inni użytkownicy mogą uzyskać do niego dostęp tylko za pomocą sudo. Demon dokera zawsze działa jako użytkownik root.
Jeśli nie chcesz używać sudo podczas korzystania z polecenia dokera, utwórz grupę uniksową o nazwie doker i dodaj do niej użytkowników. Po uruchomieniu demona dokera powoduje, że własność gniazda Unix jest odczytywana / zapisywana przez grupę dokerów.
Dodaj grupę dokerów, jeśli jeszcze nie istnieje:
sudo groupadd docker
Dodaj podłączonego użytkownika „$ USER” do grupy dokerów. Zmień nazwę użytkownika, aby pasowała do preferowanego użytkownika, jeśli nie chcesz korzystać z bieżącego użytkownika:
sudo gpasswd -a $USER docker
Wykonaj a newgrp docker
lub wyloguj się / zaloguj, aby aktywować zmiany w grupach.
Możesz użyć
docker run hello-world
aby sprawdzić, czy możesz uruchomić dokera bez sudo.