GNU/Linux >> Znalost Linux >  >> Linux

Pochopení vlastnictví souborů uživatele v dockeru:jak se vyhnout změně oprávnění propojených svazků

Našel jsem dvě možnosti:

CHOWN všechny věci (poté, co uděláte svou práci)

Udělal jsem 00 a kontejner vytvořil soubory v rámci 18 tak je vlastněn procesem docker. Nicméně 21 je stále v mém vlastnictví. Takže v rámci procesu dockeru ano

33

49 vrátí 59 v mém případě je to 67 mého uživatele. I když neexistuje žádný uživatel 74 v kontejneru dockeru je tam id (a 80 jen řekne "neznámý", když se zeptáte na uživatelské jméno).

Každopádně 94 poslušně převede vlastnictví obsahu 106 na 119 (který, pokud jde, neexistuje, ale mimo kontejner jsem to já). Takže nyní vlastním všechny soubory. Kontejner může stále věci upravovat, pokud chce, protože z jeho pohledu je to 125 .

A se světem je vše v pořádku.

139 takže všechny vytvořené soubory budou mít automaticky správného vlastníka

Dalším způsobem, jak toho dosáhnout, je 146 příznak při spuštění dockeru.

157

Tímto způsobem je uživatel dockeru v kontejneru 162 .

Nicméně: to znamená vzdát se kořenového oprávnění v kontejneru (170 , atd.). Pokud nevytvoříte uživatele s tímto novým uid a nepřidáte ho do 189 skupina.


Je to správně? Může mě někdo nasměrovat na dokumentaci tohoto, jen se domnívám na základě výše uvedeného experimentu.

Možná je to jen proto, že oba mají v jádře stejnou číselnou hodnotu, a pokud bych testoval na systému, kde můj domácí uživatel neměl ID 1000, oprávnění by se v každém případě změnila?

Přečtěte si 198 , což vám může poskytnout lepší představu o tom, jak fungují oprávnění / vlastnictví souborů.

V zásadě má však každý soubor na vašem počítači nalepenou sadu bitů, které definují jeho oprávnění a vlastnictví. Když 201 soubor, právě nastavujete tyto bity.

Když 211 soubor konkrétnímu uživateli/skupině pomocí uživatelského jména nebo názvu skupiny 225 bude hledat v 239 pro uživatelské jméno a 244 aby se skupina pokusila namapovat název na ID. Pokud uživatelské jméno / název skupiny v těchto souborech neexistuje, 255 selže.

[email protected]:/test# touch test
[email protected]:/test# ll
total 8
drwxr-xr-x  2 root root 4096 Oct 22 18:15 ./
drwxr-xr-x 22 root root 4096 Oct 22 18:15 ../
-rw-r--r--  1 root root    0 Oct 22 18:15 test
[email protected]:/test# chown test:test test
chown: invalid user: 'test:test'

Můžete však 265 soubor používající ID čehokoli, co chcete (samozřejmě v rámci nějakých horních kladných celých čísel), ať už na vašem počítači existuje uživatel/skupina s těmito ID nebo ne.

[email protected]:/test# chown 5000:5000 test
[email protected]:/test# ll
total 8
drwxr-xr-x  2 root root 4096 Oct 22 18:15 ./
drwxr-xr-x 22 root root 4096 Oct 22 18:15 ../
-rw-r--r--  1 5000 5000    0 Oct 22 18:15 test

Bity UID a GID jsou nastaveny v samotném souboru, takže když tyto soubory připojíte do kontejneru dockeru, soubor má stejné UID vlastníka/skupiny jako na hostiteli, ale je nyní namapován na 277 v kontejneru, což bude pravděpodobně jiný uživatel, pokud jej nevlastní root (UID 0).

Skutečná otázka samozřejmě zní:'Co s tím mám dělat?' Pokud je bob na daném hostitelském počítači přihlášen jako bob, měl by být schopen spustit kontejner jako bob a neměl by mít změněná oprávnění k souboru pod svým hostitelským účtem. Ve skutečnosti potřebuje spouštět kontejner jako uživatelský ukotvitelný panel, aby nedošlo ke změně jeho účtu.

Zdá se, že s vaším aktuálním nastavením se budete muset ujistit, že vaše UID> uživatelská jména v 287 na vašem hostiteli se shodují s vašimi UID> uživatelskými jmény ve vašich kontejnerech 290 pokud chcete pracovat s vaším připojeným uživatelským adresářem jako stejný uživatel, který je přihlášen k hostiteli.

Můžete vytvořit uživatele s konkrétním ID uživatele pomocí 304 . Buuuu, to vypadá jako chaotické řešení...

Možná budete muset přijít s řešením, které nepřipojí domovský adresář hostitelských uživatelů.


Takže jsem skončil v tomto příspěvku a hledal jsem, jak obnovit vlastnictví všech souborů (vlastněných uživatelem root), které vyšly z kontejneru dockeru spuštěného jako root , mému neprivilegovanému uživateli v hostiteli.

Potřeboval jsem, aby se proces uvnitř kontejneru spouštěl jako root, takže při spuštění dockeru nemohu použít -u.

Nejsem hrdý na to, co jsem udělal, ale na konci svého bash skriptu jsem přidal toto:

docker run --rm -it \
    --entrypoint /bin/sh \
    -e HOST_UID=`id -u` \
    -v ${HOST_FOLDER_OWNED_BY_ROOT}:/tmp \
    alpine:latest \
    -c 'chown -R ${HOST_UID}:${HOST_UID} /tmp/'

Pojďme přerušit některé řádky:

  • Spusťte /bin/sh uvnitř kontejneru:

--entrypoint /bin/sh

  • Předejte uid aktuálního uživatele jako proměnnou prostředí do kontejneru:

-e HOST_UID=`id -u`

  • Připojte libovolnou složku, kterou chcete znovu vlastnit, zpět ke svému uživateli (vyplněnou soubory vlastněnými uživatelem root, na výstupu z předchozího kontejneru, který běžel jako root ), pod číslem 315 tohoto nového kontejneru :

-v ${HOST_FOLDER_OWNED_BY_ROOT}:/tmp

  • Spusťte 327 rekurzivně s uid hostitele přes cílový adresář (připojený uvnitř kontejneru v 338 ):

-c 'chown -R ${HOST_UID}:${HOST_UID} /tmp/'

Tímto jsem tedy dostal vlastněné soubory zpět ke svému současnému uživateli, aniž bych musel „eskalovat“ oprávnění na root nebo sudo.

Je to špinavé, ale fungovalo to. Doufám, že jsem pomohl.


Linux
  1. Jak změnit oprávnění z uživatele root na všechny uživatele?

  2. Jak se vyhnu změně oprávnění souboru pro Linux při ukládání přes připojení samba?

  3. Jak zjistím oprávnění konkrétního uživatele v systému Linux s přístupem root?

  1. Jak zkopírovat oprávnění a vlastnictví souboru do jiného souboru v Linuxu

  2. Linux chmod and chown – Jak změnit oprávnění a vlastnictví souborů v Linuxu

  3. Jak může správce souborů připojit disk bez root?

  1. Jak zachovat vlastnictví a oprávnění k souborům při kopírování souborů nebo adresářů

  2. Zkontrolujte oprávnění souborů Linux pomocí ls

  3. Pochopení toho, jak Umask řídí počáteční oprávnění k souborům / adresářům v Linuxu