Establecer los permisos correctos para cargar archivos

12

Tengo un script php que carga un archivo en un directorio llamado "uploads". La única forma en que puedo hacer que la carga funcione es si lo hago:

chmod 777 uploads

Sé que esto no es correcto, pero no sé qué se supone que debo hacer para que funcione.

Información del servidor: T1-Micro Amazon Linux AMI 2013.03 en Amazon EC2

Preguntas:

  • ¿Cómo averiguo a qué usuarios necesitan acceso ... por ejemplo, cuál es el nombre de usuario para apache o el servidor web?

  • ¿Qué nivel de acceso necesito dar y qué comando usaría para hacerlo?

¡Gracias!

Editar: Encontré muchas respuestas sobre el desbordamiento de pila que investigaré. Por ejemplo

/programming/3642241/php-file-upload-permissions

/programming/10842880/setting-permissions-in-php-on-server

/programming/8948537/permission-denied-when-attempting-to-upload-file-with-php

Gracias

diversión_programación
fuente

Respuestas:

20

Intenta correr:

ps -ef | grep apache

y mire la columna más a la izquierda correspondiente al servidor Apache. Este es el usuario que ejecuta Apache, y por herencia también PHP.

Cambie la propiedad del directorio de carga a este usuario y restrinja los permisos un poco, por ejemplo, si el usuario del servidor web www-datapertenecía al grupo del mismo nombre (usando una ruta de muestra de /var/www/uploads):

sudo chown www-data:www-data /var/www/uploads
sudo chmod 755 /var/www/uploads

(o los permisos que desee en esta instancia). Utilizo sudolos comandos de ejemplo: no sé exactamente cómo están configurados los sistemas EC2 a este respecto para obtener privilegios de superusuario.

Si ya ha subido archivos / directorios, es posible que también desee cambiar la propiedad y los permisos sobre ellos. Para hacer esto, desde 777permisos más razonables, puede ejecutar:

sudo chown -R www-data:www-data /var/www/uploads
sudo chmod -R 755 /var/www/uploads
sudo find /var/www/uploads -type f -exec chmod -x {} \;

No ejecute comandos "a ciegas" si no comprende cada parte de ellos. Verifique las manpáginas si algo no está claro (debería ser bastante sencillo).

Daniel Andersson
fuente
Gracias. Esto ayudó mucho. Apache es el usuario. los comandos sudo chown y sudo chmod funcionan.
fun_programming
Solución clara y directa, muchas gracias. Ahora ya no necesito el arriesgado permiso 777
lhrec_106