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.socket
jest włączony i uruchomiony:systemctl --user enable --now podman.socket
jeśli korzystamy z rootless podmansudo systemctl enable --now podman.socket
jeśli korzystamy z rootfull podman
system posiada komendę
docker
zmapowaną napodman
, np. za pomocą:sudo ln -s /usr/bin/podman /usr/bin/docker
- uwaga: nie wystarczy zwykły alias -
docker
musi być dostępny poprzezssh
, np.ssh <user>@<ip> docker --version
powinien 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-world
uruchamia się bez żadnych błędów - zobacz sekcję dostępcgroup
poniż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 pids
cat "/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-reloadPo 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