Bieganie unshare -m
daje procesowi wywołującemu prywatną kopię przestrzeni nazw montowania, a także oddziela atrybuty systemu plików, dzięki czemu nie współdzieli już swojego katalogu głównego, katalogu bieżącego ani atrybutów umask z żadnym innym procesem.
Co więc mówi powyższy akapit? Spróbujmy zrozumieć na prostym przykładzie.
Terminal 1:
Wykonuję poniższe polecenia w pierwszym terminalu.
#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
Ostatnie polecenie daje mi wynik jako:
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
Teraz wykonałem również następujące polecenia.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
Dane wyjściowe ls
polecenia to
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
Więc o co chodzi z tym wszystkim? Dlaczego mam to zrobić?
Teraz otwieram inny terminal ( terminal 2 ) i wykonuję poniższe polecenia.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
Dane wyjściowe są jak poniżej.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
Pliki hello
i helloagain
nie są widoczne, a nawet zalogowałem się jako root, aby sprawdzić te pliki. Tak więc zaletą jest ta funkcja umożliwia nam utworzenie prywatnego tymczasowego systemu plików, którego nawet inne procesy należące do roota nie mogą zobaczyć ani przejrzeć.
Ze strony mężczyzny unshare
,
przestrzeń nazw montowania Montowanie i odmontowywanie systemów plików nie wpłynie na resztę systemu (flaga CLONE_NEWNS), z wyjątkiem systemów plików, które są jawnie oznaczone jako współużytkowane (za pomocą mount --make-shared; zobacz / proc / self / mountinfo dla flag współdzielonych).
Zaleca się użycie mount --make-rprivate lub mount --make-rslave po unshare --mount, aby upewnić się, że punkty montowania w nowej przestrzeni nazw są naprawdę nieudostępnione z nadrzędnej przestrzeni nazw.
Pamięć używana w przestrzeni nazw to VFS pochodzący z jądra. I - jeśli skonfigurujemy to w pierwszej kolejności - możemy tworzyć całe środowiska wirtualne, w których jesteśmy użytkownikami root bez uprawnień roota.
Referencje:
Przykład jest w ramce z wykorzystaniem szczegółów z tego postu na blogu . Również cytaty tej odpowiedzi pochodzą z tego wspaniałego wyjaśnienia Mike'a . Kolejną wspaniałą lekturę na ten temat można znaleźć w odpowiedzi tutaj .