Quelles sont les autorisations appropriées pour un dossier de téléchargement avec PHP/Apache ?

StackOverflow https://stackoverflow.com/questions/10990

  •  08-06-2019
  •  | 
  •  

Question

Désolé pour la question de base - je suis un développeur .NET et je n'ai pas beaucoup d'expérience avec les configurations LAMP.

J'ai un site PHP qui permettra les téléchargements vers un dossier spécifique.On m'a dit que ce dossier devait appartenir à l'utilisateur du serveur Web pour que le processus de téléchargement fonctionne. J'ai donc créé le dossier, puis défini les autorisations comme telles :

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

Le seul problème maintenant est que l'utilisateur FTP ne peut pas du tout modifier les fichiers téléchargés.

Existe-t-il un paramètre d'autorisation qui me permettra de continuer à télécharger des fichiers, puis de les modifier ultérieurement en tant qu'utilisateur autre que celui du serveur Web ?

Était-ce utile?

La solution

Vous pouvez créer un nouveau groupe avec à la fois l'utilisateur Apache et l'utilisateur FTP comme membres, puis accorder l'autorisation sur le dossier de téléchargement 775.Cela devrait donner aux utilisateurs Apache et FTP la possibilité d'écrire dans les fichiers du dossier, mais empêcher tout le monde de les modifier.

Autres conseils

J'accepterais la réponse de Ryan si vous voulez vraiment faire ça.

En général, dans un environnement * nix, vous voulez toujours donner le moins d'autorisations possible.

9 fois sur 10, 755 est l'autorisation idéale pour cela - car le seul utilisateur ayant la possibilité de modifier les fichiers sera le serveur Web.Changez cela en 775 avec votre utilisateur FTP dans un groupe si vous avez VRAIMENT besoin de changer cela.

Puisque vous êtes nouveau sur PHP, de votre propre aveu, voici un lien utile pour améliorer la sécurité de votre service de téléchargement :move_uploaded_file

Ou au moins 766.

  • lire = 4
  • écrire = 2
  • exécuter = 1

7 = lire + écrire + exécuter

6 = lire + écrire

  • premier numéro :propriétaire
  • deuxième numéro :groupe
  • troisième numéro :autres utilisateurs

J'ajouterai que si vous utilisez SELinux, vous devez vous assurer que le contexte de type est tmp_t. Vous pouvez y parvenir en utilisant l'utilitaire chcon.

chcon -t tmp_t télécharge

Ce qui est important c'est que le apache l'utilisateur et le groupe doivent avoir un minimum read accès et dans certains cas execute accéder.Pour le reste tu peux donner 0 accéder.

C'est le paramètre le plus sûr.

Je soutiendrais l'idée de créer un groupe FTP qui aurait les droits de téléchargement.Cependant, je ne pense pas qu'il soit nécessaire de donner l'autorisation 775.7 signifie lire, écrire, exécuter.Normalement, vous souhaitez autoriser certains groupes à lire et à écrire, mais selon les cas, l'exécution peut ne pas être nécessaire.

Rappelez-vous aussi CHOWN ou chgrp le dossier de votre site Web.Essayer myusername# chown -R myusername:_www uploads

Sur la base de la réponse de @Ryan Ahearn, voici ce que j'ai fait sur Ubuntu 16.04 pour créer un utilisateur front qui n'a l'autorisation que pour le répertoire Web de nginx /var/www/html.

Pas:

* 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
* 

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top