Permisos

Operation not permitted

A diferencia de «Permission denied», este error aparece cuando los permisos del fichero son correctos e incluso cuando la orden se ejecuta como root. Hay otra capa por encima.

Es la distinción que ahorra más tiempo: «Permission denied» apunta a los permisos clásicos; «Operation not permitted» apunta a atributos extendidos, capacidades o un módulo de seguridad.

Qué comprobar, y en qué orden

En el orden en que lo miramos nosotros. No es un ranking de frecuencia: no publicamos estadísticas que no hemos medido.

  1. 1

    El fichero tiene el atributo inmutable. Ni root puede modificarlo sin quitarlo antes.

    Comprobar

    lsattr fichero

    Corregir

    sudo chattr -i fichero
  2. 2

    SELinux está bloqueando la operación aunque los permisos sean correctos.

    Comprobar

    sudo ausearch -m avc -ts recent 2>/dev/null | tail -10

    Corregir

    # Corregir la etiqueta, que es lo que corresponde:
    sudo restorecon -Rv /ruta
    # Poner SELinux en permisivo oculta el problema, no lo resuelve.
  3. 3

    AppArmor tiene un perfil que restringe ese proceso. Es lo habitual en Ubuntu.

    Comprobar

    sudo aa-status
    sudo dmesg -T | grep -i apparmor | tail -10

    Corregir

    # Ajustar el perfil del programa en /etc/apparmor.d/ y recargarlo:
    sudo apparmor_parser -r /etc/apparmor.d/el.perfil
  4. 4

    El proceso corre dentro de un contenedor sin la capacidad necesaria, o con NoNewPrivileges en su unidad de systemd.

    Comprobar

    grep Cap /proc/self/status
    systemctl show mi-servicio -p NoNewPrivileges -p CapabilityBoundingSet

    Corregir

    # Conceder solo la capacidad concreta que haga falta, nunca --privileged:
    #   AmbientCapabilities=CAP_NET_BIND_SERVICE

Los comandos de esta página se ejecutan en tu servidor y algunos modifican la configuración: léelos antes de pegarlos. Las rutas y los nombres de servicio varían entre distribuciones. Así se elabora este catálogo.