¿Bajo qué circunstancias chmod
fallarán?
Miré la página de manual pero solo especifica el uso y no entra en detalles sobre en qué circunstancias no funcionará.
Supongo chmod
que funcionará si:
- eres root
- usted posee el archivo de destino (y está configurando un bit de modo mundano, es decir, no un bit fijo, otros)
¿Pueden los usuarios usar chmod
para cambiar los permisos en un archivo para el que tienen acceso grupal? ¿Está relacionado con el acceso de lectura / escritura?
Respuestas:
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 :
En la mayoría de los dispositivos, "privilegios apropiados" significa ejecutarse como root. Si no se cumplen estas condiciones,
chmod
generalmente fallaEPERM
, 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.fuente
Los detalles que desea están en la página del manual para la llamada al sistema chmod (). En lugar de
man chmod
usarman 2 chmod
.man chattr
yman 2 setxattr
te interesará también; Los atributos de archivo que chattr / setxattr () aumentan el comportamiento de los permisos tradicionales de Unix establecidos por chmod.fuente
De acuerdo con el estándar UNIX, "El ID de usuario efectivo del proceso debe coincidir con el propietario del archivo o el proceso debe tener los privilegios adecuados para hacerlo".
Un poco sobre los privilegios apropiados necesita alguna explicación. En los sistemas tradicionales, chmod está permitido en todos los archivos cuando el UID efectivo (en Linux, el UID del sistema de archivos, pero ver más abajo) del proceso es 0 [es decir, root].
Linux tiene un sistema llamado capacidades , y el
CAP_FOWNER
bit controla la capacidad de usarchmod
en todos los archivos. De manera predeterminada, todas las capacidades se otorgan cuando unaexecve()
llamada crea un proceso raíz (ya sea ejecutando un binario setuid o cuando el UID real es 0) o cuando el UID efectivo se establece en 0 (y se elimina cuando se establece en un valor distinto de cero) , y un conjunto de capacidades que se incluyenCAP_FOWNER
cuando el UID del sistema de archivos se establece en 0 (y se desactiva cuando se establece en un valor distinto de cero). Lea la página de manual para más detalles.Usted mencionó el bit fijo, pero omitió el hecho de que los usuarios tampoco pueden establecer el bit setgid en un archivo cuando no están en el grupo asignado al archivo. El bit setuid o setgid también puede ignorarse en circunstancias adicionales definidas por la implementación.
fuente
¿Por qué no lo intentas y ves?
fuente
chmod
y luego verificar los permisos. Si te sientes paranoico, hazlofsync
antes de comprobarlo.