GNU/Linux >> Znalost Linux >  >> Linux

Nastavení různých ACL na adresáře a soubory

Jak Gilles zdůrazňuje, setfacl výchozí oprávnění určují maximální oprávnění a v podstatě nahrazují umask . Nově vytvořené soubory tedy budou mít rw pokud aplikace, která soubor vytvořila, o to speciálně nepožádala, aby byl spustitelný.

$ 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--

Všimněte si výše uvedených účinných povolení. (Existuje jen několik programů, které budou žádat o nastavení bitu spuštění u souborů, které vytvoří, např. gcc pro spustitelné soubory a cp pokud byl kopírovaný soubor spustitelný.)

Nebo jsi chtěl říct, že první příkaz setfacl fungoval tak, jak jsi chtěl, ale druhý ne? Jinými slovy, chcete opravit oprávnění ke starým souborům a zajistit, aby bylo možné procházet adresáře, aniž byste udělovali jiným běžným souborům oprávnění ke spuštění?

Moje verze setfacl umožňuje X přesně tak, jak chcete, např.:

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

Pokud je vaše verze setfacl to nepodporuje, proč nepoužít find ?

přepsat oprávnění a nastavit je na rw pro soubory a rwx pro adresáře

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

nastavte oprávnění mygroup ACL na základě stávajících skupinových oprávnění

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

Pravděpodobně budete chtít zkontrolovat, zda maska ​​skupiny poskytuje účinná oprávnění. Pokud ne, budete muset spustit také toto:

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

Pro budoucí čtenáře použijte setfacl na existující soubory/složky bez přidání spustitelného bitu do vašich souborů, řešením je tato část odpovědi @Mikel:

Moje verze setfacl umožňuje X přesně tak, jak chcete, např.:

setfacl g:mygroup:rwX

Příslušný výňatek z setfacl dokumentace:

Pole perms je kombinací znaků, které označují oprávnění:číst (r), zapisovat (w), spouštět (x), spouštět pouze v případě, že soubor je adresář nebo již má oprávnění ke spuštění pro některého uživatele (X) .


Pokud rozumím linuxovým ACL, setfacl -Rdm g:mygroup:rwx share_name dělá přesně to, co chcete. Experiment:

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

Poté jako jiný uživatel ve skupině mygroup :

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

Co se děje?

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

Efektivní ACL pro mygroup je výsledkem and'ing ACL_GROUP záznam pro mygroup (rwx ) se záznamem ACL_MASK (rw- ).

Manuálová stránka acl(5) vysvětluje tento výpočet v části „Algoritmy kontroly přístupu“. Nevysvětluje, jak ACL_MASK záznamy jsou generovány, ale v praxi se zdá, že se děje správná věc.


Linux
  1. Snadný způsob, jak skrýt soubory a adresáře v Linuxu

  2. Jak archivovat soubory a adresáře v Linuxu [část 2]

  3. Najděte největší soubory a adresáře v Linuxu

  1. Jak kopírovat soubory a adresáře v Linuxu

  2. Najděte soubory a adresáře v Linuxu jako profík

  3. Linux Odstraňte soubory a adresáře

  1. Najít příkaz v Linuxu (Najít soubory a adresáře)

  2. Jak přejmenovat soubory a adresáře v Linuxu

  3. Příkaz Ls v Linuxu (seznam souborů a adresářů)