有没有办法在 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 开始支持时间命名空间