Non voglio consentire ad altri l'accesso in lettura, quindi ho aggiunto il mio utente e apache
utente a un gruppo chiamato apachme
e quindi imposta quel gruppo su tutti i file e le cartelle che voglio apache
a cui accedere, inclusa la radice della pagina web. Ho quindi concesso al gruppo e al proprietario tutte le autorizzazioni. Dopo questo Apache non può ancora accedere ai file senza impostare l'autorizzazione di lettura per consentire tutto(rwxrwxr--(0774)
).
La cartella che contiene il file di indice, è di proprietà di apache
con il gruppo apachme
e le autorizzazioni rwxrwxr-x(0775)
con questo ottengo un errore 500, cambiandolo in 0774
lo farà funzionare bene
Questi dove solo per confermare in quale utente apache era in esecuzione e che era stato aggiunto al gruppo.
Risposta accettata:
Dal punto di vista della sicurezza, non è proprio una buona idea impostare pagine web con lo stesso utente di Apache. L'utente Apache dovrebbe essere in grado di leggere le pagine web, ma non di scriverci.
Pertanto, nella configurazione standard, è normale che le strutture web siano leggibili da tutti e, quando è necessario scrivere, normalmente siano scrivibili dall'utente Apache, il che è un incubo per la sicurezza.
Una delle strategie per evitarlo è l'installazione/l'utilizzo di mod_ruid2. https://github.com/mind04/mod-ruid2
Per quanto riguarda Debian, basta fare:
apt-get install libapache2-mod-ruid2
Si prega di notare che l'utente predefinito di Apache varia con la distribuzione. In Debian è www-data, in RH/CentOS è apache e in SuSE è wwwrun. Lo chiamerò d'ora in poi come l'utente predefinito di Apache.
Se non definisci alcuna direttiva in un vhost, si comporterà in modo tradizionale; in caso contrario il comportamento verrà modificato.
L'idea è avere un processo in esecuzione nel vhost con l'utente che ha i diritti sul vhost e, in quanto tale, i file avranno quella proprietà e, come desideri, gli altri utenti non saranno in grado di leggerli. Normalmente definisci un utente per vhost.
Nelle direttive Virtualhost o Directory in un vhost, definisci l'utente e il gruppo che saranno attivi per quella directory. L'utente:gruppoutente è quello che saranno i permessi effettivi che Apache utilizzerà per accedere all'host/directory virtuale e, in quanto tale, qualsiasi utente che appartiene a quel gruppo sarà in grado di scrivere/vedere le directory.
<Directory "/vhostdir/">
RMode config
RUidGid user usergroup
....
Pertanto, durante la scrittura delle directory, ora i file possono essere creati come 660 con la proprietà di user:usergroup se sono gestiti da un gruppo di utenti. Allo stesso modo, i file possono essere creati anche da un altro utente con i permessi di lettura per il mondo; tuttavia per la scrittura, non sarà l'utente predefinito di Apache, ma piuttosto questo altro utente.
I vantaggi di mod_ruid2 sono quindi:
- in un ambiente residenziale di hosting virtuale, gli utenti non possono leggere i file di altri utenti;
- in un singolo utente, puoi ancora creare file come un altro utente, e né l'utente predefinito di Apache, né l'utente ruid2 potranno sovrascriverli
- ancora più importante, i file scritti verranno ora eseguiti con l'utente ruid2 e non più globalmente con l'utente predefinito di Apache.
Dalla pagina di github:
INFORMAZIONI su mod_ruid2 è un modulo suexec per apache 2.0, 2.2 e 2.4, basato
su mod_ruid e mod_suid2
-funziona solo su Linux perché solo il kernel Linux ha implementato le capacità di processo richieste.
-ha prestazioni migliori di mod_suid2 perché non ha bisogno di uccidere i bambini httpd dopo una richiesta. fa uso delle funzionalità del kernel
e dopo aver ricevuto una nuova richiesta suide di nuovo.
-ci sono alcuni problemi di sicurezza, ad esempio se l'attaccante sfrutta con successo il processo httpd, può impostare capacità efficaci e
setuid a root. consiglio di usare alcune patch di sicurezza nel kernel
(grsec), o qualcosa del genere..
-ci sono due modalità operative principali:stat e config
1. config è predefinito, è necessario definire uid e gid. Se non viene definito [ug]id, vengono utilizzati l'utente e il gruppo predefiniti.
- stat httpd setuid e setgid to uid e gid del nome file(script)/directory richiesto questo va bene se usi mod_vhost_alias
per l'hosting virtuale
INSTALLA
1. scarica e installa l'ultima libcap da qui
2. esegui /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c
3. configura httpd.conf
4. riavvia Apache
OPZIONI DI CONFIGURAZIONE:RMode config|stat (l'impostazione predefinita è config) RUidGid
user|#uid group|#gid – quando RMode è config, imposta questo uid e gid
Utente RMinUidGid|#uid group|#gid – quando uid/gid è
RGroups gruppo1 gruppo2 – gruppi aggiuntivi impostati tramite setgroups @none –
cancella tutti i gruppi definiti in precedenza.
RDocumentChrRoot – Imposta la directory chroot e la radice del documento all'interno
ESEMPIO:
<VirtualHost example.com>
ServerAdmin [email protected]
RDocumentChRoot /home /example.com/public_html
ServerName example.com
ServerAlias www.example.com
RMode config # unnecessary since config is the default
RUidGid user1 group1
RGroups apachetmp
<Directory /home/example.com/public_html/dir>
RMode stat </Directory>
<Directory /home/example.com/public_html/dir/test>
RMode config
RUidGid user2 group2
RGroups groups1 </Directory>
<Directory /home/example.com/public_html/dir/test/123>
RUidGid user3 group3 </Directory>
<Location /yustadir>
RMode config
RUidGid user4 user4
RGroups groups4 </Location>