SELinux(Security-Enhanced Linux)是一个由国家安全局(NSA)开发的 Linux 内核模块,它提供了强制访问控制(MAC)机制,用以增强系统的安全性。然而,Ubuntu 默认并不支持 SELinux。要在 Ubuntu 上使用 SELinux,用户需要手动安装和配置 SELinux 及其相关工具。
在 Kubernetes 中,SELinux 用于限制容器对系统资源的访问,通过为 Pod 或 Container 设置 securityContext.seLinuxOptions
字段来实现。SELinux 的安全上下文格式为 user:role:type:level
,在 Kubernetes 中对应 Pod 或 Container 的 securityContext.seLinuxOptions
字段。
在 Ubuntu 上安装和配置 SELinux 的步骤如下:
sudo apt update
sudo apt install selinux-basics selinux-policy-default auditd
sudo selinux-activate
SELinux 有三种运行模式:enforcing(强制模式)、permissive(宽容模式)和 disabled(禁用模式)。默认情况下,SELinux 在 Ubuntu 上以宽容模式运行。
你可以使用以下命令查看当前的 SELinux 模式:
sestatus
如果你想将 SELinux 切换到强制模式,可以使用以下命令:
sudo setenforce 1
要永久更改 SELinux 模式,可以编辑 /etc/selinux/config
文件:
sudo nano /etc/selinux/config
将 SELINUX=enforcing
添加到文件中,然后保存并退出。
SELinux 策略定义了系统如何处理不同的安全上下文。你可以使用默认的策略,也可以根据需要自定义策略。
查看当前策略:
sudo cat /etc/selinux/config
自定义策略:
如果你需要自定义策略,可以使用 audit2allow
工具来生成自定义策略模块。
首先,启用 SELinux 审计日志:
sudo setsebool -P httpd_can_network_connect_db 1
sudo setsebool -P ssh_sysadm_login 1
然后,查看 SELinux 审计日志:
sudo ausearch -m avc -ts recent
使用 audit2allow
生成自定义策略模块:
sudo ausearch -m avc -ts recent | audit2allow -M mypol
加载生成的自定义策略模块:
sudo semodule -i mypol.pp
在安装 Kubernetes 之前,通常建议禁用 SELinux,因为默认情况下,SELinux 会阻止 Kubernetes 的一些操作,如 kubelet
对容器文件的访问等。如果启用了 SELinux,需要针对 Kubernetes 进行特定的 SELinux 配置,以确保 Kubernetes 正常工作。例如,可以通过修改 /etc/selinux/config
文件将 SELinux 设置为 permissive 模式:
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
请注意,通过运行命令 setenforce 0
和 sed ...
将 SELinux 设置为 permissive 模式相当于将其禁用。这是允许容器访问主机文件系统所必需的,例如,某些容器网络插件需要这一能力。
如果你需要更高级的安全特性,可以考虑在支持 SELinux 的发行版(如 CentOS 或 RHEL)上部署 Kubernetes,以获得更好的支持和配置选项。