GNU/Linux >> Linux Esercitazione >  >> Linux

Impostazione di ACL diversi su directory e file

Come sottolinea Gilles, setfacl i permessi predefiniti specificano i permessi massimi, sostanzialmente sostituendo il umask . Quindi i file appena creati saranno rw a meno che l'applicazione che ha creato il file non abbia richiesto espressamente che fosse eseguibile.

$ 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 le permanenti effettive sopra. (Ci sono solo pochi programmi che chiederanno di impostare il bit di esecuzione sui file che crea, ad esempio gcc per gli eseguibili e cp se il file copiato era eseguibile.)

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

La mia versione di setfacl consente X esattamente 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 setfacl non lo supporta, perché non usare find ?

sovrascrivi i permessi, impostandoli 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 per il mio gruppo in base alle autorizzazioni del gruppo esistente

$ 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 '{}' ';'

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

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

setfacl g:mygroup:rwX

Estratto pertinente dal setfacl documentazione:

Il campo perms è una combinazione di caratteri che indicano i permessi:lettura (r), scrittura (w), esecuzione (x), esegui solo se il file è una directory o ha già il permesso di esecuzione per qualche utente (X) .


Per quanto ne so, Linux ACL, setfacl -Rdm g:mygroup:rwx share_name fa esattamente quello che vuoi. Esperimento:

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 utente diverso 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 di and'ing il ACL_GROUP voce per mygroup (rwx ) con la voce ACL_MASK (rw- ).

La pagina man di acl(5) spiega questo calcolo in "Algoritmi di controllo dell'accesso". Non spiega come ACL_MASK le voci vengono generate, ma in pratica sembra che accada la cosa giusta.


Linux
  1. Un modo semplice per nascondere file e directory in Linux

  2. Trova file e directory in Linux come un professionista

  3. Come archiviare file e directory in Linux [Parte 2]

  4. Trova i file e le directory più grandi in Linux

  5. Linux Elimina file e directory

Come utilizzare il comando cp per copiare file e directory

Come sincronizzare file e directory utilizzando Zaloha.sh

3 modi per trovare file e directory in Linux

Compressione e archiviazione di file e directory

Trova facilmente file e directory su Linux

File e directory predefiniti in cPanel