2008-08-14 19 views
43

Disculpe la pregunta básica: soy desarrollador de .NET y no tengo mucha experiencia con las configuraciones de LAMP.¿Cuáles son los permisos adecuados para una carpeta de carga con PHP/Apache?

Tengo un sitio PHP que permitirá cargas a una carpeta específica. Se me ha dicho que esta carpeta tiene que ser propiedad del usuario del servidor web para el proceso de carga de trabajo, por lo que creó la carpeta y luego establecer los permisos como por ejemplo:

chown apache:apache -R uploads/ 
chmod 755 -R uploads/ 

El único problema ahora es que el usuario FTP no puede modificar los archivos cargados en absoluto.

¿Existe alguna configuración de permiso que me permita cargar archivos y luego modificarlos como usuario que no sea el usuario del servidor web?

Respuesta

36

Se puede crear un nuevo grupo con tanto para el usuario apache y usuario FTP como miembros y luego hacer el permiso en el cargue la carpeta 775. Esto debería dar tanto a los usuarios de apache como de FTP la capacidad de escribir en los archivos de la carpeta pero evitar que los demás los modifiquen.

+2

No olvides que puedes evitar los números mágicos obtusos yendo 'chmod u + rwX, go + r theFolder'! – Kzqai

+0

eso probablemente no es lo que mencionó porque carga archivos en la forma en que el usuario del sitio carga archivos. allí necesita permisos 777 –

+0

una carpeta de carga solo debe contener archivos jpg, gif, etc. Ciertamente no, digamos, archivos php cargados por alguien o archivos de script de shell. ¿Hay alguna manera de evitar que el servidor Apache ejecute archivos php en la carpeta de carga? – Toskan

12

O al menos 766.

  • lectura = 4
  • write = 2
  • ejecutar = 1

7 = leer + escribir + ejecutar

6 = leer + escriba

  • primer número: propietario
  • segundo número: Grupo
  • tercer número: otros usuarios
+5

¿No sería 766 en la carpeta de permitir que otras personas puedan subir archivos de allí y código malicioso también? –

+0

deshabilita la ejecución de scripts de php u otro en la carpeta de subidas –

0

voy a añadir que si está utilizando SELinux que necesita para asegurarse de que el contexto es de tipo tmp_t Usted puede lograr esto mediante la utilidad chcon

chcon -t tmp_t subidas

13

Me gustaría ir con la respuesta de Ryan si realmente quieres hacer esto.

En general, en un entorno * nix, siempre quiere equivocarse al regalar la menor cantidad de permisos posible.

9 veces sobre 10, 755 es el permiso ideal para esto, ya que el único usuario con la capacidad de modificar los archivos será el servidor web. Cambie esto a 775 con su usuario ftp en un grupo si REALMENTE necesita cambiar esto.

Puesto que usted es nuevo en PHP por su propia admisión, aquí hay un enlace útil para mejorar la seguridad de su servicio de carga: move_uploaded_file

1

Lo que es importante es que el usuario y el grupo apache deben tener mínimo read acceso y en algunos casos execute acceso. Por lo demás, puedes dar acceso a 0.

Esta es la configuración más segura.

0

Recuerde también CHOWN o chgrp la carpeta de su sitio web. Pruebe myusername# chown -R myusername:_www uploads

1

Respaldaría la idea de crear un grupo ftp que tenga los derechos para cargar. Sin embargo, no creo que sea necesario otorgar 775 permisos. 7 significa lectura, escritura, ejecución. Normalmente, desea permitir que ciertos grupos lean y escriban, pero dependiendo del caso, la ejecución puede no ser necesaria.

0

Sobre la base de la respuesta de @Ryan Ahearn, que sigue es lo que hice en Ubuntu 16.04 para crear un usuario front que sólo tiene permiso para web de nginx dir /var/www/html.

Pasos:

 
* pre-steps: 
    * basic prepare of server, 
    * create user 'dev' 
     which will be the owner of "/var/www/html", 
    * 
    * install nginx, 
    * 
* 
* create user 'front' 
    sudo useradd -d /home/front -s /bin/bash front 
    sudo passwd front 

    # create home folder, if not exists yet, 
    sudo mkdir /home/front 
    # set owner of new home folder, 
    sudo chown -R front:front /home/front 

    # switch to user, 
    su - front 

    # copy .bashrc, if not exists yet, 
    cp /etc/skel/.bashrc ~front/ 
    cp /etc/skel/.profile ~front/ 

    # enable color, 
    vi ~front/.bashrc 
    # uncomment the line start with "force_color_prompt", 

    # exit user 
    exit 
* 
* add to group 'dev', 
    sudo usermod -a -G dev front 
* change owner of web dir, 
    sudo chown -R dev:dev /var/www 
* change permission of web dir, 
    chmod 775 $(find /var/www/html -type d) 
    chmod 664 $(find /var/www/html -type f) 
* 
* re-login as 'front' 
    to make group take effect, 
* 
* test 
* 
* ok 
* 

Cuestiones relacionadas