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