Quali sono le autorizzazioni corrette per una cartella di caricamento con PHP/Apache?

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

  •  08-06-2019
  •  | 
  •  

Domanda

Ci scusiamo per la domanda di base: sono uno sviluppatore .NET e non ho molta esperienza con le configurazioni LAMP.

Ho un sito PHP che consentirà i caricamenti in una cartella specifica.Mi è stato detto che questa cartella deve essere di proprietà dell'utente del server web affinché il processo di caricamento funzioni, quindi ho creato la cartella e quindi ho impostato le autorizzazioni come tali:

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

L'unico problema ora è che l'utente FTP non può modificare in alcun modo i file caricati.

Esiste un'impostazione di autorizzazione che mi consentirà di caricare comunque file e quindi modificarli successivamente come utente diverso dall'utente del server web?

È stato utile?

Soluzione

È possibile creare un nuovo gruppo con sia l'utente Apache che l'utente FTP come membri e quindi concedere l'autorizzazione sulla cartella di caricamento 775.Ciò dovrebbe dare sia agli utenti Apache che a quelli FTP la possibilità di scrivere sui file nella cartella ma impedire a tutti gli altri di modificarli.

Altri suggerimenti

Se vuoi davvero farlo, seguirei la risposta di Ryan.

In generale, in un ambiente *nix, vuoi sempre sbagliare nel concedere il minor numero di autorizzazioni possibile.

9 volte su 10, 755 è l'autorizzazione ideale per questo, poiché l'unico utente con la possibilità di modificare i file sarà il server web.Cambialo in 775 con il tuo utente ftp in un gruppo se hai VERAMENTE bisogno di cambiarlo.

Dato che sei nuovo in PHP per tua stessa ammissione, ecco un collegamento utile per migliorare la sicurezza del tuo servizio di caricamento:move_uploaded_file

O almeno 766.

  • leggere = 4
  • scrivere = 2
  • eseguire = 1

7 = leggi + scrivi + esegui

6 = leggi + scrivi

  • primo numero:proprietario
  • secondo numero:gruppo
  • terzo numero:altri utenti

Aggiungerò che se stai usando SELinux devi assicurarti che il contesto del tipo sia tmp_t Puoi farlo usando l'utilità chcon

chcon -t tmp_t caricamenti

Ciò che è importante è che apache l'utente e il gruppo dovrebbero avere un minimo read accesso e in alcuni casi execute accesso.Per il resto puoi dare 0 accesso.

Questa è l'impostazione più sicura.

Sosterrei l'idea di creare un gruppo ftp che avrà i diritti di caricamento.Tuttavia, non penso che sia necessario dare il permesso a 775.7 sta per leggere, scrivere, eseguire.Normalmente si desidera consentire a determinati gruppi di leggere e scrivere, ma a seconda dei casi l'esecuzione potrebbe non essere necessaria.

Ricorda anche CHOWN O chgrp la cartella del tuo sito web.Tentativo myusername# chown -R myusername:_www uploads

In base alla risposta di @Ryan Ahearn, di seguito è quello che ho fatto Ubuntu 16.04 per creare un utente front che ha l'autorizzazione solo per la directory web di nginx /var/www/html.

Passaggi:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top