GNU/Linux >> Znalost Linux >  >> Linux

Řízení přístupu k rootless Podman pro uživatele

Nedávno tým Podman obdržel zprávu Bugzilla, která tvrdila, že neexistuje způsob, jak zabránit rootless Podmanovi ve spouštění kontejnerů. Reportér nastavil uživatelský účet bez položek v /etc/subuid a /etc/subgid a oznámil, že rootless Podman může stále provozovat hello-world kontejner.

Chybný předpoklad

Odebrání informací o uživateli z /etc/subuid nebrání uživatelům používat Podman. Podívejme se hlouběji na to, co se děje, když někdo používá rootless Podman ke spuštění kontejneru.

Nejprve si uvědomte, že obrázky kontejnerů jako hello-world jsou jen tarbally spolu s nějakým obsahem JSON umístěným na webovém serveru zvaném registr obrázků kontejnerů. Jakákoli aplikace, která může komunikovat s webovým serverem, je může stáhnout pomocí standardních webových protokolů a nástrojů, jako je curl .

Když Podman stáhne obrázek, nejprve vytvoří a vloží uživatelský jmenný prostor. Tento uživatelský jmenný prostor obvykle mapuje UID uživatele na root (UID=0) v rámci uživatelského jmenného prostoru. Poté se podívá do /etc/subuid pro uživatele a používá zde uvedená UID k naplnění zbývajících UID dostupných v rámci uživatelského jmenného prostoru. Totéž dělá pro skupiny pomocí /etc/subgid . Pokud v /etc/subuid nejsou žádné položky a /etc/subgid , pak se uživatelský jmenný prostor skládá pouze z UID uživatele mapovaného jako root. Jakmile je uživatelský jmenný prostor nastaven, Podman extrahuje obsah tar obrázku. Pokud má obrázek soubory vlastněné jinými uživateli než UID=0, Podman extrahuje a pokusí se chown obsah určenému uživateli a skupině. Pokud uživatel a skupina nejsou definováni v uživatelském jmenném prostoru, pak chown selže a Podman selže.

V příkladu Bugzilly se reportér pokusil spustit hello-world .

$ podman run hello-world
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/hello-world:latest...
Getting image source signatures
Copying blob b8dfde127a29 done  
Copying config d1165f2212 done  
Writing manifest to image destination
Storing signatures

Hello from Docker!
…

Fungovalo to, i když uživatel neměl žádné položky v /etc/subuid a /etc/subgid .

Vstupme do uživatelského jmenného prostoru a uvidíme, co se děje.

Podman unshare cat /proc/self/uid_map
         0       3267         

Všimněte si, že můj účet je nastaven bez přístupu v /etc/subuid . Podman mapuje moje UID 3267 na UID 0 pro rozsah jednoho UID. Nyní se podívejme na obsah obrázku kontejneru hello-world . Zadejte uživatelský jmenný prostor, připojte hello-world obrázek a seznam obsahu.

$ podman unshare
# mnt=$(podman image mount hello-world)
# ls -l $mnt
total 16
-rwxrwxr-x. 1 root root 13336 Mar  5 18:25 hello

Všimněte si, že jediným obsahem je hello příkaz. Toto je staticky propojený binární soubor GO, vlastněný rootem v rámci uživatelského jmenného prostoru a UID=3267 v mém domovském adresáři.

To je důvod, proč příkaz fungoval i bez dalších UID a GID.

Zkusme spustit obrázek kontejneru s více než jedním UID.

$ podman run fedora echo hi
Resolved "fedora" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull registry.fedoraproject.org/fedora:latest...
Getting image source signatures
Copying blob 7679c09af385 done  
Copying config 3567369c67 done  
Writing manifest to image destination
Storing signatures
Error: Error committing the finished image: error adding layer with blob "sha256:7679c09af3851a1622782c74864351c296a0d1886813862fd7116383aeba9f07": Error processing tar file(exit status 1): potentially insufficient UIDs or GIDs available in user namespace (requested 0:12 for /var/spool/mail): Check /etc/subuid and /etc/subgid: lchown /var/spool/mail: invalid argument

Všimněte si, že Podman může strhnout tarbally (označuje je jako kuličky). Když se je pokusí extrahovat, selže, když se pokusí chown /var/spool/mail adresář na GID (12), který není definován v prostoru jmen uživatelů, a kontejner selže.

Sečteno a podtrženo

