na proces punkty podłączenia prywatnego systemu plików


24

Sprawdzałem unsharepolecenie i zgodnie z jego instrukcją,

   unshare - run program with some namespaces unshared from parent

Widzę też, że istnieje rodzaj przestrzeni nazw wymienionej jako,

 mount namespace
              mounting and unmounting filesystems will not affect rest of the system.

Jaki jest dokładnie cel tej przestrzeni nazw montowania ? Próbuję zrozumieć tę koncepcję za pomocą jakiegoś przykładu.



@Gilles, dzięki. Sprawdzę to. W międzyczasie daj mi znać, jeśli w odpowiedzi należy dodać coś jeszcze.
Ramesh

Odpowiedzi:


29

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 lspolecenia 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 helloi helloagainnie 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 .


1
this feature makes it possible for us to create a private temporary filesystem that even other root-owned processes cannot see or browse through.I w porównaniu do chroot, z chrootplikami są widoczne dla innych. To niesamowite, a zdanie to powinno być jak na górze odpowiedzi. + 1ed.
Sergiy Kolodyazhnyy

1
Nic nie umknie korzeniu! Za pomocą nsentermożesz wprowadzić przestrzeń nazw i przeglądać pliki tymczasowe. Zakładając tylko jedno unshare (ten, który jest właścicielem tempdir), wtedy sudo nsenter -t $(pgrep -P $(ps aux | grep unshare | grep -v grep | awk '{print $2}')) -m -ppozwoli na przeglądanie zawartości
kamera douszna

2

Jeśli masz w swoim komputerze zainstalowany program Bubblewrap , możesz to zrobić w jednym kroku:

bwrap --dev-bind / / --tmpfs /tmp bash

W powyższym przykładzie wewnętrzny bash będzie miał swój własny widok na / tmp.

Rozwiązanie zainspirowane odpowiedzią @ Ramesh-s - dzięki za to!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.