Spuštěno unshare -m
dá volajícímu procesu soukromou kopii svého jmenného prostoru připojení a také zruší sdílení atributů systému souborů, takže již nesdílí svůj kořenový adresář, aktuální adresář nebo atributy umask s žádným jiným procesem.
Co tedy říká výše uvedený odstavec? Zkusme to pochopit na jednoduchém příkladu.
Terminál 1:
Níže uvedené příkazy dělám v prvním terminálu.
#Creating a new process
unshare -m /bin/bash
#creating a new mount point
secret_dir=`mktemp -d --tmpdir=/tmp`
#creating a new mount point for the above created directory.
mount -n -o size=1m -t tmpfs tmpfs $secret_dir
#checking the available mount points.
grep /tmp /proc/mounts
Poslední příkaz mi dává výstup jako,
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
Nyní jsem provedl také následující příkazy.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
Výstup ls
příkaz je,
ls -lFa
total 4
drwxrwxrwt 2 root root 80 Sep 3 22:23 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
-rw-r--r-- 1 root root 0 Sep 3 22:23 hello
-rw-r--r-- 1 root root 0 Sep 3 22:23 helloagain
Co je tedy na tom všem tak důležité? Proč bych to měl dělat?
Nyní otevírám další terminál (terminál 2 ) a proveďte níže uvedené příkazy.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
Výstup je jako níže.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
Soubory hello
a helloagain
nejsou viditelné a dokonce jsem se přihlásil jako root, abych tyto soubory zkontroloval. Výhodou tedy je, že tato funkce nám umožňuje vytvořit soukromý dočasný souborový systém, který ani jiné procesy vlastněné rootem nemohou vidět ani procházet.
Z manuálové stránky unshare
,
jmenný prostor připojení Připojení a odpojení souborových systémů neovlivní zbytek systému (příznak CLONE_NEWNS), s výjimkou souborových systémů, které jsou explicitně označeny jako sdílené (s mount--make-shared; sdílené příznaky viz /proc/self/mountinfo).
Doporučuje se použít mount --make-rprivate nebo mount --make-rslaveafter unshare--mount, abyste se ujistili, že přípojné body v novém jmenném prostoru nejsou skutečně sdíleny s nadřazeným jmenným prostorem.
Paměť používaná pro jmenný prostor je VFS, který pochází z jádra. A – pokud to nastavíme hned na začátku – můžeme vytvářet celá virtuální prostředí, ve kterých jsme uživatelem root bez oprávnění root.
Odkazy:
Příklad je zarámován pomocí podrobností z tohoto příspěvku na blogu. Také citace této odpovědi jsou z tohoto skvělého vysvětlení od Mika. Další skvělé čtení týkající se tohoto lze nalézt v odpovědi odtud.
Pokud máte na svém systému nainstalovaný bubblewrap, můžete to udělat snadno v jednom kroku:
bwrap --dev-bind / / --tmpfs /tmp bash
Ve výše uvedeném příkladu bude mít vnitřní bash svůj vlastní pohled na /tmp.
Řešení inspirované odpovědí @Ramesh – díky za něj!