Spouštění neprivilegovaných kontejnerů je bezpečné a nemůže ve skutečnosti ovlivnit systém o nic víc než pouhé přihlášení do systému. Uživatel Podman provádí úkoly, které mohou dělat běžní uživatelé:Vytahovat obsah z webových serverů a rozbalit je. Konečně mohou uživatelé dokonce spustit obsah. K jediným chybám dochází, když se uživatel pokusí přepnout na UID, která uživatel nemá povoleno pomocí příkazů jako chown nebo su .

Ve výše uvedeném příkladu Podman neudělal nic, co by vyžadovalo další oprávnění. Všechny procesy prováděné uživatelem přes Podman byly pod stejnými omezeními jako jakýkoli uživatelský proces. Ve skutečnosti jsou více omezeny, protože jsou zabaleny do SELinux, SECCOMP a dalších bezpečnostních mechanismů.

Použití rootless Podman ke spuštění bitové kopie kontejneru není o nic méně bezpečné než umožnění uživatelům stahovat spustitelné soubory z webového serveru a spouštět je v jejich domovském adresáři.

Pokud přesto chcete určitým uživatelům v systému zabránit ve spouštění Podmana, musíte změnit oprávnění na samotném Podmanu.

# chmod 750 /usr/bin/podman
# groupadd podman
# chown root:podman /usr/bin/podman

Přidejte uživatele, kterým chcete povolit přístup k Podman, do skupiny podman. Uvědomte si, že až bude Podman aktualizován, budete muset provést chmod a chown znovu příkazy a rpm -qV podman ohlásí problémy s instalací.

Kredit navíc

Pro pokročilé uživatele, konkrétně lidi v oblasti High-Performance Computing (HPC), jsme přidali speciální příznak ignore_chown_errors , do úložiště kontejneru.

man storage.conf
…
       ignore_chown_errors = "false"
         ignore_chown_errors can be set to allow a non privileged user running with a  single UID within a user namespace to run containers. The user can pull and use any image, even those with multiple uids.  Note multiple UIDs will be squashed down to the default uid in the container.  These images will have no separation between the users in the container. (default: false)

Nastavením tohoto příznaku v /etc/containers/storage.conf z $HOME/.config/containers/storage.conf to je pravda, Podman může úspěšně spustit kontejner Fedory.

$ grep ignore_chown_err /etc/containers/storage.conf
# ignore_chown_errors can be set to allow a non privileged user running with
ignore_chown_errors = "true"
$ podman unshare cat /proc/self/uid_map
         0        3267          1


$ podman run fedora echo hi
Resolved "fedora" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull registry.fedoraproject.org/fedora:latest...
Getting image source signatures
Copying blob 7679c09af385 done  
Copying config 3567369c67 done  
Writing manifest to image destination
Storing signatures
hi

Tentokrát, když se Podman pokusil chown /var/spool/mail adresář a obdržel chybu, ignoroval ji a pokračoval. HPC nechce, aby uživatelé měli více než jedno UID, takže to umožňuje jejich uživatelům spouštět standardní obrazy OCI, ale vůbec nemusí uvolňovat nastavení zabezpečení. Všimněte si, že to funguje dobře, pokud jediné UID, které spustíte uvnitř kontejneru, je kořen kontejneru. Pokud se proces z jakéhokoli důvodu pokusí změnit UID na UID nedefinované v kontejneru, selže. Ve většině případů budou také všechny soubory v obraze ve vlastnictví uživatele. Tento uživatel kontejneru má plná oprávnění ke čtení/zápisu pro veškerý obsah.

[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]

Sbalit

Správci Podman si musí být vědomi toho, jaké úrovně přístupu jsou udělovány. Ujistěte se, že rozumíte záměru a funkci /etc/subuid a /etc/subgid a jak ovlivní zabezpečení kontejneru.

Nakonec použijte ignore_chown_errors možnost s opatrností. Byl navržen pro scénáře HPC.


Linux
  1. Proč je riskantní poskytnout Sudo Vim přístup běžným uživatelům?

  2. Povolit přístup X Display pro místního uživatele?

  3. Rackspace Cloud Essentials – Konfigurace uživatele ve vsftpd pro CentOS

  1. Jak omezit su přístup pouze uživateli pomocí PAM v Linuxu

  2. osvědčený postup pro přístupová oprávnění uživatelům pro apache tomcat

  3. Přístup odepřen konkrétnímu uživateli konfigurací účtu PAM

  1. Proč nemůže bezkořenový Podman vytáhnout můj obrázek?

  2. Co se děje v zákulisí kontejneru Podman bez kořenů?

  3. Nelze získat přístup SSH pro nového uživatele