Estudio de CKAD – Día 11

Esta pregunta requiere algo de contexto, pero vamos alla.


Actividad 10: Update pod app-sec-ubu to run as Root user and with the SYS_TIME capability: Image Name: Ubuntu, SecurityContext: Capability SYS_TIME


Necesito crear un pod de ubuntu, eso esta super facil. Y luego necesito crear / asignar el security context, y los permisos de root.

kubectl run pod app-sec-ubu –image=ubuntu

¿Que es un capability en linux? Pues son acciones de sistema / kernel. Se habilita o deshabilitan. https://man7.org/linux/man-pages/man7/capabilities.7.html

¿Que es un security Context?

Un security context, es como los pods o sus contenedores, ejecutan los procesos. Puede definir acceso a archivos, usuarios de ejecucion, capacidades de linux entre otras. Mucho mas detalle aca https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

¿Como lo creo?

El tipo de objeto es https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podsecuritycontext-v1-core

Pero eso no interesa mucho, se define como una propiedad del pod. En sus spec:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: app-sec-ubu5
  name: app-sec-ubu5
spec:
  containers:
  - command:
    - sleep
    - infinity
    image: ubuntu
    imagePullPolicy: Always
    name: app-sec-ubu5
    resources: {}
    securityContext:
      runAsUser: 1000 # Debe ser 0 para admin
      capabilities:
        add: ['SYS_TIME']
   

runAsUser: 0 genera el context con permisos de root que es la actividad pero hay otras opciones.

SYS_TIME deberia ser la capacidad de linux deseada.

Solo falta ¿como validar esto?

Pues bien deberia ser entrando al contenedor:

kubectl exec -it app-sec-ubu — bash

Esto permite ejecutar de forma interactiva, bash.

Para validar en el contenedor, el permiso puedo ejuegar

date -s “1990-01-01 12:00:00”

Este es un escenario donde falla

Este es un escenario donde funciona el securitycontext

Y este es un escenario donde el usuario se define como 1000

Conclusiones

  • Algunas imagenes dependes del command, es importante enviarle -comand — acciones
  • Los privilegios / capacidades son de linux, en casos como el examen primero se debe evaluar el pod, para luego editar su definiciono.
  • Siempre es bueno hacer un backup de la definicion actual para poderlo revisar.
  • El user 0 es root, no todas las imagenes lo traen por defecto, pero esta de ubuntu si.
  • Hay muchos capabilities el de Sys_date solo es facil de demostrar.
  • Recuerda que si escribes mal la imagen siempre puedes hacer kuebctl describe pods, y kubectl get pods –watch