Profile applicability: Level 1
Ensure that if the kubelet configuration file exists, it is owned by
root:root
.The kubelet reads various parameters, including security settings, from a config file
specified by the
--config
argument. If this file is specified you should restrict its file permissions to maintain
the integrity of the file. The file should be owned by root:root
.![]() |
NoteThe default file ownership is
root:root . |
Impact
Overly permissive file access increases the security risk to the platform.
Audit
Using Google Cloud Console
- Go to Kubernetes Engine.
- Click on the desired cluster to open the Details page, then click on the desired Node pool to open the Node pool Details page.
- Note the name of the desired node.
- Go to VM Instances.
- Find the desired node and click on SSH to open an SSH connection to the node.
Using Command Line
Method 1: SSH to the worker nodes
- To check to see if the Kubelet Service is running:
sudo systemctl status kubelet
- The output should return
Active: active (running) since...
. Run the following command on each node to find the appropriate Kubelet config file:ps -ef | grep kubelet
- The output of the above command should return something similar to
--config/etc/kubernetes/kubelet/kubelet-config.yaml
, which is the location of the Kubelet config file. - Run this command :
stat -c %U:%G /etc/kubernetes/kubelet/kubelet-config.yaml
- The output of the above command gives you the Kubelet config file's ownership. Verify
that the ownership is set to
root:root
.
Method 2: Create and Run a Privileged Pod
- Run a pod that is privileged enough to access the host's file system by deploying
a pod that uses the hostPath volume to mount the node's file system into the pod.
Here's an example of a simple pod definition that mounts the root of the host to /host
within the pod:
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
- Save this to a file (e.g., file-check-pod.yaml) and create the pod:
kubectl apply -f file-check-pod.yaml
- Once the pod is running, you can exec into it to check file ownership on the node:
kubectl exec -it file-check -- sh
- Now you are in a shell inside the pod, but you can access the node's file system through
the /host directory and check the ownership of the file:
ls -l /etc/kubernetes/kubelet/kubelet-config.yaml
- Verify that the ownership is set to
root:root
.
Remediation
Run the below command (using the config file location identified in the Audit step):
chown root:root <kubelet_config_file>