
¿Cómo le otorgo a un usuario específico el derecho a cambiar la propiedad de usuarios y grupos de archivos y directorios dentro de un directorio específico?
Hice una búsqueda en Google y vi que existe tal cosa comosetfacl
, que permite otorgar a los usuarios derechos específicos para cambiar permisos para archivos y directorios. Sin embargo, por lo que leí, este comando no permite otorgar permisos chown.
Entonces, digamos que un archivo tiene
user1 user1 theFile1
user1 user1 theDirectory1
Emitir el siguiente comando fallaría.
[user1@THEcomputer]$ chown user2 theFile
Tengo acceso root en la computadora. ¿Hay alguna manera de permitirle a un usuario emitir chown
comandos dentro de un directorio?
ACTUALIZACIÓN: Cómo agregar un usuario a un grupo.
Aquí está elartículoque solía agregar datamover
al hts
grupo.
[root@Venus ~]# usermod -a -G datamover hts
[root@Venus ~]# exit
logout
[hts@Venus Receive]$ groups
hts wireshark datamover
[hts@Venus Receive]$
ACTUALIZACIÓN (comentario de dirección de RuiFRibeiro):
Cambiar la propiedad del directorio al directorio no funciona, vea la captura de pantalla.
[datamover@Venus root]$ ls -la
total 311514624
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 .
drwxr-xr-x 4 root root 4096 Aug 20 16:52 ..
-rwxrwxrwx. 1 datamover datamover 674 Aug 31 16:47 create_files.zip
drwxrwxrwx 2 datamover datamover 4096 Oct 17 17:07 dudi
-rwxrwxrwx. 1 datamover datamover 318724299315 Oct 13 15:47 Jmr400.mov
-rwxrwxrwx. 1 datamover datamover 182693854 Aug 31 16:47 Jmr_Commercial_WithSubtitles.mov
-rwxrwxrwx. 1 datamover datamover 80607864 Aug 31 16:47 Jmr_DataMover_Final.mov
drwxrwxrwx. 2 datamover datamover 122880 Aug 23 11:54 ManyFiles
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 Receive
drwxrwxrwx 2 datamover datamover 4096 Oct 14 13:40 sarah
-rwxrwxrwx 1 datamover datamover 3184449 Oct 14 14:05 SourceGrid_4_40_bin.zip
[datamover@Venus root]$ cd ./Receive/
[datamover@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts hts 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[datamover@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of './Jmr_Commercial_WithSubtitles.mov': Operation not permitted
Aquí hay un intento como propietario del archivo:
[hts@Venus Receive]$ chown datamover:datamover Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of 'Jmr_Commercial_WithSubtitles.mov': Operation not permitted
Como puede ver, ninguna de las dos posibilidades funciona.
ACTUALIZAR (dirección de la respuesta del contramodo)
El propietario del archivo (y el root) pueden cambiar la propiedad del grupo. Sin embargo, esto está restringido a los grupos a los que pertenece el propietario.
Sí, primero hay que cerrar sesión. Aquí está el resultado de mi intento:
[hts@Venus ~]$ groups hts
hts : hts wireshark datamover
[hts@Venus ~]$ cd /mnt/DataMover/root/Receive/
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts hts 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown hts:datamover ./Jmr_Commercial_WithSubtitles.mov
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts datamover 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of ‘./Jmr_Commercial_WithSubtitles.mov’: Operation not permitted
[hts@Venus Receive]$
De hecho, agregar hts al grupo de datamover me permite cambiar la propiedad de la parte del grupo, por lo que ahora hay una respuesta parcial y una validación de la declaración.
Respuesta1
Sólo el root tiene permiso para cambiar la propiedad de los archivos. Las versiones razonablemente modernas de Linux brindan la CAP_CHOWN
capacidad; un usuario que tenga esta capacidad también puede cambiar la propiedad de archivos arbitrarios. CAP_CHOWN
es global, una vez otorgado, se aplica a cualquier archivo en un sistema de archivos local.
El propietario del archivo (y el root) pueden cambiar la propiedad del grupo. Sin embargo, esto está restringido a los grupos a los que pertenece el propietario. Entonces, si el usuario U pertenece a los grupos A, B y C pero no a D, entonces U puede cambiar el grupo de cualquier archivo que posea U a A, B o C, pero no a D. Si busca cambios arbitrarios, entonces CAP_CHOWN
es el camino a seguir.
PRECAUCIÓN CAP_CHOWN
tiene graves implicaciones de seguridad, un usuario con un shell que tenga capacidad CAP_CHOWN
podría obtener privilegios de root. (Por ejemplo, chown
libc para usted mismo, parchee sus caballos de Troya, chown
recupérelo y espere a que un proceso raíz lo recoja).
Dado que desea restringir la capacidad de cambiar la propiedad de ciertos directorios, ninguna de las herramientas disponibles le ayudará. En su lugar, puede escribir su propia variante chown
que se encargue de las restricciones previstas. Este programa debe tener capacidad CAP_CHOWN
, por ejemplo
setcap cap_chown+ep /usr/local/bin/my_chown
PRECAUCIÓN
Su programa probablemente imitará el genuino chown
, por ejemplomy_chown
user:group filename(s)
. Realice la validación de entrada con mucho cuidado. Verifique que cada archivo cumpla con las restricciones previstas; en particular, tenga cuidado con los enlaces blandos que señalan fuera de los límites.
Si desea restringir el acceso a su programa a ciertos usuarios, puede crear un grupo especial, establecer la propiedad del grupo my_chown
para este grupo, establecer permisos en 0750 y agregar todos los usuarios permitidos a este grupo. Alternativamente, puedes usarlo sudo
con reglas adecuadas (en este caso tampoco necesitas magia de capacidad). Si necesita aún más flexibilidad, entonces necesita codificar las reglas que tiene en mente my_chown
.
Respuesta2
Me encontré con el mismo problema y ya estoy usando ACL. Es posible que esto no se aplique a su situación, pero en mi caso, el usuario específico tiene acceso de escritura al árbol de directorios y todos los demás tienen acceso de lectura, por lo que mi táctica es escribir un pequeño programa setuid para verificar el acceso de escritura del usuario que llama y permitir cambiar el acceso de lectura a otros.
Una pregunta que discute esto está aquí:
¿Cómo lograr que los usuarios establezcan ACL en directorios que no les pertenecen?