Чому моє прив'язування видно поза його простором імен?


12

Тому я намагаюся зрозуміти, як працює простір імен для кріплення Linux. Отже, я зробив невеликий експеримент і відкрив два термінали і провів наступне:

Термінал 1

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

Термінал 2

root@goliath:~# ls b
foo.txt

Яким чином кріплення видно в Терміналі 2? Оскільки він не є частиною простору імен для монтування, я очікував, що каталог тут з’явиться порожнім. Я також спробував пройти -o shared=noі використовувати --make-privateваріанти mount, але отримав такий же результат.

Що мені не вистачає і як я можу зробити його фактично приватним?


кріплення загальносистемні, не характерні для середовища оболонки. Спільні, рабські, приватні та незмінні - це не те, що ви думаєте, що вони є. читати man mount.
cas

3
@cas: Погодьтеся, --make-privateце не те, що я хочу. Але хіба це не сенс простору імен кріплення (що вони не є системою)?
FatalError

Відповіді:


11

Якщо ви перебуваєте на системному дистрибутиві з util-linuxверсією менше 2,27, ви побачите цю неінтуїтивну поведінку. Це тому, що пропонує CLONE_NEWNSтакі прапори, як sharedзалежно від налаштування в ядрі. Це налаштування є звичайним private, але системний змінює це на shared. Станом на util-linux2.27, було зроблено виправлення, яке змінює поведінку unshareкоманди privateза замовчуванням для використання в якості поведінки поширення за замовчуванням як на більш інтуїтивну.

Рішення

Якщо ви перебуваєте на Systemd системи з <2,27 util-linux, ви повинні перемонтувати кореневу файлову систему після запуску unshareкоманди:

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

Якщо ви перебуваєте у системній системі з> = 2,27 util-linux, вона повинна працювати, як очікувалося, у прикладі, який ви подали у своєму запитанні, дослівно, без необхідності перераховувати. Якщо ні: перейдіть --propagation privateдо unshareкоманди, щоб змусити розповсюдження простору імен монтування бути приватним.


0

це не працювало в ubuntu, (15.04 та 14.04). він працював на Fedora. і для Fedora. вам потрібно - зробити приватне чи ні, ви також можете перевірити

cat / proc / self / mountinfo | grep поділився

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

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