Znalazłem ten przykład, zatytułowany: ACL i MASK w systemie Linux . W tym artykule pokazano następujące przykłady, które moim zdaniem pomagają zrozumieć, w jaki sposób listy ACL i umask
interakcja między nimi.
tło
Gdy plik jest tworzony w systemie Linux, 0666
stosowane są uprawnienia domyślne, a podczas tworzenia katalogu - uprawnienia domyślne 0777
.
przykład 1 - plik
Załóżmy, że ustawiliśmy nasz umask na 077 i dotknij pliku. Możemy użyć, strace
aby zobaczyć, co się właściwie dzieje, gdy to robimy:
$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile
W tym przykładzie widzimy, że wywołanie systemowe open()
jest wykonywane z uprawnieniami 0666, jednak gdy umask 077
jest ono następnie stosowane przez jądro, następujące uprawnienia są usuwane ( ---rwxrwx
) i zostajemy z rw-------
aka 0600.
przykład - katalog 2
Tę samą koncepcję można zastosować do katalogów, z tą różnicą, że zamiast domyślnych uprawnień 0666, są to 0777.
$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777) = 0
drwxr-xr-x 2 saml saml 4096 Jul 9 10:55 testdir
Tym razem używamy mkdir
polecenia. Następnie mkdir
polecenie wywołało wywołanie systemowe mkdir()
. W powyższym przykładzie widzimy, że mkdir
polecenie mkdir()
wywołało wywołanie systemowe z domyślnymi uprawnieniami 0777
( rwxrwxrwx
). Tym razem z zestawem 022
następujących uprawnień są usuwane ( ----w--w-
), więc pozostaje nam 0755 ( rwxr-xr-x
) podczas tworzenia katalogów.
przykład 3 (Stosowanie domyślnej listy ACL)
Teraz utwórzmy katalog i pokażmy, co się stanie, gdy zostanie do niego zastosowana domyślna lista ACL wraz z plikiem w niej zawartym.
$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir
$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx #effective:rwx
group::r-x #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx #effective:rwx
default:group::r-x #effective:r-x
default:mask::rwx
default:other::r-x
Teraz utwórzmy plik aclfile
:
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
Teraz uzyskaj uprawnienia do nowo utworzonego pliku:
$ getfacl --all-effective acldir/aclfile
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
Zwróć uwagę na maskę mask::rw-
. Dlaczego nie jest mask::rwx
tak, jak podczas tworzenia katalogu?
Sprawdź luvly
plik dziennika, aby zobaczyć, jakie domyślne uprawnienia zostały użyte do utworzenia pliku:
$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>
To jest trochę mylące. Gdy maska jest ustawiona na rwx
czas tworzenia katalogu, można oczekiwać takiego samego zachowania podczas tworzenia pliku, ale to nie działa w ten sposób. Jest tak, ponieważ jądro wywołuje open()
funkcję z domyślnymi uprawnieniami 0666
.
Podsumowując
- Pliki nie otrzymają uprawnień do wykonania (maskowania lub skutecznego). Nie ma znaczenia, której metody użyjemy: ACL, umask lub mask & ACL.
- Katalogi mogą uzyskać uprawnienia do wykonywania, ale zależy to od ustawienia pola maskowania.
- Jedynym sposobem na ustawienie uprawnień do wykonania dla pliku, który ma uprawnienia ACL, jest ręczne ustawienie ich za pomocą
chmod
.
Bibliografia
mask::rw-
. Ale to nie jest twoje pytanie, prawda?