Per accedere a un file o una directory, devi avere eseguire l'accesso alla sua directory principale (e quindi a tutti i genitori sopra di esso).
Pertanto, se riesco ad accedere a "/ var / www / html", allora posso anche accedere in modo implicito a /var/www/
e /var
e /
. Ciò non significa che faccio molto con esso, però, perché il mio per qualsiasi altro sottoalbero è determinato dall'autorizzazione su tale directory.
Quindi mentre posso arrivare a /var/www/html
, ciò non significa che io possa arrivare a /var/www/docs
- dipende dalle autorizzazioni su docs
.
Ora, ecco i dettagli importanti per le autorizzazioni dei file e, una volta compreso, puoi creare un set di autorizzazioni ragionevole:
Per file
-
leggi : significa che hai accesso per aprire il file di sola lettura e accedere ai suoi contenuti
-
scrivi : significa che hai accesso per aprire un file esistente in lettura-scrittura e modificare o eliminare il suo contenuto. Ciò non significa che puoi cancellare la voce file , ma puoi troncare il file per svuotarlo o cambiarlo per dire qualcos'altro.
-
esegui : significa che hai il permesso di eseguire il file. Potresti non vederne il contenuto perché il sistema operativo leggerà il file per tuo conto e lo eseguirà per te.
Per le directory
-
leggi : significa che hai accesso a elenca i file in una directory. Potresti non avere accesso a fare nulla con loro, ma puoi almeno vedere i loro nomi, dimensioni, permessi, ecc.
-
scrivi : significa che hai accesso a modifica dell'elenco di file in una directory. Cioè, puoi creare file, cancellarli, rinominarli, ecc. Potresti non essere in grado di aprire (leggere o scrivere) alcun file esistente, ma puoi modificare l'elenco.
-
execute : significa che puoi accedere ai file o alle directory invece della directory, purché tu conosca il nome e disponga delle autorizzazioni appropriate sul file secondario o sulla directory. Puoi utilizzare la directory, ma non hai i permessi per modificare o visualizzare l'elenco dei file.
Quindi per accedere a una determinata directory figlio, tutto ciò di cui hai bisogno è il bit di esecuzione. Ad esempio, su /home/
, non è raro vedere le autorizzazioni impostate su rwx--x--x
e di proprietà di root , con le directory degli utenti impostate su rwx------
e di proprietà dell'utente. Ciò consente a ciascun utente di accedere alla propria directory, ma non può accedere o persino elencare le altre directory in /home
.
Ancora meglio
Un sistema ancora migliore, che è ancora in sviluppo ma abbastanza stabile per i primi utenti, è quello di usare i cgroup di Linux per dare ad ogni utente o sito o programma il proprio filesystem interamente. Questo viene fatto usando una combinazione di chroot
e mount --bind
e spesso unione di filesystem (come unionfs o aufs) per dare ad ogni processo l'accesso solo ai file di cui ha bisogno, senza inutili duplicazioni.
Inoltre, i cgroup consentono ai singoli processi di vivere su reti isolate con domini di memoria e socket e risorse simili. Questo crea il potenziale per ciò che sembra e agisce molto come una macchina virtuale, ma senza la macchina virtuale. Questa tecnologia sta ancora avanzando, ma è abbastanza chiaro che questa sarà la via da seguire per l'isolamento dei processi in Linux.
I progetti pertinenti che utilizzano questa tecnologia includono LXC e Docker , offre un modo molto user-friendly di configurare contenitori isolati che includono il loro intero" mondo "da una prospettiva di esecuzione (molto simile a una VM), ma senza aggiungere sovraccarico di virtualizzazione .