Non dovresti mai eseguire un sito Web dalla tua home directory . MAI. Altrimenti dovresti dare al server web la possibilità di attraversare/home/
per vedere la struttura della directory, ma anche in/home/$USER/
(directory home dell'utente, dove possiamo provare a vedere cos'altro esiste nella tua directory utente), così come qualsiasi altra sottocartella lì dentro. Un server Web configurato in modo errato, configurato in modo errato o senza patch può causare una massiccia perdita di dati in questo modo o perdita di credenziali e tali da mettere a rischio i dati personali e gli accessi su cose diverse. L'approccio symlink che stai usando non aiuta neanche per lo stesso motivo del tentativo di dare a Apache le autorizzazioni per la lettura/home/andre/www/moodle
- il web server deve essere in grado di attraversare la tua home directory per raggiungere la posizione a cui /var/www/html
punta il link simbolico , il che comporta ancora quel rischio per la sicurezza.
In primo luogo, utilizzare sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Questo copierà i tuoi file /var/www/html
e li manterrà lontani dalla tua home directory. Ripristineremo quindi le autorizzazioni in modo che tu e il server Web possiate accedere a tutto in quella directory e dare al vostro utente la lettura / scrittura completa su tutti i file e le directory. Quindi, dovrai sempre e solo lavorare /var/www/html
per il tuo sito.
Questo è in effetti, quattro passaggi, dopo aver copiato i dati in /var/www/html
:
- Consenti ad Apache di accedere alle cartelle e ai file, in modo che possa servire il sito senza errori 403.
- Fornisci al tuo utente "proprietario" i file e le cartelle e datti lettura / scrittura su tutti i file e le cartelle, oltre alla possibilità di attraversare le directory.
- (Opzionale ma consigliato) Impostalo in modo tale che qualsiasi file o cartella creati da qui nella struttura della directory abbia il gruppo impostato
www-data
.
- (Facoltativo) Pulizia finale della sicurezza, in cui abbiamo impostato le autorizzazioni in modo che tu e il server Web sia possibile visualizzare i dati del sito, ma altri utenti non possono accedere ai file o alla struttura delle directory per il sito.
(1) Consentire ad Apache l'accesso alle cartelle e ai file.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
Questo imposta in modo ricorsivo il 'gruppo' in modo che sia www-data
per le cartelle e i file. Ciò fornisce quindi al server Web l'autorizzazione a ricorrere e ottenere l'accesso alla struttura delle directory radice dei documenti del sito ( +x
solo per le directory). Inoltre, garantisce che il server Web disponga delle autorizzazioni di lettura per tutti i file, in modo da poter ricevere i dati del sito.
Ci possono essere alcuni casi in cui devi autorizzare il server web a scrivere un file o una directory - questo può essere ottenuto facendo sudo chmod g+w /var/www/html/PATH
(dove si PATH
trova il percorso del file o della cartella nella struttura della directory dove devi applicare il autorizzazioni di scrittura per il server Web).
AVVISO : ci sono molti casi in cui ciò può esporre informazioni "sicure" sulla configurazione di un sito (come credenziali di accesso al database, ecc.) E si dovrebbero rimuovere le autorizzazioni di accesso "altro" a quei dati su quei singoli file o directory con quanto segue: sudo chmod o-rwx /var/www/html/FILEPATH
(sostituendo FILEPATH
con il percorso relativo alla /var/www/html
cartella per il file).
Si noti inoltre che potrebbe essere necessario rieseguire questi comandi in futuro se i "nuovi file" presentano 403 problemi, al fine di fornire le autorizzazioni corrette al server Web per poter accedere ai file e alle cartelle creati o copiati e il www-data
gruppo non viene impostato correttamente.
(2) Concedi i privilegi di lettura / scrittura al proprietario alle cartelle e ai file e consenti all'accesso alle cartelle di attraversare la struttura della directory.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
Sostituisci USER
nel primo comando con il tuo nome utente!
Facciamo tre cose qui. Innanzitutto, impostiamo il tuo utente come "Proprietario" di tutti i file e le directory in /var/www/html
. Successivamente, impostiamo le autorizzazioni di lettura e scrittura per le cartelle e ti consentiamo di accedere alle cartelle per accedervi (l' +x
elemento sugli elementi della directory). Quindi impostiamo tutti i file per avere le autorizzazioni di lettura / scrittura per il proprietario, che abbiamo appena impostato.
(3) (Opzionale) Assicurati che ogni nuovo file dopo questo sia stato creato www-data
come utente 'access'.
sudo find /var/www/html -type d -exec chmod g+s {} +
Questo imposta il bit "set gid" per il gruppo nelle directory. I file e le cartelle creati all'interno di queste directory avranno sempre www-data
come gruppo, consentendo l'accesso al web server.
(4) (Facoltativo) Pulizia finale della sicurezza, se non si desidera che altri utenti possano vedere i dati
Abbiamo bisogno che il tuo utente veda le directory e i file. Abbiamo bisogno anche del web server per farlo. Potremmo non volere che altri utenti del sistema (tranne root) vedano i dati. Quindi non concedere loro tale accesso e renderlo tale che solo l'utente e il server Web possano vedere i dati.
sudo chmod -R o-rwx /var/www/html/
NOTA: non sarà necessario rieseguirlo in un secondo momento o modificare qui le autorizzazioni per la categoria "altro". Se gli "altri" utenti non riescono a raggiungere /var/www/html/
(non hanno il +x
bit necessario /var/www/html
per attraversare la struttura della directory e della struttura di file, né il +r
bit per leggere gli elenchi di file), quindi le autorizzazioni sugli elementi sotto quella directory per gli altri utenti o ai gruppi non importa davvero troppo.
Esiste anche una soluzione leggermente meno invasiva, anche se non è garantito che funzioni per tutti i nuovi file, né è garantito che funzioni su tutti i file system , includendo liste di controllo dell'accesso ai file. Questo ti consente di lasciare la proprietà dei file www-data
per cose, ma ti dà diritti di proprietario effettivi, a tutti gli effetti, anche se non possiedi personalmente i file.
Questa soluzione è un po 'meno invasiva e ti consente di avere una directory e tutti i file all'interno di proprietà di www-data:www-data
o root:www-data
ma anche darti l'accesso. Utilizza gli elenchi di controllo di accesso , che consentono a più utenti di disporre delle autorizzazioni senza impostare singoli gruppi. Ciò consente anche agli utenti del sistema root
o di www-data
possedere i file, ma consente anche di aggiungere ulteriori autorizzazioni caso per caso e ottimizzare le autorizzazioni per determinati utenti in modo che possano leggere le cose ma non modificarle e così via.
Supponendo che stiamo ancora lavorando /var/www/html/
, e non vogliamo ficcanaso utenti diversi da noi e dal sistema (e ovviamente dalla radice) per vedere i nostri dati, dovremo fare le seguenti cose:
- Restituire la proprietà all'utente del sistema web server
www-data
.
sudo chown -R www-data: www-data / var / www / html
- Consentire in modo ricorsivo di leggere / scrivere sui file, offrendo agli altri utenti (escluso
www-data
e root
ovviamente) nessun accesso ai file.
sudo find / var / www / html -type f -exec setfacl -mu: YOURUSERNAME: rw -m altro :: --- {} \;
- Concediti ricorsivamente lettura / scrittura / attraversamento delle directory, rimuovi l'accesso alle cartelle per altri utenti (esclusi
www-data
e root
) e imposta questo come ACL "predefinito" per i nuovi file nelle directory.
sudo find / var / www / html -type d -exec setfacl -d -mu: YOURUSERNAME: rwx -mo :: --- {} \;
- Dobbiamo anche impostare il
setgid
bit per tutte le directory, in modo che se si crea un file il server web possa ancora accedervi come www-data
tramite le autorizzazioni di gruppo.
sudo find / var / www / html -type d -exec chmod g + x {} \;
E ora hai accesso a tutte le directory e non devi toglierti l'accesso, il www-data
che aiuta poiché il server web può ancora creare file ovunque sia necessario (come frontend basati su PHP che hanno le loro directory cache e simili bisogno di essere creato e scritto per il corretto funzionamento).
L'unica avvertenza: se si creano manualmente nuovi file, è necessario chown di conseguenza per dare la proprietà al server web. È semplice sudo chown www-data:www-data filename
e gli elenchi di controllo degli accessi dovrebbero comunque permetterti di avere diritti di proprietario effettivi sul file.
Esistono diversi casi in cui ho dovuto eseguire questa operazione come amministratore di sistema per un tipo di accesso non standard senza modificare i proprietari di un determinato file. Funziona, ma ha i suoi mal di testa, poiché non tutti i file system supportano gli elenchi di accesso ai file.
+x
ai file darebbe autorizzazioni eseguibili e non vogliamo che i file PHP vengano eseguiti, necessariamente, attraverso la riga di comando PHP o come eseguibili sul server stesso - li vogliamo elaborati dal parser PHP nel web server (e noi non è necessario disporre dei file PHP per consentire+x
al parser PHP di leggerli ed elaborarli). Le directory hanno bisogno+x
per consentire l'attraversamento attraverso le directory - vale a dire, se una directory non è+x
e non sono root, non riesco ad accedere alla directory, che è il problema che hai avuto con Apache non funziona con i tuoi symlink e la tua home directory.