2010-08-14 10 views
8

Esto podría ser una pregunta novato, pero no puede encontrar una respuesta en cualquier lugar.Permisos de archivos; ¿Mi contenido de la carpeta www debería ser propiedad de www-data?

Tengo un problema, que Another file permissions problem me han ayudado a CASI resolver.

He creado un usuario en linux (danny) que tiene acceso sudo. También he creado un nuevo grupo cuyo nombre TAMBIÉN es danny, y he agregado el usuario danny a ese grupo. Este grupo tiene acceso sudo (root).

Tengo todos los archivos y carpetas en mi carpeta www propiedad de danny/danny group.

Tengo un código de carga de imágenes que es php. Este código no puede cargar imágenes en una carpeta llamada "images" que se encuentra en la carpeta www, A MENOS QUE proporcione la carpeta de imágenes permisos.

Por lo tanto, he seguido la respuesta en la pregunta vinculada, y he descubierto que el usuario que carga la secuencia de comandos se ejecuta como es "www-data".

De acuerdo con la respuesta en el enlace a la otra pregunta que he publicado, tengo que añadir www-data a un grupo ... Pero estoy atascado aquí ...

qué grupo debería añadir ¿a? ¿Qué debería hacer desde aquí?

Cualquier consejo es apreciado.

Por cierto, he aquí algo de información sobre www-data y Danny

id www-data: 
    uid=33(www-data) gid=33(www-data) groups=33(www-data) 
    id danny 
    uid=1000(danny) gid=33(www-data) groups=33(www-data) 

Gracias y si necesita más de entrada, házmelo saber ...

+2

Has seleccionado por lejos la peor respuesta, ya que serás pirateado si usas este consejo. Deberías cambiar esto – rook

Respuesta

-2

En realidad, el problema es que se necesita el usuario www-data para tener acceso de escritura a la carpeta images.

Y probablemente desee que el usuario danny tenga acceso completo a la carpeta también.

EDIT: palabra adicional de advertencia: que tienen archivos puede ser escrito por su servidor web es siempre un riesgo de seguridad . Asegúrese de verificar los archivos que se escriben y asegúrese de que las personas no puedan cargar o cambiar el código. Resumen: * No permita que su servidor web ejecute scripts que se puedan escribir, o en una carpeta que se pueda escribir. ¡Así que asegúrese de que solo las imágenes/carpetas sean grabables, y compruebe dos veces que todo lo que está escrito sea en realidad una imagen!

O bien:

  1. Conjunto www-data como propietario de la carpeta, y chmod u + rwx www.
  2. Establezca www-data como parte de un grupo X, y cambie el propietario de la carpeta a X, y chmod g + rwx www.
  3. Establezca la carpeta mundial grabable en su servidor (en en algunos casos, también es una solución aceptable , pero menos segura).
+0

Finalmente lo puse a trabajar, seguí la solución 1 que usted propuso anteriormente. Una última cosa, los permisos son ahora 765 en la image_folder. Esto es bueno y seguro, ¿no? PERO, ¿cómo puedo restringir que las personas vean mi archivo en los navegadores? (Lo que quiero decir es, por ejemplo, que escribe www.domain.com/images, luego aparecen todas las carpetas) –

+1

@Camran: Para evitar que Apache muestre listados de directorios, use .htaccess para desactivar la opción "Índices". ('Options -Indexes') –

+2

-1 una aplicación web no debe tener acceso de escritura a su propia raíz web, y bajo ninguna condición la carpeta debe ser mundialmente editable o legible. Este es un gran error y realmente me molesta. – rook

1

Yo añadiría www-data user to group danny.

usermod -a -G danny www-data 

De esta manera, www-data podría entrar al lugar de Danny, pero no al revés.

Con el fin de permitir al usuario www-data a escribir a una máscara de permisos carpeta de grupo Danny ha de ser como (donde comodín significa cualquier valor es aceptable):

d???rwx??? 
+0

¿Alguna idea sobre el comentario que publiqué en la pregunta de Koneraks? –

+1

¿No significaría eso que todos los archivos de danny serían potencialmente accesibles a internet si el servidor web está en peligro? Esto parece ser una mala idea para mí. – paradroid

16

En general, NO, su contenido debe no ser propiedad de www-data. El único contenido que debe ser propiedad de www-data son los archivos específicos que necesita las aplicaciones web para poder modificar y los directorios específicos que necesitan para poder crear o eliminar archivos. El resto no debe ser propiedad (o escribible) por www-data porque cada archivo en el que www-data puede escribir es un archivo que un atacante que compromete su servidor web (incluidos los scripts o las aplicaciones web que está ejecutando) podrá reemplazarlo con los datos maliciosos que haya puede elegir.

Es especialmente importante que www-data no propia o ser capaz de escribir en cualquier archivo ejecutable (por ejemplo, secuencias de comandos, archivos flash, documentos en Word u otros formatos con capacidad para macros, etc.) debido a la sustitución ellos con ejecutables maliciosos proporcionarían una manera fácil de atacar las computadoras de los usuarios o el servidor web en sí.

+0

Entonces, ¿entiendo bien que la sugerencia en http://askubuntu.com/a/9411/12938 es en realidad una mala? – texnic

+0

@texnic - La respuesta que vinculó está bien. Dice que establezca su cuenta de usuario como propietario y www-data como el grupo en los directorios web, y establezca sus permisos en 0755, lo que le da permisos a www-data para leer y ejecutar, pero no para escribir. Estas configuraciones son consistentes con lo que dije en mi respuesta aquí. –

+0

De hecho. Gracias. Poco a poco estoy captando toda la idea. – texnic

2

Creo que tiene sentido que los archivos utilizados por www-data sean propiedad de www-data. Quiero decir, ¿quién más debería poseerlo? La parte más importante es que la aplicación web no debe tener acceso de escritura a su propia raíz web. La razón por la cual es debido a una vulnerabilidad directory traversal en una función PHP como copy() o file_put_contents() podría permitir que un atacante suelte una puerta trasera .php en su raíz web.

Otro ataque importante a tener en cuenta es que otro proceso o usuario en el sistema podría querer leer o escribir en su raíz web, por lo que es importante que el último número sea cero. El número del medio es el grupo y no lo estás usando, por lo que también debería ser cero. Los siguientes 2 comandos hacen que su raíz web sea legible y ejecutable por apache, y solo apache. A veces se usa una cuenta de usuario diferente, por lo tanto, ejecute un <?php system('whoami')?> para averiguar la cuenta de usuario correcta.

chown www-data -R /path/to/webroot

chmod 500 -R /path/to/webroot

En el momento en que el atacante tiene la ejecución de código remoto para cambiar los privilegios de la raíz de la tela de su juego. El objetivo es frustrar el éxito de la hazaña.

+5

Tenga en cuenta que, si www-data posee los archivos/directorios, entonces hacerlo no escribible es una pequeña aceleración que puede detener algunos ataques enlatados, pero no mucho más. ¿Por qué? Debido a que el propietario del archivo puede cambiar sus permisos, entonces, si www-data posee el archivo, un atacante puede otorgarse fácilmente el acceso de escritura. De lo contrario, el atacante no puede obtener acceso de escritura sin pasar primero de "exploit web" a "root exploit" (en ese punto, realmente se ha terminado el juego, independientemente de los permisos en la raíz web). –

Cuestiones relacionadas