Concedere a un utente le autorizzazioni per i dati www di proprietà / var / www


36

Ho una semplice configurazione del web server per alcuni siti Web, con un layout simile a:

sito1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

In precedenza ho usato l'utente root per gestire i file e poi li www-dataho restituiti a quando avevo finito (siti WordPress, necessari per il funzionamento di WP Uploads). Questo probabilmente non è il modo migliore.

Sto cercando di trovare un modo per creare un altro utente (chiamiamolo user1) che disponga dell'autorizzazione per modificare i file nel sito1, ma non nel sito2, e non impedisce ai file di essere "di proprietà" www-data. C'è un modo per me di farlo?

Risposte:


70

Se controlliamo la proprietà di site1, troveremo qualcosa del genere,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Ciò significa che la directory è di proprietà dell'utente root, root del gruppo. Mentre l'utente root dispone delle autorizzazioni di scrittura (oltre alle autorizzazioni di lettura ed esecuzione) per la directory, il root di gruppo ha solo autorizzazioni di lettura ed esecuzione.

Vorremmo cambiare la proprietà del gruppo in un altro (nuovo) gruppo e aggiungere l'utente1 a quel particolare gruppo. Daremo il permesso di scrittura anche a quel particolare gruppo.

Crea un nuovo gruppo,

sudo addgroup site1

Aggiungi user1 al gruppo appena creato,

sudo adduser user1 site1

Verifica che user1 sia veramente in quel gruppo,

groups user1

L'output dovrebbe essere un elenco simile a

user1 : <other-groups> site1

Ora possiamo modificare la proprietà del gruppo della directory desiderata.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

Concedi l'autorizzazione di scrittura a questo nuovo proprietario del gruppo,

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Verifica che tutte le modifiche siano effettivamente presenti,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Quindi, la directory ora è di proprietà dell'utente root, gruppo site1. Sia l'utente root che il gruppo del sito1 dispongono dell'autorizzazione di scrittura (più autorizzazioni di lettura ed esecuzione) per la directory. Qualsiasi utente appartenente al sito del gruppo1 godrà di tutti i privilegi concessi a quel gruppo.

Ora accedi come user1, passa alla directory site1 e prova a creare un file in quella directory,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Ciò è fallito poiché molto probabilmente il gruppo primario di user1 non è site1. Quindi, passa a quel gruppo.

newgrp - site1

Prova a ricreare il file (attenzione che sei stato spostato nella directory home di user1 dopo aver cambiato gruppo), ora dovrebbe funzionare. Poiché i file creati avranno il permesso di lettura mondiale, apache (o il tuo server web) non dovrebbe avere alcun problema ad accedervi.

MODIFICARE

Inoltre, come sottolineato da dan08 nel commento, è necessario aggiungere i dati www al gruppo site1.

sudo adduser www-data site1

Su molte (non tutte) le distribuzioni, www-data è l'utente con cui viene eseguito il web server Apache. Ciò significa anche che tutto ciò che viene fatto da Apache (specialmente gli script PHP) verrà eseguito con le autorizzazioni dei dati www dell'utente (e anche dei dati www del gruppo) per impostazione predefinita. WordPress utilizza l'utente www-data per scrivere file.

Se vuoi vedere come funziona il web server apache, emetti il ​​comando,

ps aux | grep apache2 | less

1
È inoltre necessario aggiungere i dati www al gruppo site1. Quando si caricano e modificano i file nell'interfaccia Web di Wordpress. Le modifiche vengono apportate da Apache utilizzando l'utente www-data. quindi i privilegi di lettura non sono sufficienti per la maggior parte del tempo.
Dan,

3
Il Permission deniedmessaggio non è dovuto al "gruppo primario", ma piuttosto all'utente che non si trova ancora in quel gruppo (per quanto riguarda il sistema operativo). Se esci e accedi di nuovo, funzionerà come previsto (senza eseguire newgrp - site1).
0b10011,

Come funziona esattamente questo sarebbe diverso dal dare www-datale autorizzazioni di gruppo di scrittura se si finisce per dover aggiungere www-dataa site1ogni modo?
Matt,

