Podman
Możliwe jest zastąpienie Docker'a na maszynie sensora programem Podman, jeśli jest on w wersji 4.0.0 lub nowszej.
Należy pamiętać że jest to konfiguracja dla bardziej zaawansowanych użytkowników, i mogą wystąpić problemy z kompatybilnością.
Podman może być uruchomiony w trybie rootfull, gdzie analogicznie do Docker'a,
kontenery uruchamiane są przez użytkownika root.
Może być on także uruchomiony w trybie rootless, gdzie kontenery uruchamiane są
przez użytkownika bez dostępów root.
Należy zwrócić uwagę w jakim trybie uruchomiliśmy podman.socket. Jeśli jako
rootfull, w TrapInit powinnyśmy skonfigurować dostęp jako użytkownik root.
W przeciwnym wypadku, dostęp powinien być skonfigurowany dla tego samego użytkownika
dla którego uruchomiony jest podman.socket.
Ze względu na aktualne ograniczenia Podman, pułapki uruchomione na sensorze z rootless Podman nie będa poprawnie raportowały źródłowego IP w incydentach.
Wymagania
Aby użyć Podman zamiast Docker z aplikacją TrapInit, należy upewnić się że:
-
instalacja Podman jest w wersji 4.0.0 lub nowszej, i obsługuje komendę
podman system dial-stdio -
podman.socketjest włączony i uruchomiony:systemctl --user enable --now podman.socketjeśli korzystamy z rootless podmansudo systemctl enable --now podman.socketjeśli korzystamy z rootfull podman
-
system posiada komendę
dockerzmapowaną napodman, np. za pomocą:sudo ln -s /usr/bin/podman /usr/bin/docker- uwaga: nie wystarczy zwykły alias -
dockermusi być dostępny poprzezssh, np.ssh <user>@<ip> docker --versionpowinien się poprawnie wykonywać
- uwaga: nie wystarczy zwykły alias -
-
użytkownik, który będzie używany przez TrapInit może uruchamiać kontenery w podman z limitem zasobów
- należy upewnić się, że np.
podman run --rm -m 250MB hello-worlduruchamia się bez żadnych błędów - zobacz sekcję dostępcgroupponiżej
- należy upewnić się, że np.
Należy pamiętać, aby powyższe komendy podman wykonywać jako ten sam użytkownik, który
będzie skonfigurowany w aplikacji TrapInit.
Dostęp cgroup
Aby poprawnie działało uruchamianie kontenerów
Może być wymagane ustawienie domyślnego runtime na crun, aby działało to poprawnie.
W ~/.config/containers/containers.conf ustawiamy (należy się też upewnić, że crun jest zainstalowany w systemie):
[engines]
runtime = "crun"
Jeśli korzystamy z rootless podman, konieczna jest dodatkowo odpowiednia konfiguracja uprawnień użytkownika.
Konfiguracja użytkownika
-
Upewnij się, że lista uprawnień zawiera
cpuset cpu memory pidscat "/sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers"Jeśli tak jest, dalsze działania nie są konieczne.
-
Dodaj konieczne uprawnienia
sudo mkdir -p /etc/systemd/system/user@.service.d
echo -e "[Service]\nDelegate=memory pids cpu cpuset" | sudo tee /etc/systemd/system/user@.service.d/delegate.conf
sudo systemctl daemon-reload
systemctl --user daemon-reload -
Po nadaniu uprawnień, ponownie sprawdź ich poprawność:
cat "/sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers"Oczekiwany rezultat to:
cpuset cpu memory pids