Perché FreeBSD ha perso la maschera w ma Debian l'ha conservata?


10

Sto cercando di capire la differenza di comportamento tra ACL di FreeBSD e ACL di Linux. In particolare, il meccanismo di ereditarietà per gli ACL predefiniti.

Ho usato quanto segue sia su Debian 9.6 sia su FreeBSD 12:

$ cat test_acl.sh
#!/bin/sh

set -xe

mkdir storage
setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage

touch outside
cd storage
touch inside
cd ..

ls -ld outside storage storage/inside

getfacl -d storage
getfacl storage
getfacl outside
getfacl storage/inside

umask

Ottengo il seguente output da Debian 9.6:

$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r--  1 aaa aaa    0 Dec 28 11:16 outside
drwxr-xr-x+ 2 aaa aaa 4096 Dec 28 11:16 storage
-rw-rw----+ 1 aaa aaa    0 Dec 28 11:16 storage/inside

+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---

+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::---

+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--

+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx          #effective:rw-
mask::rw-
other::---

+ umask
0022

Si noti che i file outsidee insidehanno autorizzazioni diverse. In particolare, il outsidefile ha -rw-r--r--, che è l'impostazione predefinita per questo utente e il insidefile ha -rw-rw----, rispettando gli ACL predefiniti che ho assegnato alla storagedirectory.

L'output dello stesso script su FreeBSD 12:

$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r--  1 aaa  aaa    0 Dec 28 03:16 outside
drwxr-xr-x  2 aaa  aaa  512 Dec 28 03:16 storage
-rw-r-----+ 1 aaa  aaa    0 Dec 28 03:16 storage/inside

+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---

+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x

+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--

+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx      # effective: r--
mask::r--
other::---

+ umask
0022

(Nota che Debian getfaclmostrerà anche gli ACL predefiniti anche quando non usa -ddove FreeBSD non lo fa, ma non credo che gli ACL effettivi storagesiano diversi.)

Qui, i file outsidee insidehanno anche permessi diversi, ma il insidefile non ha il permesso di scrittura di gruppo della versione Debian, probabilmente perché la maschera in Debian ha mantenuto il wmentre la maschera in FreeBSD ha perso il w.

Perché FreeBSD ha perso la wmaschera ma Debian l'ha conservata?


1
Cosa getfacl storagemostra su entrambi i sistemi?
Mikel,

Funziona in modo identico se non si utilizza il bit di gruppo appiccicoso ( g+s)?
sebasth,

@Mikel Ho aggiornato il contenuto della domanda originale per mostrare le getfaclinformazioni.
Roxy,

@sebasth Ho aggiornato la domanda originale per rimuovere il bit setgid. È irrilevante.
Roxy,

Dopo aver impostato ACL su storage, ls dovrebbe mostrare+ , allo stesso modo mi aspetto che l' getfacloutput sia simile a quello che hai sul sistema Debian. È stato setfaclrestituito il codice di uscita riuscito?
sebasth,

Risposte:


1

In breve, direi (presumo) che stanno usando umask in modo diverso.

0022 è esattamente un altro gruppo non impostato W. È possibile cambiare umask per rimuovere il divieto di scrittura e controllare il risultato.

Citando Solaris aka manuale SunOS (e anche commenti) poiché sembra essere abbastanza correlato: "... umask (1) non verrà applicato se la directory contiene voci ACL predefinite ..."


1
Uno è giusto e l'altro è sbagliato? Esiste uno standard a cui questo dovrebbe aderire?
Roxy,

Non sono un esperto in questo, ma (ironicamente) l'uomo WEB di FreeBSD ha una voce per l'implementazione "canonica" (senza dubbio) (SunOS) che dice esplicitamente che umask non dovrebbe essere conteggiato: freebsd.org/cgi/man.cgi?query= setfacl & manpath = SunOS + 5.10
poige

"... L'umask (1) non verrà applicato se la directory contiene voci ACL predefinite. ..."
poige

La pagina man di FreeBSD non è menzionata umask, quindi questo sembra essere un comportamento sotto definito. L'implementazione ACL di FreeBSD dovrebbe funzionare allo stesso modo di SunOS?
Roxy,

Ovviamente non (menziona) perché altrimenti sarebbe chiaramente vista la contraddizione tra le cose dichiarate e fatte.
poige
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.