Resumen actualizado
El directorio / var / www es propiedad de lo root:root
que significa que nadie puede usarlo y es completamente inútil. Como todos queremos un servidor web que realmente funcione (y nadie debería iniciar sesión como "root"), entonces debemos solucionarlo.
Solo dos entidades necesitan acceso.
PHP / Perl / Ruby / Python necesitan acceso a las carpetas y archivos, ya que crean muchos de ellos (es decir
/uploads/
). Estos lenguajes de secuencias de comandos deberían ejecutarse bajo nginx o apache (o incluso alguna otra cosa como FastCGI para PHP).Los desarrolladores
¿Cómo obtienen acceso? Sé que alguien, en algún lugar, ha hecho esto antes. Sin embargo, con tantos miles de millones de sitios web por ahí, pensaría que habría más información sobre este tema.
Sé que 777 es un permiso completo de lectura / escritura / ejecución para el propietario / grupo / otro. Por lo tanto, esto no parece ser necesario, ya que otorga a los usuarios aleatorios permisos completos.
En qué permisos se deben usar /var/www
para que:
- Control de fuente como git o svn
- Usuarios en un grupo como "sitios web" ( o incluso agregados a "www-data" )
- Servidores como apache o lighthttpd
- Y PHP / Perl / Ruby
¿Pueden todos 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 hay necesidad de ejecutar permisos en archivos en /var/www
...? Por lo tanto, parece que el permiso correcto sería el chmod -R 1660
que haría
- todos los archivos compartibles por estas cuatro entidades
- todos los archivos no son ejecutables por error
- bloquear a todos los demás del directorio por completo
- establecer el modo de permiso en "adhesivo" para todos los archivos futuros
¿Es esto correcto?
Actualización 1: Acabo de darme 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 del directorio.
Actualización 2: la estructura de carpetas de los /var/www
cambios drásticamente, ya que una de las cuatro entidades anteriores siempre agrega (y a veces elimina) carpetas y subcarpetas de 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 para archivos y directorios. Dado que ninguno de ellos debería necesitar permiso de ejecución (ver pregunta sobre ruby / php arriba) supongo que ese 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 (ver # 2) y todos los demás usuarios en El sistema solo tiene 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 ejecutan y cómo cambiarlos.
Actualización 5: (creo) finalmente encontré una manera de hacer que todo funcione (respuesta a continuación). Sin embargo, no sé si esta es la forma correcta y SEGURA de hacerlo. Por lo tanto, he comenzado una recompensa. La persona que tiene el mejor método para asegurar y administrar el directorio www gana.