UTS 命名空间
setting hostname, domainname will not affect rest of the system (CLONE_NEWUTS flag)
Run Code Online (Sandbox Code Playgroud)
是什么UTS立场?
Linux 中是否有任何方法可以列出正在运行的主机上的所有命名空间?我需要检查特定进程的命名空间(例如,在 LXC 容器中运行的进程和主机上的所有其他进程),然后找出它们的 cgroup。
我已经问过一个关于如何在 Linux 中列出所有命名空间的问题,但是没有任何正确和准确的答案,所以我想找到一种方法可以帮助我找出某个进程或组的 PID 的命名空间过程。如何在 Linux 中完成?
我正在检查unshare命令并根据它的手册页,
   unshare - run program with some namespaces unshared from parent
Run Code Online (Sandbox Code Playgroud)
我还看到有一种命名空间被列为,
 mount namespace
              mounting and unmounting filesystems will not affect rest of the system.
Run Code Online (Sandbox Code Playgroud)
这个mount 命名空间的目的究竟是什么?我试图在一些例子的帮助下理解这个概念。
我有一个程序,我想在不关闭实际网络的情况下在离线模式下进行测试。该程序仍需要连接到本地套接字,包括 unix 域套接字和环回。它还需要侦听环回并对其他应用程序可见。
但是尝试连接到远程机器应该会失败。
我想有一个工具,它的工作原理是strace/ unshare/ sudo,只是运行在互联网(和LAN)隐蔽和一切仍在工作的命令:
$ offline my-program-to-test
Run Code Online (Sandbox Code Playgroud)
这个问题暗示了答案:阻止进程的网络访问?
那里有一些建议,例如以另一个用户身份运行然后操作 iptables,或unshare -n. 但在这两种情况下,我都不知道让 unix 域套接字和环回与主系统共享的咒语 - 该问题的答案只告诉我如何取消共享整个网络。
我正在测试的程序仍然需要连接到我的 X 服务器和 dbus,甚至能够监听来自系统上其他应用程序的环回连接。
理想情况下,我想避免创建 chroot 或用户或 VM 等,因为它变得和拔掉网线一样烦人。即问题的重点是我怎样才能使它像sudo.
我希望该过程能够 100% 正常运行,除非指定非本地地址的网络调用会失败。理想情况下,保持相同的 uid、相同的 homedir、相同的密码、相同的所有内容,除了...离线。
我正在使用 Fedora 18,因此不可移植的 Linux 答案很好(甚至是预期的)。
我什至很高兴通过编写 C 程序来解决这个问题,如果涉及到的话,那么涉及编写 C 的答案就很好。我只是不知道 C 程序需要进行哪些系统调用才能在保留本地网络的同时撤销外部网络访问。
任何试图支持“离线模式”的开发人员都可能会喜欢这个实用程序!
我知道 Linux 命名空间,除此之外,还可以用来安全地处理限制和监禁子进程,而不会让它们被僵尸化和转储到init. 但我对实现细节很模糊。我如何使用util-linux诸如mountand提供的工具nsenter来监视、监视和确保启动的所有进程都是另一个进程的直接命名空间后代?
我想运行一个没有任何互联网访问权限的程序,例如
unshare -n ping 127.0.0.1.
作为非特权用户,它返回Operation not permitted,作为特权用户,它返回所需的Network is unreachable。
有没有办法让它也适用于非特权用户?
在阅读了 Linux 命名空间之后,我的印象是,在许多其他功能中,它们是 chroot 的替代品。例如,在这篇文章中:
[名称空间] 的其他用途包括 [...] chroot() 式将进程隔离到单个目录层次结构的一部分。
但是,当我克隆 mount 命名空间时,例如使用以下命令,我仍然看到整个原始根树。
unshare --mount -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
我知道我现在能够在不与原始命名空间共享的新命名空间中执行额外的挂载,因此这提供了隔离,但它仍然是同一个根,例如/etc两个命名空间仍然相同。我还需要chroot更改根目录还是有其他选择?
我期待这个问题会提供答案,但答案chroot再次仅使用, 。
有一条现已删除的评论提到pivot_root。由于这实际上是 的一部分linux/fs/namespace.c,因此它实际上是名称空间实现的一部分。这表明仅使用unshare和更改根目录mount是不可能的,但命名空间提供了一个自己的——更聪明的—— chroot. chroot即使在阅读源代码之后(例如在安全性或更好的隔离的意义上),我仍然不明白这种方法的主要思想,这使得它与 根本不同。
这不是这个问题的重复。执行完答案中的所有命令后,我有单独的 /tmp/tmp.vyM9IwnKuY(或类似的),但根目录仍然相同!
我想知道 Linux 内核中的“命名空间支持”功能到底是什么意思。我正在使用内核 3.11.1(目前最新的稳定内核)。
如果我决定禁用它,我会注意到我的系统有任何变化吗?
如果有人决定使用命名空间,仅NAMESPACES=Y在内核中编译就足够了,还是他还需要用户空间工具?
我似乎可以使用几乎任何有效字符在 unix 中创建文件名。
touch \; &&
touch \\ &&
touch \" &&
touch $'\n' &&
touch $'\t' &&
touch $'\v' &&
touch $'\23' &&
touch $'\13' &&
echo "DONE!"
Run Code Online (Sandbox Code Playgroud)
我发现唯一不起作用的字符是/和NUL:
touch /
touch $'\0'
Run Code Online (Sandbox Code Playgroud)
文件名中是否还有其他无效或无法使用的字符?
namespace ×10
linux ×6
process ×3
lxc ×2
networking ×2
capabilities ×1
chroot ×1
filenames ×1
files ×1
filesystems ×1
linux-kernel ×1
mount ×1
privileges ×1