72 votos

Cómo el programa de instalación de linux permisos para la carpeta WWW?

Resumen Actualizado

El directorio /var/www que es de titularidad de root:root lo que significa que no se puede usar y es completamente inútil. Ya que todos queremos un servidor web que realmente funciona (y nadie debe iniciar sesión como "root"), entonces tenemos que arreglar esto.

Sólo dos entidades tienen acceso.

  1. PHP/Perl/Ruby/Python todos necesitan tener acceso a las carpetas y archivos, ya que crean muchos de ellos (por ejemplo /uploads/). Estos lenguajes de secuencias de comandos debe ejecutarse con nginx o apache (o incluso alguna que otra cosa como FastCGI para PHP).

  2. Los desarrolladores

¿Cómo acceder? Sé que alguien, en algún lugar se ha hecho esto antes. Con sin embargo-muchos miles de millones de sitios web por ahí que se podría pensar que habría más información sobre este tema.


Sé que 777 completo de lectura/escritura/permiso de ejecución para el propietario/grupo/otros. Así que esto no parece ser necesario correcta, ya que le da al azar a los usuarios todos los permisos.

Qué permisos se necesitan para ser utilizado en /var/www por lo que:

  1. Control de código fuente como git o svn
  2. Los usuarios en un grupo como los "sitios web" (o incluso "www-data")
  3. En servidores como apache o lighthttpd
  4. Y PHP/Perl/Ruby

todos pueden leer, crear y ejecutar los archivos (archivos y directorios) no?

Si no me equivoco, Ruby y PHP scripts no son "ejecutados" directamente - pero pasa a un intérprete. Así que no hay necesidad de permiso de ejecución de archivos en /var/www...? Por lo tanto, parece que el permiso correcto sería chmod -R 1660 que haría

  1. todos los archivos compartibles por estas cuatro entidades
  2. todos los archivos no ejecutables por error
  3. bloquear a todos los demás, desde el directorio completo
  4. establecer el modo de permisos para "pegajosa" para que en el futuro todos los archivos

Es esto correcto?

Actualización 1: me acabo de dar cuenta de que los archivos y directorios necesitan diferentes permisos - yo estaba hablando acerca de los archivos de arriba, así que no estoy seguro de lo que los permisos de directorio sería necesario.

Actualización 2: la estructura de La carpeta de /var/www cambia drásticamente como una de las cuatro entidades anteriores son siempre de adición (y, a veces, la eliminación de las carpetas y sub carpetas en varios niveles de profundidad. Asimismo, crear y eliminar archivos que las otras 3 entidades pueden necesitar acceso de lectura/escritura. Por lo tanto, los permisos que se necesitan para hacer las cuatro cosas de arriba para archivos y directorios. Ya que ninguno de ellos debería tener permiso de ejecución (véase la pregunta acerca de ruby/php arriba) quiero suponer que rw-rw-r-- el permiso sería todo lo que se necesita y completamente seguro ya que estas cuatro entidades son dirigidas por personal de confianza (ver #2) y todos los demás usuarios en el sistema sólo tiene acceso de lectura.

Actualización 3: Esto es para el desarrollo personal de máquinas y privado de los servidores de la compañía. No hay azar en la web "clientes" como un host compartida.

Actualización 4: en Este artículo por slicehost parece ser la mejor para explicar lo que se necesita para configurar los permisos de su carpeta www. Sin embargo, no estoy seguro de lo que el usuario o grupo apache/nginx con PHP O svn/git ejecutar como y cómo cambiarlas.

Actualización 5: tengo (creo) finalmente encontró una manera de que todo esto funcione (respuesta). Sin embargo, no sé si este es el correcto y en forma SEGURA de hacer esto. Por lo tanto, he empezado una recompensa. La persona que tiene el mejor método de asegurar y administrar el directorio www gana.

8voto

DaRKoN_ Puntos 4098

No estoy seguro de si es "correcta", pero aquí es lo que yo hago en mi servidor:

  • /var/www contiene una carpeta para cada sitio web.
  • Cada sitio web tiene asignado un propietario, que se establece como el propietario de todos los archivos y carpetas en el sitio web del directorio.
  • Todos los usuarios que mantienen el sitio web se ponen en un grupo para el sitio web.
  • Este grupo se define como el grupo propietario de todos los archivos y carpetas en el directorio.
  • Los archivos o carpetas que necesita ser escrito por el servidor web (es decir. PHP) tienen su propietario cambió a www-data, que el usuario de apache se ejecuta bajo.

Tenga en cuenta que usted debe tener el bit de ejecución habilitado en los directorios de modo que usted puede obtener una lista de los contenidos.

7voto

Xeoncross Puntos 1177

Después de hacer más investigación parece que git/svn HERRAMIENTAS NO son un problema ya que se ejecutan como cualquier usuario está utilizando. (Sin embargo, el git/svn demonios son un asunto diferente!) Todo lo que he creado/clonados con git tenía mi permisos y el git, herramienta que aparecen en /usr/bin que se enmarca esta tesis.

Git permisos resuelto.

Permisos de usuario parece ser resueltos mediante la adición de todos los usuarios que necesitan acceder a la www directorio a la www-data grupo apache (nginx) ejecutar como.

Así que parece que una respuesta a esta pregunta va como esto:

Por defecto, /var/www es de titularidad de root:root y nadie puede agregar o cambios en los archivos de allí.

1) Cambio de grupo del propietario

Primero tenemos que cambiar el directorio www grupo a ser propiedad de "www-data" en lugar de "root" del grupo

sudo chgrp -R www-data /var/www

2) Agregar usuarios a www-data

