PDA

View Full Version : Gestione permessi utente Apache


VegetaSSJ5
31-01-2012, 12:56
Salve a tutti!
Ho un server web con Debian 6.0 con installato Apache come web server. L'utente che lancia il processo apache è www-data.
Ho la mia cartella /var/www con le varie sottocartelle (una per dominio virtuale). La situazione è la seguente:
- il proprietario di ogni cartella (e ricorsivamente al loro interno) dipende dall'utente che voglio farci scrivere (supponiamo siano utente1 e utente2);
- il gruppo di appartenenza di ogni cartella (e ricorsivamente al loro interno) è fisso per tutti, cioè utente1;

Ho settato i permessi in modo tale che ogni cartella (e ricorsivamente) abbia i seguenti permessi:
drwxrwx--- utente1 utente1 nome_cartella1
drwxrwx--- utente2 utente1 nome_cartella2

Ho aggiunto l'utente www-data al gruppo utente1, quindi teoricamente l'utente di apache ha tutti i permessi nelle cartelle in questione, perchè i permessi per il gruppo utente1 sono rwx.
Purtroppo però lasciando i permessi così apache mi risponde che l'accesso è negato. Per visualizzare correttamente i siti devo impostare (ricorsivamente) i permessi come segue:

drwxrwxr-x utente1 utente1 nome_cartella1

Cioè devo aggiungere r-x nei permessi relativi agli altri utenti. Ma perchè questo?
Grazie a chi saprà darmi una mano!

eaman
31-01-2012, 17:14
Considerazioni sparse:
- gli utenti non scrivono in /var/www/ ma nelle loro /homes : i virtual host risiedono quindi nelle homes degli utenti se no poi impazzisci con FTP o qualunque sistema di deploy

- i file html sono per loro natura leggibili a tutti, quindi tutti i tuoi ragionamenti su utenti e gruppi non hanno senso: sono file leggibili a tutti www-data compreso

- se ti garba metti in /etc/fstab noexec nosuid sul filesystem che monti per le home.

On topic: ti e' noto che execute per una directory serve per permettere il traversing (anche il directory listing) e non l'eseguibilita' [1], quindi le maschere per directory e files (e di coseguenza i permessi) sono diversi per avere un a+r ?

1. http://www.hackinglinuxexposed.com/articles/20030424.html

VegetaSSJ5
31-01-2012, 17:48
eaman grazie per le tue considerazioni.
Probabilmente non ho spiegato bene cosa ho intenzione di fare.
in /var/www ci sono tutti i virtual host che il mio utente (utente1) può gestire tutti, infatti le directory dei singoli vhosts sono di proprietà del mio gruppo (gruppo di nome utente1). Alcuni di questi però devono essere amministrati anche da un altro utente (utente2). Per questi qui ho impostato come proprietario l'utente in questione (utente2).
Se mettessi i vhost nelle homes degli utenti ovviamente non potrei fare questo perchè se metto qualcosa nella home di utente2, il proprietario di tutto (utente1) non potrebbe vedere quei vhosts.

I files php non sono nel mio caso leggibili a tutti. In alcuni ci sono delle credenziali di accesso al db che non voglio che utente2 venga a sapere.

VegetaSSJ5
31-01-2012, 19:37
Ora ho reimpostato i permessi, riavviato il server e sembra funzionare correttamente. Mah... :D

eaman
31-01-2012, 21:54
Guarda la parte importante si era capita: vuoi dare accesso a /var/www a degli utenti di sistema.

On topic: le GUID almeno vengono onorate alla apertura delle sessioni (diciamo che basta serve un nuovo log-in).

Good Luck

VegetaSSJ5
01-02-2012, 12:05
On topic: le GUID almeno vengono onorate alla apertura delle sessioni (diciamo che basta serve un nuovo log-in).
eaman cosa intendi con questa frase? Che mi sarebbe bastato fare un nuovo login per rendere tutto funzionante? O qualcomeno un nuovo login non a me ma a www-data? E' per questo che ha funzionato solo dopo il riavvio?

eaman
01-02-2012, 15:00
eaman cosa intendi con questa frase? Che mi sarebbe bastato fare un nuovo login per rendere tutto funzionante? O qualcomeno un nuovo login non a me ma a www-data? E' per questo che ha funzionato solo dopo il riavvio?

Per gli utenti di sistema le GUID vengono lette appunto con una nuova sessione, non mi ricordo esattamente quando ma se non sbaglio non basta rilanciare la shell (es una nuova bash in un xterm) ma serve un nuovo log-in, ad es. in grafica rilanciare l'intera sessione (kdm/gdm).

Per apache bisognerebbe fare delle prove, vedere anche chi lo lancia (se un utente o inetd o simile).

Ricordo che c'era questa menata che sta' un po' "piu' in alto" della shell...

Cercherei su google: GUID getty login