Запуск 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
не видны, и я даже вошел в систему как пользователь root, чтобы проверить эти файлы. Таким образом, преимущество заключается в том, что эта функция позволяет нам создавать частные временные файловые системы, которые даже другие процессы, принадлежащие корню, не могут просматривать или просматривать.
Из справочной страницы unshare
,
mount namespace Монтирование и размонтирование файловых систем не повлияет на остальную систему (флаг CLONE_NEWNS), за исключением файловых систем, которые явно помечены как общие (с помощью mount --make-shared; см. / proc / self / mountinfo для общих флагов).
Рекомендуется использовать mount --make-rprivate или mount --make-rslave после unshare --mount, чтобы убедиться, что точки монтирования в новом пространстве имен действительно не разделены из родительского пространства имен.
Память, используемая для пространства имен, - это VFS от ядра. И - если мы настроим его в первую очередь - мы можем создать целые виртуальные среды, в которых мы являемся пользователем root без прав root.
Ссылки:
Пример оформлен с использованием деталей из этого поста в блоге . Кроме того, цитаты из этого ответа взяты из этого замечательного объяснения Майка . Еще одно замечательное прочтение об этом можно найти в ответе здесь .