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,以獲得更好的支持和配置選項。