@MattBorja La tua query non è molto chiara. Stai chiedendo cosa c'è di sbagliato nel dare il gruppo chiamato www-data' write permissions? If that is the question, www-data 'non è un gruppo, è un utente. Per favore fatemi sapere se ho frainteso la tua domanda.
Masroor,

penso, questa non è una configurazione sicura perché gli utenti possono accedere ai reciproci siti tramite script php, ad esempio un file manager php.
qdinar,

7

Crea due gruppi: site1grpesite2grp

sudo groupadd site1grp && sudo groupadd site2grp

Aggiungi www-dataa entrambi i gruppi.

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Aggiungi user1 e user2 ai gruppi appropriati

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Modificare le autorizzazioni delle cartelle del sito in modo che il proprietario dell'utente sia www-data e il proprietario del gruppo sia il gruppo appropriato

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Ora www-dataha le autorizzazioni utente e di gruppo su entrambi i siti e ogni utente ha le autorizzazioni di gruppo per il rispettivo sito.


4

Per coloro che hanno la loro cartella principale wordpress nella loro cartella principale:

Ubuntu / apache

  1. Aggiungi il tuo utente al gruppo www-data:

    CREDITO Concedere autorizzazioni di scrittura al gruppo www-data

    Vuoi chiamare usermodil tuo utente. Quindi sarebbe:

    sudo usermod -aG www-data yourUserName
    

    Assumendo www-dataesiste gruppo

  2. Verifica che il tuo utente sia nel www-datagruppo:

    groups yourUserName
    

    Dovresti ottenere qualcosa del tipo:

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName è in genere simile al tuo nome utente

  3. Modifica ricorsiva della proprietà del gruppo della cartella mantenendo la proprietà dell'utente

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Cambia directory in YourWebSiteFolder

    cd yourWebSiteFolder
    
  5. Modifica ricorsiva delle premesse di gruppo delle cartelle e delle sottocartelle per abilitare le autorizzazioni di scrittura:

    find . -type d -exec chmod -R 775 {} \;
    

    modalità di /home/yourUserName/yourWebSiteFolder/'modifica da 0755 (rwxr-xr-x)a0775 (rwxrwxr-x)

  6. Modifica ricorsiva delle premesse di gruppo dei file e dei file secondari per abilitare le autorizzazioni di scrittura:

    find . -type f -exec chmod -R 664 {} \;
    

    Il risultato dovrebbe assomigliare a:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Equivalente a:

    chmod -R ug+rw foldername
    

    Le autorizzazioni saranno come 664 o 775.


3

Devi creare un nuovo gruppo, per il cosiddetto "nuovo utente", quindi aggiungere i dati www e il "nuovo utente" a quel gruppo:

sudo gpasswd -a new_user new_group

Quindi puoi modificare il proprietario new_usere il gruppo in new_group:

sudo chown -R new_user:new_group /var/www/site1

Quindi dovrai fornire l'accesso a livello di gruppo al sito1. www-data sarà ancora in grado di accedere al sito, perché appartiene al gruppo_ new, mentre new_user non sarà in grado di accedere al sito2, perché non apparterrà al gruppo di dati www, proprietario del sito2.


La tua risposta è confusa, "dando accesso a livello di gruppo al sito1", intendevi "cambiare il gruppo del sito1 in nuovo_gruppo" o cambiare la modalità ( chmod)? La tua risposta non menziona da nessuna parte la modalità che può fare la differenza per essere sicuro (o rompere le cose).
Lekensteyn,

Intendevo cambiare la modalità ( chmod) revocando tutte le autorizzazioni per ALTRI.
Errikos,

1

Supponendo che tutti i file appartengano già www-dataall'utente (puoi verificarlo con il ls -slahcomando) che appartiene al www-datagruppo (colonna successiva dopo il nome utente nell'elenco dei file) puoi semplicemente aggiungere l'utente allo stesso www-datagruppo per consentire la modifica di questi file

# usermod -aG www-data username

per utente esistente o

# adduser username www-data

per quello appena creato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.