Otorgue permisos de escritura a múltiples usuarios en una carpeta en Ubuntu

80

Hay una carpeta que pertenece al usuario tomcat6:

drwxr-xr-x 2 tomcat6 tomcat6 69632 2011-05-06 03:43 document

Quiero permitir a otro usuario (ruser) permisos de escritura en la carpeta de documentos. Los dos usuarios (tomcat6 y ruser) no pertenecen al mismo grupo. He intentado usar setfacl:

sudo setfacl -m  u:ruser:rwx document

Pero esto me da un setfacl: document: Operation not supportederror. Amablemente ayúdame.

TheVillageIdiot
fuente

Respuestas:

144

Hay dos formas de hacer esto: establecer el directorio en "mundo" de escritura o crear un nuevo grupo para los dos usuarios y hacer que el directorio se pueda escribir en ese grupo.

Obviamente, hacer que el mundo se pueda escribir es algo malo, por lo que es preferible la segunda opción.

Los usuarios en Linux pueden pertenecer a más de un grupo. En este caso, desea crear un nuevo grupo, llamémoslo tomandruser:

sudo groupadd tomandruser

Ahora que el grupo existe, agréguele los dos usuarios:

sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser

Ahora todo lo que queda es establecer los permisos en el directorio:

sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory

Ahora solo los miembros del grupo tomandruser pueden leer, escribir o ejecutar cualquier cosa dentro del directorio. Tenga en cuenta el argumento -R para los comandos chmod y chgrp: esto les dice que se repitan en cada subdirectorio del directorio de destino y modifiquen cada archivo y directorio que encuentren.

También es posible que desee cambiar 770 a algo así como 774si desea que otros puedan leer los archivos, 775si desea que otros lean y ejecuten los archivos, etc. Los cambios de asignación de grupo no tendrán efecto hasta que los usuarios cierren sesión y regresen en.

Si también desea (probablemente lo haga) que los nuevos archivos creados dentro del directorio por uno de los usuarios puedan ser automáticamente escritos por otros en el grupo, consulte aquí .

Andrew Lambert
fuente
2
Probablemente también desee establecer la marca set-group-ID para los directorios, para crear nuevos archivos y subdirectorios que pertenezcan automáticamente al grupo correcto:sudo find /path/to/the/directory -type d -exec chmod 2770 '{}' \;
Marcello Nuccio
8
Evitaría usar chmod 770, 775 o lo que sea. Eso interfiere con los permisos de todos los archivos. En su lugar, use algo como chmod -R g+wagregar permisos de escritura sin arruinar todo lo demás.
Christian Varga
2
Si un usuario crea un nuevo archivo allí (por ejemplo, mysql by SELECT INTO OUTFILE), establece permisos para su grupo primario ( mysqlen este caso), y de todos modos el usuario no puede acceder al archivo. ¿Cómo solucionar esto?
Olexa
2
¿Qué sucede si desea otorgar a los usuarios acceso de escritura a una carpeta sin cambiar la propiedad de la carpeta, por ejemplo, no desea meterse con los permisos de apache en una carpeta public_html?
codecowboy
2
Nota: "Los cambios de asignación de grupo no tendrán efecto hasta que los usuarios cierren sesión y vuelvan a iniciarla". Me lo he perdido :)
Vladimir Vukanac
3

La secuencia de comandos de ejemplo muestra un ejemplo para dar w (write)/ r (read) / x (execute)permiso a la ruta de carpeta dada /path/to/the/directorypara USER1y USER2. Si desea dar solo acceso de escritura, reemplácelo rwxcon w.


#!/bin/bash

# Block others and people in the same group to do read/write/execute on give folder:    
sudo chmod 700 /path/to/the/directory 

#Give read/write/execute access to USER1 on give folder:
sudo setfacl -R -m user:USER1:rwx  /path/to/the/directory 

#Give read/write/execute access to USER2 on give folder:
sudo setfacl -R -m user:USER2:rwx  /path/to/the/directory 
alper
fuente