Luego tenemos que agregar el usuario actual (y nadie más) a la www-data group

sudo usermod -a -G www-data demousername

3) CHMOD directorio www

Cambiar los permisos para que SÓLO el propietario (root) y todos los usuarios del grupo "www-data" puede rwx (leer/escribir/ejecutar) los archivos y directorios (nadie debería ser capaz de acceder a ella).

sudo chmod -R 2770 /var/www

Ahora todos los archivos y directorios creados por cualquier usuario que tenga acceso (es decir, en el "www-data" del grupo), se podrá leer/escribir por un servidor apache y por lo tanto de php.

Es esto correcto? ¿Qué sobre los archivos PHP/Ruby crear - la www-data a los usuarios acceder a ellos?

6voto

Phil P Puntos 2300

La viscosidad no es la herencia de permisos. Rigidez en un directorio significa que sólo el propietario de un archivo o el directorio propietario, puede cambiar el nombre o eliminar ese archivo en el directorio, a pesar de los permisos diciendo lo contrario. Por lo tanto 1777 en /tmp/.

En el clásico de Unix, no es la herencia de permisos basado en el sistema de archivo, sólo en el actual proceso de umask. En *BSD o Linux con setgid en el directorio, el campo de grupo de archivos recién creados a ser el mismo que el directorio padre. Nada más, usted necesita mirar en la Acl, con el 'default' ACL en directorios, que no permiten tener los permisos heredados.

Usted debe comenzar por la definición de: * lo que los usuarios tienen acceso al sistema * cuál es su modelo de amenaza es

Por ejemplo, si estás haciendo alojamiento web con múltiples clientes y usted no lo quiera ver cada uno de los otros archivos, entonces usted puede utilizar un grupo común "webcusts" para todos aquellos usuarios y un directorio modo de 0705. A continuación, archivos servidos por el webserver de proceso (no en "webcusts") va a ver a los Otros permanentes y se permite; los clientes no pueden ver los archivos y los usuarios pueden meterse con sus propios archivos. Sin embargo, esto no significa que el momento en que permiten CGI o PHP usted tiene que asegurarse de que los procesos se ejecutan como usuario específico (buena práctica, de todos modos, para múltiples usuarios-en-uno-host, para la rendición de cuentas). De lo contrario, los clientes pueden meterse con los demás archivos por tener un CGI hacerlo.

Sin embargo, si el tiempo de ejecución de usuario para un sitio web es el mismo que el propietario de la página web, entonces usted tiene problemas con no ser capaz de proteger el contenido de los consumidores en el caso de un agujero de seguridad en el script. Que es donde los anfitriones dedicados ganar, así que usted puede tener un tiempo de ejecución de usuario distinto del contenido estático propietario y no tiene que preocuparse mucho acerca de la interacción con otros usuarios.

2voto

Xeoncross Puntos 1177

Después de más investigación, parece como cualquier otro (posiblemente la mejor manera) para responder a esta sería la configuración de la carpeta www como así.

  1. sudo usermod -a -G developer user1 (agregar a cada usuario desarrollador de grupo)
  2. sudo chgrp -R developer /var/www/site.com/ , de modo que los desarrolladores pueden trabajar allí
  3. sudo chmod -R 2774 /var/www/site.com/ , de modo que sólo los desarrolladores pueden crear/editar archivos (otros/mundo puede leer)
  4. sudo chgrp -R www-data /var/www/site.com/uploads , de modo que www-data (apache/nginx) pueden crear cargas.

Desde git ejecuta como cualquier usuario llama, entonces, mientras el usuario está en el "desarrollador" de este grupo debe ser capaz de crear carpetas, editar archivos PHP, y administrar el repositorio de git.

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

2voto

Tie-fighter Puntos 506

Yo creo que la mejor manera de hacer esto es utilizando Posix Acl. Son cómodos para trabajar y ofrecer toda la funcionalidad que usted necesita.

http://en.wikipedia.org/wiki/Access_control_list#Filesystem_ACLs

He aquí una guía de cómo utilizar las Acl. Dependiendo de la distribución de su núcleo podría ya incluyen soporte de ACL.

http://www.cs.unc.edu/cgi-bin/howto?howto=linux-posix-acls

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: