¿Cómo establecer permisos de archivo para que los archivos nuevos hereden los mismos permisos? [duplicar]

35

Esta pregunta ya tiene una respuesta aquí:

Tengo una carpeta en la que las nuevas subcarpetas y archivos se crearán automáticamente, mediante un script.

Quiero mantener los permisos de usuario y grupo de forma recursiva para todas las carpetas y archivos nuevos colocados en el directorio principal. Sé que esto implica establecer un bit fijo, pero parece que no puedo encontrar un comando que muestre exactamente lo que necesito.

Esto es lo que he hecho hasta ahora:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

A partir de entonces, quiero que los permisos 660 se establezcan de forma recursiva en cualquier carpeta y archivo colocado /path/to/parent.

Sin embargo, todo lo que he intentado hasta ahora ha fallado. ¿Puede alguien ayudar, por favor?

En realidad, la bandera octal 660 probablemente ni siquiera es correcta. Los permisos que quiero son:

  1. Los directorios colocados debajo /path/to/parentson ejecutables por usuarios con permisos
  2. los archivos son leídos / grabables por el usuario y los miembros de algún grupo
  3. Los archivos y las carpetas /path/to/parentNO son legibles en todo el mundo

Estoy corriendo en Ubuntu 10.0.4 LTS.

¿Puede alguien ayudar, por favor?

oompahloompah
fuente

Respuestas:

10

Grawity da una excelente respuesta, pero sospecho que la pregunta editada puede haber cambiado las cosas ligeramente.

Sugeriría dejar el directorio propiedad del usuario / grupo apache. Probablemente sea apache o httpd dependiendo de su distribución.

p.ej

chown -R apache:apache /path/to/parent

Luego puede hacer algo como https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian o incluso agregarse al grupo apache para asegurarse de que tener acceso grupal al directorio. (Algo así como usermod -aG apache username)

No quisiera chmod -Rtodo el directorio porque no quieres scripts html o jpg's u otras cosas al azar ejecutables. Debe cambiar los permisos según sea necesario. (aunque restablecerlo a 660 puede no ser la peor de las ideas).

Algo que te gustaría probar es:

chmod o+w file

La 'o' significa 'otro' y 'w' significa 'escribir'. También puede tener 'u' para 'usuario' y 'g' para 'grupo', así como 'r' y 'x', que con suerte se explican por sí mismas. Puede eliminar permisos usando '-' en lugar de '+'.

Caro
fuente
La solución más simple, creo, es agregarme al grupo de usuarios de apache. Gracias por sugerir eso. ¡No sé por qué no pensé en eso yo mismo!
oompahloompah
1
¿Es o+wuna buena opción aquí? ¿No deberían limitarse los cambios a uy g? De lo contrario, ¿qué sentido tiene tratar de mantener la seguridad en el directorio y los subdirectorios?
jww
61

Los bits de permiso que está buscando son 0770 y 0660.

  • rw-permisos → 110binario → 6octal

La propiedad del grupo puede ser heredada por los nuevos archivos y carpetas creados en su carpeta / ruta / a / parent configurando el bit setgid de chmod g+sesta manera:

chmod g+s /path/to/parent

Ahora, todos los archivos y carpetas nuevos creados en / path / to / parent tendrán asignado el mismo grupo que el establecido en / path / to / parent.


Los permisos de archivo POSIX no se heredan; son dados por el proceso de creación y combinados con su valor actual de umask.

Sin embargo, puede usar las ACL POSIX para lograr esto. Establezca la ACL predeterminada en un directorio:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Esto se aplicará setfaclal directorio / ruta / a / padre, -modificando las ACL -dpredeterminadas , aquellas que se aplicarán a los elementos recién creados. (Mayúsculas Xsignifica que solo los directorios recibirán el +xbit).

(Si es necesario, puede agregar un u:someuser:rwXo g:someuser:rwX, preferiblemente un grupo, a las ACL).


Nota: En los sistemas más antiguos que usan ext3 / ext4, solía necesitar montar el sistema de archivos con la aclopción; de lo contrario, ignoraría todas las ACL y no permitiría configurar las nuevas.

mount -o remount,acl /

Para configurar esto permanentemente, use tune2fs -o acl <device>o edite /etc/fstab.

Gravedad
fuente
55
Gracias por tomarte el tiempo de responder. Desafortunadamente, soy bastante nuevo en todo esto, y lo que escribiste es indistinguible del griego para mí (¡lo siento para cualquier griego que hable antes!). No entendí la mayor parte de lo que escribiste. Tengo un proceso web y quiero darle a Apache la capacidad de crear carpetas y archivos en una carpeta principal donde solo Apache (el propietario) y yo (el grupo) tenemos la capacidad de generar archivos y convertirlos en directorios. Todos los demás están prohibidos. eso es todo lo que intento hacer. Apache necesita poder crear subcarpetas y almacenar archivos en ellas.
oompahloompah
Esto no funciona con unzip?
datasn.io
2

Creo que has terminado de complicar el problema. Si el directorio de nivel superior no es accesible para otros, entonces otros no podrán crear archivos dentro del árbol. No se requiere acceso de escritura grupal si solo Apache está escribiendo.

Estos pasos deben hacer lo que desee (reemplace el directorio en los comandos con el directorio que desea usar):

  • agregar umask 027al script predeterminado de apache /etc/default/apache. Esto evitará que otros accedan a cualquier archivo o directorio que apache cree.
  • ejecutar chown www-data:www-data directoryen el directorio que desea que apache pueda escribir.
  • ejecutar chmod 750 directoryen el directorio que desea que apache pueda escribir.

Permitir que Apache escriba en un directorio abre la capacidad de inyectar todo tipo de malware en el contenido que está sirviendo. Monitoree el contenido de este árbol de directorios adecuadamente.

BillThor
fuente