Виконання 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.
Список літератури:
Приклад оформлено за допомогою деталей з цієї публікації в блозі . Також цитати цієї відповіді - з цього чудового пояснення Майка . Ще одне чудове прочитання щодо цього можна знайти з відповіді звідси .