Problema relativo alle autorizzazioni: in che modo Apache può accedere ai file nella mia directory Home?


33

So che le autorizzazioni per i file sono state trattate qui prima, ma sto lottando per ottenere la mia testa intorno al concetto per il mio scenario.

  • Ho creato i file su una vecchia installazione di Ubuntu.
  • Ho copiato i file nella mia nuova installazione di Ubuntu e li ho inseriti nel mio webroot.
  • Quando provo a eseguire i file (sono file PHP) ricevo un errore relativo alle autorizzazioni

nel tentativo di risolvere questo problema, ho ipotizzato che dovessero essere ancora di proprietà del precedente proprietario, quindi ho eseguito chown -Rla directory, con il mio nome utente come argomento, per diventare proprietario di tutti i file nella directory. Va notato che i nomi utente tra le nuove e vecchie installazioni di Ubuntu erano gli stessi.

Quando provo a eseguire nuovamente i file, stesso problema: errore 500 dovuto a problemi di autorizzazioni. Qualcuno può dirmi quali altri passi dovrei prendere?

Il webroot per la mia installazione di apache è nella mia cartella home. Se creo nuovi file nel mio webroot, funzionano anche come previsto, sono solo i vecchi file a causare il problema.


Non sono sicuro che i permessi dei file vengano copiati quando il file è, qualcuno può confermarlo? Altrimenti, sarebbe possibile dare i file ad un altro utente (o root) e poi recuperarli?
Tagger,

Ok, ho risolto il mio problema con i file che non venivano eseguiti, ma l'ho fatto semplicemente correndo chmod -R 777 dirsulla directory in questione. Non posso fare a meno di pensare che esiste un modo migliore di farlo
Richzilla,

3
777 autorizzazioni in un file permetteranno a tutti di scrivere i tuoi file che potrebbero causare danni alle tue pagine o hacking. Dovresti provare con 755 che è normalmente usato per i file php. Assicurati di non dover abilitare "consenti esecuzione" per un file, nel qual caso puoi eseguire chmod [nome file] -x. Informazioni sul comando chmod sono disponibili facendo clic sul collegamento seguente: catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo,

Cosa mostra il log degli errori di Apache?
Kees Cook,

Risposte:


14

Le directory sopra il tuo webroot dovrebbero avere il bit di esecuzione impostato per consentire ad Apache di scendere nelle directory.

Se avete la vostra Webroot situato a /home/user/htdocs, il /, /home, /home/usere /home/user/htdocsdovrebbe avere il set di bit di esecuzione.


La soluzione sopra "funziona", ma non è l'ideale. Se hai creato una cartella, Apache non può scrivere su di essa. Succede anche il contrario.

Questo può essere "risolto" impostando umask 0007 e aggiungendosi al gruppo Apache (www-data se non sbaglio), in modo che i file e le cartelle appena creati siano scrivibili dal gruppo.

In alternativa, puoi installare un Apache MPM alternativo: Apache2 MPM ITK ( informazioni sulla configurazione ) e regolare la configurazione in modo che Apache funzioni sotto il tuo utente.


Per istruzioni esplicite su come risolverlo, vedi la risposta di Marco di seguito
piani cottura

2
@hobs Ancora meglio, askubuntu.com/a/46371/6969
Lekensteyn

44

Se i documenti del server si trovano nella /home/$USER/public_htmldirectory, è necessario eseguirli

sudo chown -R www-data:www-data /home/$USER/public_html

per assegnare la proprietà della cartella DocumentRoot all'utente www-datae al gruppo www-data.

Quindi puoi aggiungerti al gruppo www-data

sudo adduser $USER www-data

Infine, devi rendere la cartella DocumentRoot scrivibile dal proprietario (utente www-data) e da te (come parte del www-datagruppo):

sudo chmod -R 775 /home/$USER/public_html

Per comodità, puoi creare uno script chiamato public_html_fix.shcon il contenuto:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

Salvalo all'interno /home/$USER/bine rendilo eseguibile usando:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

Quindi lo chiami quando ne hai bisogno, da qualsiasi parte del file system ti trovi a trovarti così:

public_html_fix.sh

1
ha funzionato per me ....
Emmanuel Okeke,

Bella risposta! - Con esempi e persino uno script pratico e come utilizzare / installare Eccellente!
Andre

2
Se questo viene fatto su un host condiviso, come si fa a impedire ad altri utenti del www-datagruppo di leggere i propri file o di scrivere per quella materia?
jozxyqk,

Risposta davvero fantastica ... mi hai salvato la vita
NullPoiиteя il

1
chmod -R 775 /home/$USER/public_htmldavvero terribile. find /home/$USER/public_html -type d -exec chmod 775 {} \;ed find /home/$USER/public_html -type f -exec chmod 664 {} \;è molto meglio
iharob

1

A parte i file di chmoding e la modifica dei file .conf di apache, voglio dire che nulla ha funzionato per me perché i miei file erano su una partizione che avevo montato automaticamente tramite nautilus. Ciò limita la partizione solo per l'utente.

Per verificare se i tuoi file sono visibili da www-rooto qualunque utente esegua apache (esegui ps -aux | grep apache2per verificare), esegui il comando seguente:

sudo su -l www-data -s /bin/bash

e prova a leggere un file dalla radice del documento.

Se il file non è leggibile, verificare che:

1) hai impostato tutte le altre autorizzazioni per i file

2) hai usato FollowSymlinksnei tuoi .conffile se necessario

3) hai configurato DocumentRoot

3) montare la partizione per tutti gli utenti. Ho dovuto modificare /etc/fstabe specificare la mia partizione tramite il suo UUID:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Quindi smonta la partizione tramite nautilus e fai un sudo mount -a. Se tutto va bene i tuoi file sono ora sotto /mnt. Aggiorna i tuoi symlink e sei a posto.


1

Il modo migliore che ho trovato per impostare sempre questo è il modo in cui VirtualMin lo fa.

creare utente e gruppo "myhome"

Trasforma l'utente di apache in un membro del gruppo "myhome". Non viceversa come alcune delle spiegazioni qui descritte

Quindi ora Apache ha letto ed eseguito l'accesso a / home / myhome oltre a / home / myhome / www

L'utente "myhome" ha accesso in scrittura


Mi piace questo concetto, ma non sembra funzionare per me. L'utente www-dataappartiene al gruppo myhome. Tutti i file e le directory hanno autorizzazioni di scrittura di gruppo e appartengono a myhome:myhome. Ho riavviato Apache. Apache non riesce ancora a scrivere nuovi file e cartelle. (Script PHP che utilizza www-data: www-data utente / gruppo)
squarecandy
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.