Пространства имен Linux. Возможно ли существование пространства имен в сети без привязки к процессу?
ip netns
создает ссылку на пространство имен имен (named) в /var/run/ns
, которое можно легко отследить. То же самое можно было бы определить через /proc/[pid]/ns/net
. Тем не менее, для некоторых пользовательских программ можно создать сеть ns и сохранить соответствующий индекс в другом нетрадиционном месте. Это может затруднить определение наличия или отсутствия сетей, которые мы могли бы перечислять.
Во-вторых, unshare <cmd>
уничтожает сеть ns, когда процесс завершается, и это нормально. Однако ip netns exec <netns> <cmd>
будет поддерживать ns даже после выхода команды/процесса. Поэтому я считаю, что любая пользовательская программа может сделать то же самое.
Следовательно, возникает вопрос: возможно ли, что пользовательская программа создает неназванную сеть ns, и она не связана с каким-либо процессом?
Кроме того, можно ли перечислять такие (скрытые) сети ns из пользовательского пространства, учитывая, что мы не знаем пути к inodes? (Ядро, конечно, имеет связанный список net ns). Фрагмент кода будет полезен.
Ответы
Ответ 1
Возможно ли, что пользовательская программа создает неназванную сеть ns, и она не связана с каким-либо процессом?
Да, это возможно. Согласно справочной странице namespaces Linux (http://man7.org/linux/man-pages/man7/namespaces.7.html):
Каждый процесс имеет подкаталог /proc/ [pid]/ns/, содержащий одну запись для каждого пространства имен, которое поддерживает управление с помощью setns (2):
Установите привязку (см. mount (2)) один из файлов в этом каталоге, чтобы в другом месте в файловой системе сохраняется соответствующее пространство имен процесс, указанный pid live, даже если все процессы, пространство имен завершается.
О другом вопросе:
Можно ли перечислять такие (скрытые) сети ns из пользовательского пространства, учитывая, что мы не знаем пути к inodes?
Если вы рассмотрите приведенную выше цитату из первого вопроса, изучив связанные пути, вы сможете найти эти скрытые пространства имен.