web-dev-qa-db-fra.com

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

J'ai un script php qui télécharge un fichier dans un répertoire appelé "upload". La seule façon pour que le téléchargement fonctionne est si je le fais:

chmod 777 uploads

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

Informations sur le serveur: AMI Amazon Linux T1-Micro 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 donner et quelle commande utiliserais-je pour le faire?.

Merci!

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

https://stackoverflow.com/questions/3642241/php-file-upload-permissions

https://stackoverflow.com/questions/10842880/setting-permissions-in-php-on-server

https://stackoverflow.com/questions/8948537/permission-denied-when-attempting-tuuupload-file-with-php

Merci

10
fun_programming

Essayez de courir:

ps -ef | grep Apache

et regardez la colonne la plus à gauche correspondant au serveur Apache. C'est l'utilisateur qui exécute Apache et, par héritage, PHP.

Modifiez la propriété du répertoire de téléchargement sur cet utilisateur et limitez un peu les autorisations, par exemple. si l'utilisateur du serveur Web était www-data et qu'il appartient au groupe du même nom (en utilisant un exemple de chemin de /var/www/uploads):

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

(ou toutes les autorisations que vous voulez dans ce cas). J'utilise Sudo dans 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 pouvez également modifier la propriété et les autorisations correspondantes. 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 {} \;

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

17
Daniel Andersson