за процес монтажу приватної файлової системи


24

Я перевіряв unshareкоманду, і відповідно до сторінки man,

   unshare - run program with some namespaces unshared from parent

Я також бачу, що тип простору імен вказаний як,

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

Яка саме мета цього простору імен для монтування ? Я намагаюся зрозуміти це поняття за допомогою якогось прикладу.



@Gilles, спасибі Я перевірю це. Тим часом, будь ласка, повідомте мене, чи потрібно ще щось додати у відповідь.
Рамеш

Відповіді:


29

Виконання unshare -mнадає процесу виклику приватну копію простору імен монтування, а також атрибути файлової системи атрибути, так що він більше не ділиться кореневою каталогом, поточним каталогом або атрибутами umask з будь-яким іншим процесом.

Отже, що говорить вищевказаний абзац? Спробуємо розібратися на простому прикладі.

Термінал 1:

Я виконую наступні команди в першому терміналі.

#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 

Остання команда дає мені вихід у вигляді,

tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0

Тепер я також виконував такі команди.

cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa

Вихід lsкоманди -

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

Тож яка велика справа в цьому? Чому я повинен це робити?

Зараз відкриваю інший термінал ( термінал 2 ) і виконую команди нижче.

cd /tmp/tmp.7KtrAsd9lx
ls - lFa

Вихід, як показано нижче.

ls -lFa
total 8
drwx------   2 root root 4096 Sep  3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep  3 22:22 ../

Файли helloі helloagainне помітні , і я навіть увійти в систему як корінь , щоб перевірити ці файли. Тому перевага полягає в тому, що ця функція дозволяє нам створити приватну тимчасову файлову систему, яку навіть інші кореневі процеси не можуть бачити або переглядати.

Зі сторінки чоловіка unshare,

Простір імен для монтування Монтаж та демонтаж файлових систем не вплине на решту системи (прапор CLONE_NEWNS), за винятком файлових систем, які явно позначені як спільні (з mount --make-shared; див. / proc / self / mountinfo для спільних прапорів).

Рекомендується використовувати mount --make-rprivate або mount --make-rslave після unshare --mount, щоб переконатися, що точки монтажу в новому просторі імен справді не є спільними з батьківського простору імен.

Пам'ять, яка використовується для простору імен, - це VFS, який є з ядра. І - якщо ми встановимо це в першу чергу прямо - ми можемо створити цілі віртуальні середовища, в яких ми є кореневим користувачем без дозволів root.

Список літератури:

Приклад оформлено за допомогою деталей з цієї публікації в блозі . Також цитати цієї відповіді - з цього чудового пояснення Майка . Ще одне чудове прочитання щодо цього можна знайти з відповіді звідси .


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.І в порівнянні chrootз chrootфайлами видно іншим. Це дивовижно, і таке речення, мабуть, повинно бути схожим на вершину відповіді. + 1ed.
Сергій Колодяжний

1
Ніщо не втече корінь! Використовуючи nsenterви можете ввести простір імен і переглянути тимчасові файли. Якщо припустити лише одне видалення доступу (те, що володіє тимпдіром), то sudo nsenter -t $(pgrep -P $(ps aux | grep unshare | grep -v grep | awk '{print $2}')) -m -pдозволить переглядати вміст
Earcam

2

Якщо у вашій системі встановлено обгортку бульбашок , ви можете це зробити легко за один крок:

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

У наведеному вище прикладі внутрішній баш матиме власний вигляд на / tmp.

Рішення, натхнене відповіддю @ Рамеш - дякую за це!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.