Creo (no estoy seguro) que el propietario de un archivo/directorio y el usuario root son los únicos usuarios que pueden cambiar los permisos de un archivo/directorio. ¿Estoy en lo cierto o hay otros usuarios a los que también se les permite cambiar los permisos?
Respuesta1
Sólo el propietario y root
(superusuario) pueden cambiar el permiso de un archivo o directorio. Esto significa que el propietario y el superusuario pueden configurar los permisos de lectura ( r
), escritura ( w
) y ejecución ( x
). Pero cambiar la propiedad del usuario de archivos y directorios con el comando chown
solo está permitido root
. chgrp
Se permite cambiar la propiedad del grupo con root
el propietario del archivo, si el usuario es miembro del nuevo grupo.
Respuesta2
Para el funcionamiento normal, sólo el root y el propietario pueden hacerlo chmod
. Además, root puede chown
y chgrp
, además, el propietario puede hacerlo chgrp
siempre que sea miembro del grupo objetivo.
Sin embargo, por motivos de seguridad, existe otro caso: cualquier usuario con permiso de escritura en el directorio que contiene el archivo puede reemplazar el archivo con una copia y así convertirse en propietario, obteniendo la capacidad de modificar los permisos y el contenido.
Al igual que:
14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile
drwxr-xr-x 3 me staff 102 Apr 11 14:14 .
-rw-r--r-- 1 root staff 4 Apr 11 14:14 yourfile
Creamos un directorio y escribimos un archivo como raíz. Dado que root es propietario del archivo, no podemos escribir en él ni podemos hacer chmod:
14:15 mybox:mydir echo bar > yourfile
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted
Sin embargo, tenemos permiso de escritura en el directorio, por lo que podemos reemplazar el archivo para obtener la propiedad:
14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile
drwxr-xr-x 4 me staff 136 Apr 11 14:15 .
-rw-r--r-- 1 me staff 4 Apr 11 14:15 yourfile
Y ahora que somos los propietarios, por supuesto podemos hacer lo que queramos con ese archivo:
14:15 mybox:mydir echo bar > yourfile
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar
De manera similar, cualquier usuario con permiso de escritura paracualquierEl directorio en la ruta completa que conduce al archivo puede reemplazar la estructura del directorio a partir de ese momento, obteniendo así la propiedad del archivo con el nombre dado. Por supuesto, la propiedad o los permisos del archivo original real (que cambiamos de nombre a "yourfile2") no cambian.
14:17 mybox:mydir ls -l yourfile2
-rw-r--r-- 1 root staff 4 Apr 11 14:14 yourfile2
Respuesta3
El chmod
comando invoca de manera bastante directa la llamada al sistema del mismo nombre; la página de manual para la chmod(2)
llamada al sistema (en Linux 4.10) dice:
El UID efectivo del proceso que llama debe coincidir con el propietario del archivo, o el proceso debe tener privilegios (Linux: debe tener la
CAP_FOWNER
capacidad).Si el proceso que llama no tiene privilegios (Linux: no tiene la
CAP_FSETID
capacidad) y el grupo del archivo no coincide con el ID de grupo efectivo del proceso o uno de sus ID de grupo suplementarios, elS_ISGID
bit se desactivará, pero esto no provocará que se devuelva un error.
Entonces sí, un proceso que se ejecuta como root puede cambiar los permisos de cualquier archivo si no ha perdido la CAP_FOWNER
capacidad.
También es de interés chown
; la página de manual chown(2)
dice:
Sólo un proceso privilegiado (Linux: uno con la
CAP_CHOWN
capacidad) puede cambiar el propietario de un archivo. El propietario de un archivo puede cambiar el grupo del archivo a cualquier grupo del que sea miembro. Un proceso privilegiado (Linux: conCAP_CHOWN
) puede cambiar el grupo arbitrariamente.