Impostazione di ACL diversi su directory e file


15

Voglio impostare le autorizzazioni predefinite per una condivisione file in modo che tutti possano accedere a rwxtutte le directory e che tutti i file appena creati lo siano rw.

Tutti coloro che accedono a questa condivisione fanno parte dello stesso gruppo, quindi questo non è un problema.

Ho cercato di farlo tramite ACL senza cambiare tutte le umask degli utenti e così via. Ecco le mie attuali invocazioni:

setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name

Il mio problema è che mentre voglio che tutti gli appena creati sotto-directory di essere rwx, voglio solo appena create file di essere rw.

Qualcuno ha un metodo migliore per raggiungere il risultato finale desiderato? C'è un modo per impostare ACL su directory separatamente dai file, in modo simile a chmod +xvs. chmod +X?

Grazie

Risposte:


12

Come sottolinea Gilles, le setfaclautorizzazioni predefinite specificano le autorizzazioni massime, sostanzialmente sostituendo il umask. Quindi i file appena creati saranno a rwmeno che l'applicazione che ha creato il file non abbia richiesto espressamente l'esecuzione.

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

Nota i permessi effettivi sopra. (Esistono solo alcuni programmi che chiederanno di impostare il bit di esecuzione sui file che crea, ad esempio gccper gli eseguibili e cpse il file da copiare era eseguibile.)

O intendevi dire che il primo comando setfacl funzionava come volevi, ma il secondo no? In altre parole, stai cercando di sistemare le autorizzazioni sui vecchi file, assicurandoti che le directory siano percorribili, senza dare ad altri file regolari autorizzazioni di esecuzione?

La mia versione di setfaclconsente Xesattamente come vuoi, ad esempio:

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

Se la tua versione di setfaclnon lo supporta, perché non utilizzarla find?

sovrascrivere le autorizzazioni, impostandole su rw per i file e rwx per le directory

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

imposta le autorizzazioni ACL mygroup in base alle autorizzazioni di gruppo esistenti

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

Probabilmente vorrai verificare che la maschera di gruppo fornisca autorizzazioni efficaci. In caso contrario, dovrai eseguire anche questo:

$ find . -type d -exec chmod g+rwX '{}' ';'

4

Per i futuri lettori, da utilizzare setfaclsu file / cartelle esistenti senza aggiungere il bit eseguibile ai file, la soluzione è questa parte della risposta di @ Mikel :

La mia versione di setfacl consente a X esattamente come vuoi, ad esempio:

setfacl g:mygroup:rwX

Estratto pertinente dalla setfacldocumentazione :

Il campo permanente è una combinazione di caratteri che indicano i permessi: read (r), write (w), execute (x), esegui solo se il file è una directory o ha già i permessi di esecuzione per alcuni utenti (X) .


2

Per quanto ho capito ACL Linux, setfacl -Rdm g:mygroup:rwx share_namefa esattamente quello che vuoi. Sperimentare:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

Quindi come un diverso utente nel gruppo mygroup:

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

Cosa sta succedendo?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

L'ACL effettivo per mygroupè il risultato e l' ACL_GROUPinserimento della voce per mygroup( rwx) con la voce ACL_MASK ( rw-).

La pagina man acl (5) spiega il calcolo in "Algoritmi di controllo degli accessi". Non spiega come ACL_MASKvengono generate le voci, ma in pratica sembra che accada la cosa giusta.

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.