Cómo otorgar derechos de usuario para cambiar la propiedad de archivos/directorios en un directorio

Cómo otorgar derechos de usuario para cambiar la propiedad de archivos/directorios en un directorio

¿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 chowncomandos dentro de un directorio?

ACTUALIZACIÓN: Cómo agregar un usuario a un grupo.

Aquí está elartículoque solía agregar datamoveral htsgrupo.

[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_CHOWNcapacidad; un usuario que tenga esta capacidad también puede cambiar la propiedad de archivos arbitrarios. CAP_CHOWNes 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_CHOWNes el camino a seguir.

PRECAUCIÓN CAP_CHOWNtiene graves implicaciones de seguridad, un usuario con un shell que tenga capacidad CAP_CHOWNpodría obtener privilegios de root. (Por ejemplo, chownlibc para usted mismo, parchee sus caballos de Troya, chownrecupé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 chownque 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_chownuser: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_chownpara este grupo, establecer permisos en 0750 y agregar todos los usuarios permitidos a este grupo. Alternativamente, puedes usarlo sudocon 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?

información relacionada