Définition des autorisations correctes pour le téléchargement de fichiers

12

J'ai un script php qui télécharge un fichier dans un répertoire appelé "uploads". La seule façon de faire fonctionner le téléchargement est de le faire:

chmod 777 uploads

Je sais que ce n'est pas correct, mais je ne sais pas ce que je suis censé faire pour que cela fonctionne.

Informations sur le serveur: T1-Micro Amazon Linux AMI 2013.03 sur Amazon EC2

Des questions:

  • Comment savoir à quels utilisateurs ont besoin d'accéder ... par exemple, quel est le nom d'utilisateur pour apache ou le serveur Web?

  • Quel niveau d'accès dois-je accorder et quelle commande utiliser pour le faire.

Merci!

Edit: J'ai trouvé beaucoup de réponses sur le débordement de pile que je rechercherai. Par exemple

/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

Merci

fun_programming
la source

Réponses:

20

Essayez de courir:

ps -ef | grep apache

et regardez la colonne la plus à gauche correspondant au serveur Apache. Il s'agit de l'utilisateur qui exécute Apache, et par héritage également PHP.

Changez la propriété du répertoire de téléchargement vers cet utilisateur et limitez un peu les autorisations, par exemple si l'utilisateur du serveur Web www-dataappartient au groupe du même nom (en utilisant un exemple de chemin d'accès /var/www/uploads):

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

(ou quelles que soient les autorisations que vous souhaitez dans ce cas). J'utilise sudodans les exemples de commandes - je ne sais pas exactement comment les systèmes EC2 sont configurés à cet égard pour obtenir les privilèges de superutilisateur.

Si vous avez déjà téléchargé des fichiers / répertoires, vous souhaiterez peut-être également modifier la propriété et les autorisations. Pour ce faire, en passant de 777à des autorisations plus raisonnables, vous pouvez exécuter:

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 {} \;

N'exécutez pas "aveuglément" des commandes si vous ne comprenez pas chacune de leurs parties. Vérifiez les manpages si quelque chose n'est pas clair (cela devrait être assez simple).

Daniel Andersson
la source
Merci. Cela a beaucoup aidé. apache est l'utilisateur. Les commandes sudo chown et sudo chmod fonctionnent toutes les deux.
fun_programming
Solution claire et simple, merci beaucoup. Maintenant, je n'ai plus besoin de l'autorisation 777 risquée
lhrec_106