Come impostare gli ACL predefiniti di Linux in modo diverso per directory e file


9

Ho alcuni ACL definiti in una directory così:

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

Vorrei che tutti i nuovi file creati in quella cartella fossero u: apache: r-- e qualsiasi nuova directory sia u: apache: rx. Come posso specificare quell'intento usando gli ACL?

Ho provato il -dm u:apache:rXe non sembra fare nulla di diverso rispetto al solorx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

L'autorizzazione X maiuscola sembra essere utile solo per l'impostazione delle autorizzazioni correnti, non per l'impostazione delle autorizzazioni predefinite:

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--

Risposte:


6

Bene, ma il tuo esempio fa esattamente quello che vuoi;)

Guarda il secondo:

overt htdocs # setfacl -dm u: apache: rx.
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# proprietario: root
# gruppo: root
user :: r--
utente: apache: rx #effettivo: r--
gruppo :: r--
mascherare :: r--
altro :: r--

La linea importante è:

user:apache:r-x #effective:r--

Anche se acl è impostato su rx è effettivamente r-- per i file. È a causa della maschera.

E la maschera sarà sempre solo rw- per i file se l'utente l'ha creata con le autorizzazioni rw- per l'utente. (Non sono sicuro al 100% ma la maschera non può essere meno restrittiva delle autorizzazioni di base).

Così efficacemente ottieni r-- per i file e rx per le directory.
Poiché le directory create avranno l'utente: rx -> maschera sarà rx -> l'autorizzazione effettiva sarà rx.
Per i file: avranno r-- quindi la maschera sarà r-- e anche le autorizzazioni effettive per gli ACL saranno r--. (Se si crea un file e gli si concede le autorizzazioni utente :: rx, la maschera verrà modificata e anche gli utenti di acl otterranno la x)


Totalmente perso il #effectivetesto! Grazie per la spiegazione di come le maschere effettuano autorizzazioni efficaci.
joshperry,

2

Sfortunatamente, non c'è proprio modo di farlo con gli ACL di Linux. È vero che la maschera sembrerà fare esattamente quello che vuoi, per quanto riguarda le autorizzazioni efficaci. Ma la prossima volta che fai un'operazione che ricalcola la maschera dei diritti, bam , tutti i tuoi file saranno resi eseguibili.

Potresti anche rassegnarti e aspettarti che tutti i file in un ACL siano eseguibili. Questa è davvero solo una comodità piuttosto che una funzione di sicurezza, e fintanto che non metterai quelle cartelle nel tuo $ PATH, non dovrebbe essere un problema. Se ti dà ancora fastidio, l'unica scelta è quella di mettere le tue cartelle controllate ACL su un file system montato senza alcuna opzione di esecuzione.


1

-d (o --default) è usato per impostare i valori predefiniti nella directory in modo che le cose create in essa ereditino i permanenti (come sembra stiate facendo).

Ecco una rapida panoramica. http://www.vanemery.com/Linux/ACL/linux-acl.html#default

Non è possibile avere file con un valore predefinito e le directory hanno un valore predefinito diverso.

Potresti eseguire uno script da cron che esegue un setfacl su tutte le directory ogni minuto, anche se è meno ideale di una soluzione.

find / path / to / top / dir -type d -exec setfacl -dm u: apache: rx {} \;

o

find / path / to / top / dir -type d | xargs setfacl -dm u: apache: rx


1

Questo post su ACL e maschere mi ha davvero aiutato a capire come fare quello che volevo e perché.

La parte mancante della mia comprensione era che durante la creazione di un file il kernel utilizza un set di autorizzazioni predefinito di 0666 e per le nuove directory 0777. Quindi, per impostazione predefinita, le directory avranno il set di bit di esecuzione (traverse).

La maschera ACL è sostanzialmente un modo per impostare a umaska livello di directory / file / utente.

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.