Skip to main content

Kubelet Configuration File Ownership Is Set To root:root

More Info:​

The kubelet configuration file should be owned by root:root to ensure that only the root user can read or modify it. Incorrect ownership could allow unauthorized users to tamper with kubelet configuration.

Risk Level​

Medium

Address​

Security

Compliance Standards​

  • CIS GKE

Triage and Remediation​

Remediation​

Manual Steps
  1. On every worker node, SSH in and check the current ownership of the kubelet config file:

    stat -c %U:%G /home/kubernetes/kubelet-config.yaml
  2. On every worker node, change the file ownership to root:root:

    sudo chown root:root /home/kubernetes/kubelet-config.yaml
  3. (Optional but recommended) Ensure root is the only user with write access:

    sudo chmod 644 /home/kubernetes/kubelet-config.yaml
  4. On every worker node, verify the ownership is now correct:

    stat -c %U:%G /home/kubernetes/kubelet-config.yaml

    Expected output:

    root:root
Using kubectl

kubectl cannot modify file ownership on nodes, so this finding cannot be fixed via the Kubernetes API. To remediate, you must change the ownership of /home/kubernetes/kubelet-config.yaml directly on every worker node’s host OS; see the Manual Steps section for the exact commands.

Automation
#!/usr/bin/env bash
#
# Fix CIS GKE 3.1.4: Ensure Kubelet Configuration File Ownership Is Set To root:root
#
# Run on: every worker node (as root)
# Safe to re-run: yes

set -euo pipefail

CONFIG_FILE="/etc/kubernetes/kubelet-config.yaml"
TARGET_OWNER="root"
TARGET_GROUP="root"

echo "==> CIS GKE 3.1.4 remediation on host: ${HOSTNAME}"

if [ ! -e "${CONFIG_FILE}" ]; then
echo "Config file not found at ${CONFIG_FILE}; nothing to change on this node."
exit 0
fi

echo "Current ownership:"
stat -c ' %n -> %U:%G' "${CONFIG_FILE}"

# Apply fix
echo "Setting ownership to ${TARGET_OWNER}:${TARGET_GROUP}..."
chown "${TARGET_OWNER}:${TARGET_GROUP}" "${CONFIG_FILE}"

# Verification (adapted from audit command)
echo "Verifying ownership..."
OWNERSHIP="$(stat -c %U:%G "${CONFIG_FILE}")"

if [ "${OWNERSHIP}" = "${TARGET_OWNER}:${TARGET_GROUP}" ]; then
echo "PASS: ${CONFIG_FILE} ownership is ${OWNERSHIP}"
exit 0
else
echo "FAIL: ${CONFIG_FILE} ownership is ${OWNERSHIP}, expected ${TARGET_OWNER}:${TARGET_GROUP}" >&2
exit 1
fi