2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

¿Cómo establecer los permisos de los archivos para que los nuevos archivos hereden los mismos permisos?

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

Quiero mantener los permisos de usuario y grupo recursivamente para todas las nuevas carpetas y archivos colocados en el directorio padre. Sé que esto implica la configuración de un bit pegajoso, pero 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

Después, quiero que los permisos 660 se establezcan recursivamente a cualquier carpeta y archivo colocado en /path/to/parent.

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

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

  1. Los directorios colocados en /path/to/parent son eXecutables por usuarios con permisos
  2. Los archivos son legibles/escribibles por el usuario yo mismo y los miembros de algún grupo
  3. Los archivos y carpetas en /path/to/parent NO son legibles por el mundo

Estoy corriendo en Ubuntu 10.0.4 LTS.

¿Puede alguien ayudar, por favor?

Respuestas (3)

64
64
64
2011-03-30 10:28:30 +0000

Los bits de permiso que se buscan son 0770 y 0660.

  • rw- permisos → 110 binario → 6 octal

El grupo de propiedad puede ser heredado por los nuevos archivos y carpetas creados en su carpeta /ruta/para/parente estableciendo el bit setgid usando chmod g+s así:

chmod g+s /path/to/parent

Ahora, todos los nuevos archivos y carpetas creados bajo /ruta/para/parente tendrán el mismo grupo asignado que está establecido en /ruta/para/parente.

  • *

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

Sin embargo, puede utilizar ACLs POSIX para conseguirlo. Establecer la ACL por defecto en un directorio:

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

Esto aplicará setfacl al directorio /path/to/parent, -mmodificando las -default ACLs - las que se aplicarán a los elementos recién creados. (Las mayúsculas X significan que sólo los directorios recibirán el bit +x.)

(Si es necesario, puede añadir un u:someuser:rwX o g:someuser:rwX - preferiblemente un grupo - a las ACLs.)

  • *

Nota: En sistemas antiguos que usan ext3/ext4, solía ser necesario montar el sistema de ficheros con la opción acl, de lo contrario ignoraría todas las ACLs y no permitiría establecer otras nuevas.

mount -o remount,acl /

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

10
10
10
2011-03-30 12:09:01 +0000

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

Yo sugeriría dejar el directorio propiedad del usuario/grupo apache. Esto probablemente será apache o httpd dependiendo de su distribución.

por ejemplo,

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

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

Yo no haría chmod -R todo el directorio porque no quieres que se ejecuten scripts html o jpg’s u otras cosas al azar. Usted debe cambiar los permisos como sea necesario. (aunque restablecerlo a 660 puede no ser la peor de las ideas).

Algo que puede probar es:

chmod o+w file

La ‘o’ significa ‘otros’ y la ‘w’ significa ‘escritura’. También puedes tener ‘u’ para ‘usuario’ y ‘g’ para ‘grupo’, así como ‘r’ y ‘x’, que espero que se expliquen por sí mismos. Puedes eliminar los permisos utilizando “-” en lugar de “+”.

2
2
2
2011-03-30 14:22:39 +0000

Creo que estás complicando demasiado la cuestión. Si el directorio de nivel superior no es accesible a otros, entonces otros no podrán crear archivos dentro del árbol. El acceso de escritura en grupo no es necesario si sólo apache está haciendo la escritura.

Estos pasos deberían hacer lo que usted quiere (reemplace el directorio en los comandos con el directorio que quiere usar):

  • añada umask 027 al script por defecto de apache /etc/default/apache. Esto evitará que otros accedan a cualquier archivo o directorio que apache cree.
  • ejecute chown www-data:www-data directory en el directorio en el que quiere que apache pueda escribir.
  • ejecuta chmod 750 directory en el directorio en el que quieres que apache pueda escribir.

Permitir que apache escriba en un directorio abre la posibilidad de inyectar todo tipo de malware en el contenido que está sirviendo. Supervise el contenido de este árbol de directorios adecuadamente.