¿Cómo configurar los permisos de Linux para la carpeta WWW?

Pregunta:

Resumen actualizado

El directorio / var / www es propiedad de root:root que significa que nadie puede usarlo y es completamente inútil. Dado que todos queremos un servidor web que realmente funcione (y nadie debería iniciar sesión como "root"), entonces tenemos que arreglar esto.

Solo dos entidades necesitan acceso.

  1. PHP / Perl / Ruby / Python necesitan acceso a las carpetas y archivos, ya que crean muchos de ellos (es decir, /uploads/ ). Estos lenguajes de scripting deberían ejecutarse bajo nginx o apache (o incluso alguna otra cosa como FastCGI para PHP).

  2. Los desarrolladores

¿Cómo acceden? Sé que alguien, en algún lugar, ha hecho esto antes. Sin embargo, con muchos miles de millones de sitios web, pensaría que habría más información sobre este tema.


Sé que 777 tiene permiso completo de lectura / escritura / ejecución para propietario / grupo / otro. Por lo tanto, esto no parece ser necesaria correcta, ya que ofrece a los usuarios permisos completos al azar.

Qué permisos se deben usar en /var/www para que:

  1. Control de fuente como git o svn
  2. Usuarios de un grupo como "sitios web" ( o incluso agregados a "www-data" )
  3. Servidores como apache o lighthttpd
  4. Y PHP / Perl / Ruby

¿Todos pueden leer, crear y ejecutar archivos (y directorios) allí?

Si estoy en lo cierto, los scripts de Ruby y PHP no se "ejecutan" directamente, sino que se pasan a un intérprete. Entonces, ¿no es necesario el permiso de ejecución en archivos en /var/www …? Por lo tanto, parece que el permiso correcto sería chmod -R 1660 que haría

  1. todos los archivos que pueden compartir estas cuatro entidades
  2. todos los archivos no ejecutables por error
  3. bloquear a todos los demás del directorio por completo
  4. establezca el modo de permiso en "fijo" para todos los archivos futuros

¿Es esto correcto?

Actualización 1: Me acabo de dar cuenta de que los archivos y directorios pueden necesitar diferentes permisos; estaba hablando de los archivos anteriores, así que no estoy seguro de cuáles deberían ser los permisos de directorio.

Actualización 2: la estructura de carpetas de /var/www cambia drásticamente ya que una de las cuatro entidades anteriores siempre agrega (y a veces elimina) carpetas y subcarpetas con muchos niveles de profundidad. También crean y eliminan archivos a los que las otras 3 entidades pueden necesitar acceso de lectura / escritura. Por lo tanto, los permisos deben hacer las cuatro cosas anteriores tanto para archivos como para directorios. Dado que ninguno de ellos debería necesitar permiso de ejecución (consulte la pregunta sobre ruby ​​/ php más arriba), supongo que rw-rw-r-- permiso sería todo lo que se necesita y completamente seguro, ya que estas cuatro entidades son administradas por personal de confianza (consulte # 2) y todos los demás usuarios del sistema solo tienen acceso de lectura.

Actualización 3: esto es para máquinas de desarrollo personal y servidores de empresas privadas. No hay "clientes web" aleatorios como un host compartido.

Actualización 4: este artículo de Slicehost parece ser el mejor para explicar lo que se necesita para configurar los permisos para su carpeta www. Sin embargo, no estoy seguro de qué usuario o grupo apache / nginx con PHP O svn / git se ejecuta y cómo cambiarlos.

Actualización 5: Finalmente (creo) encontré una manera de hacer que todo esto funcione (respuesta a continuación). Sin embargo, no sé si esta es la forma correcta y SEGURA de hacer esto. Por lo tanto, he comenzado una recompensa. Gana la persona que tiene el mejor método para proteger y administrar el directorio www.

Respuesta:

Después de más investigación, parece que otra (posiblemente una mejor manera) de responder esto sería configurar la carpeta www de esta manera.

  1. sudo usermod -a -G developer user1 (agregar cada usuario al grupo de desarrolladores)
  2. sudo chgrp -R developer /var/www/site.com/ para que los desarrolladores puedan trabajar allí
  3. sudo chmod -R 2774 /var/www/site.com/ para que solo los desarrolladores puedan crear / editar archivos (otros / el mundo pueden leer)
  4. sudo chgrp -R www-data /var/www/site.com/uploads para que www-data (apache / nginx) pueda crear cargas.

Dado que git ejecuta como cualquier usuario que lo llame, siempre que el usuario esté en el grupo "desarrollador", debería poder crear carpetas, editar archivos PHP y administrar el repositorio de git.

Nota: En el paso (3): '2' en 2774 significa 'establecer ID de grupo' para el directorio. Esto hace que los nuevos archivos y subdirectorios creados dentro de él hereden el ID de grupo del directorio principal (en lugar del grupo principal del usuario). Referencia: http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım