Profilanwendbarkeit: Stufe 1
Stellen Sie sicher, dass, wenn die Kubelet-Konfigurationsdatei existiert, sie im Besitz
von
root:root
ist.Der Kubelet liest verschiedene Parameter, einschließlich Sicherheitseinstellungen,
aus einer Konfigurationsdatei, die durch das Argument
--config
angegeben wird. Wenn diese Datei angegeben ist, sollten Sie die Dateiberechtigungen
einschränken, um die Integrität der Datei zu wahren. Die Datei sollte im Besitz von
root:root
sein.![]() |
HinweisDie standardmäßige Dateieigentümerschaft ist
root:root . |
Auswirkung
Übermäßig großzügiger Dateizugriff erhöht das Sicherheitsrisiko für die Plattform.
Prüfung
Google Cloud-Konsole verwenden
- Gehen Sie zu Kubernetes Engine.
- Klicken Sie auf den gewünschten Cluster, um die Detailseite zu öffnen, und klicken Sie dann auf den gewünschten Node-Pool, um die Detailseite des Node-Pools zu öffnen.
- Notieren Sie den Namen des gewünschten Knotens.
- Gehen Sie zu VM-Instanzen.
- Suchen Sie den gewünschten Knoten und klicken Sie auf SSH, um eine SSH-Verbindung zum Knoten herzustellen.
Verwendung der Befehlszeile
Methode 1: SSH zu den Worker-Knoten
- Um zu überprüfen, ob der Kubelet-Dienst läuft:
sudo systemctl status kubelet
- Die Ausgabe sollte
Active: active (running) since...
zurückgeben. Führen Sie den folgenden Befehl auf jedem Knoten aus, um die entsprechende Kubelet-Konfigurationsdatei zu finden:ps -ef | grep kubelet
- Die Ausgabe des obigen Befehls sollte etwas Ähnliches wie
--config/etc/kubernetes/kubelet/kubelet-config.yaml
zurückgeben, was den Speicherort der Kubelet-Konfigurationsdatei darstellt. - Führen Sie diesen Befehl aus:
stat -c %U:%G /etc/kubernetes/kubelet/kubelet-config.yaml
- Die Ausgabe des obigen Befehls gibt Ihnen die Besitzrechte der Kubelet-Konfigurationsdatei.
Überprüfen Sie, dass die Besitzrechte auf
root:root
gesetzt sind.
Methode 2: Erstellen und Ausführen eines privilegierten Pods
- Führen Sie ein Pod aus, das ausreichend privilegiert ist, um auf das Dateisystem des
Hosts zuzugreifen, indem Sie ein Pod bereitstellen, das das hostPath-Volume verwendet,
um das Dateisystem des Knotens in das Pod einzubinden. Hier ist ein Beispiel für eine
einfache Pod-Definition, die das Root-Verzeichnis des Hosts in /host innerhalb des
Pods einbindet:
apiVersion: v1 kind: Pod metadata: name: file-check spec: volumes: - name: host-root hostPath: path: / type: Directory containers: - name: nsenter image: busybox command: ["sleep", "3600"] volumeMounts: - name: host-root mountPath: /host securityContext: privileged: true
- Speichern Sie dies in einer Datei (z. B. file-check-pod.yaml) und erstellen Sie das
Pod:
kubectl apply -f file-check-pod.yaml
- Sobald das Pod läuft, können Sie sich in das Pod einloggen, um die Dateibesitzrechte
auf dem Knoten zu überprüfen:
kubectl exec -it file-check -- sh
- Jetzt befinden Sie sich in einer Shell innerhalb des Pods, aber Sie können über das
/host-Verzeichnis auf das Dateisystem des Knotens zugreifen und die Eigentümerschaft
der Datei überprüfen:
ls -l /etc/kubernetes/kubelet/kubelet-config.yaml
- Überprüfen Sie, ob der Besitz auf
root:root
festgelegt ist.
Wiederherstellung
Führen Sie den folgenden Befehl aus (verwenden Sie den im Audit-Schritt ermittelten
Dateispeicherort der Konfigurationsdatei):
chown root:root <kubelet_config_file>