Solo el propietario del archivo, o el usuario root, puede cambiar los permisos de un archivo. Los permisos actuales en el archivo o en su directorio padre son irrelevantes¹. Esto se especifica en POSIX :
La aplicación se asegurará de que la identificación de usuario efectiva del proceso coincida con el propietario del archivo o que el proceso tenga los privilegios adecuados para hacerlo.
En la mayoría de los dispositivos, "privilegios apropiados" significa ejecutarse como root. Si no se cumplen estas condiciones, chmod
generalmente falla EPERM
, aunque se permiten otros comportamientos, como abortar el programa debido a una violación de seguridad.
Además, algunas variantes de Unix tienen formas específicas de sistema de autorizar o prohibir chmod
. Por ejemplo, Linux tiene una capacidad ( CAP_FOWNER
) que permite que los procesos cambien los permisos de un archivo y otros metadatos, independientemente de su propietario.
Hay otras razones por las que chmod
puede fallar aunque el archivo exista, sea accesible y tenga el propietario apropiado. Los más comunes incluyen un sistema de archivos de solo lectura o un sistema de archivos que no admite permisos como FAT. Las menos comunes incluyen restricciones específicas del sistema, como el atributo inmutable en el sistema de archivos ext2 de Linux y sucesores.
Cept Excepto en la medida en que el proceso en ejecución chmod
debe poder acceder al archivo, por lo que debe tener permiso de ejecución en el directorio que contiene el archivo y cualquier otro directorio que atraviese para hacerlo.