无需编译即可禁用 Linux 中的命名空间

无需编译即可禁用 Linux 中的命名空间

有没有办法在 Linux 的启动时或运行时禁用所有命名空间类型?

答案1

对于每种类型的命名空间,每个用户(包括 root)的最大命名空间数量可以通过 sysctl 定义。
正如我的 linux 5.4 (*) 下所列:

Tux /proc/sys/user # sysctl -a | grep namespace
user.max_cgroup_namespaces = 31889
user.max_ipc_namespaces = 31889
user.max_mnt_namespaces = 31889
user.max_net_namespaces = 31889
user.max_pid_namespaces = 31889
user.max_user_namespaces = 31889
user.max_uts_namespaces = 31889

在运行时禁用用户 ID 命名空间就像运行一样简单:

sudo sysctl -w user.max_user_namespaces=0

启用在初始化时考虑此设置将取决于您的初始化系统。 (例如,编辑/etc/sysctl.conf并配置服务以在 openrc 上启动时启动)sysctl

对每个 sysctl 继续这样做实际上将禁用所有类型的名称空间。

但是,我强烈建议您不要继续(禁用所有这些),而无需完全了解正在运行的系统和应用程序,因为只有许多常见应用程序(甚至某些系统功能和服务)可能需要命名空间支持才能运行。
最起码要跑lsns -l当您的系统运行其典型工作负载时,以便列出有关所有当前可访问的命名空间的信息,目前在我的系统上:

acoswt@Tux ~ $ sudo lsns -l
        NS TYPE   NPROCS   PID USER   COMMAND
4026531835 cgroup    126     1 root   init [3]  
4026531836 pid       108     1 root   init [3]  
4026531837 user      108     1 root   init [3]  
4026531838 uts       126     1 root   init [3]  
4026531839 ipc       126     1 root   init [3]  
4026531840 mnt       125     1 root   init [3]  
4026531860 mnt         1    18 root   kdevtmpfs
4026531992 net       108     1 root   init [3]  
4026532251 pid         2  2061 acoswt /usr/lib64/chromium-browser/chrome --type=zygote…
4026532253 net        18  2061 acoswt /usr/lib64/chromium-browser/chrome --type=zygote…
4026532276 user       18  2061 acoswt /usr/lib64/chromium-browser/chrome --type=zygote…

前十行告诉我,禁用任何一种命名空间类型都是不明智的;-)


(*)当添加对更多命名空间类型的支持时,更高版本的 Linux 内核可能会显示更多可调整项。例如 最大时间命名空间自从 linux-5.6 开始支持时间命名空间

相关内容