Pourquoi FreeBSD a-t-il perdu le masque w mais Debian l'a conservé?


10

J'essaie de comprendre la différence de comportement entre les ACL FreeBSD et les ACL Linux. En particulier, le mécanisme d'héritage pour les ACL par défaut.

J'ai utilisé ce qui suit sur Debian 9.6 et 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

J'obtiens la sortie suivante de 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

Notez que les fichiers outsideet insideont des autorisations différentes. En particulier, le outsidefichier a -rw-r--r--, qui est la valeur par défaut pour cet utilisateur et le insidefichier a -rw-rw----, en respectant les ACL par défaut que j'ai attribuées au storagerépertoire.

La sortie du même script sur 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

(Notez que Debian getfaclaffichera également les ACL par défaut même si vous n'utilisez pas où contrairement à -dFreeBSD, mais je ne pense pas que les ACL réelles pour storagesoient différentes.)

Ici, les fichiers outsideet insideont également des autorisations différentes, mais le insidefichier n'a pas l'autorisation d'écriture de groupe que la version Debian fait, probablement parce que le masque dans Debian a conservé le wtandis que le masque dans FreeBSD a perdu le w.

Pourquoi FreeBSD a-t-il perdu le wmasque mais Debian l'a conservé?


1
Que getfacl storagemontre- t -on sur les deux systèmes?
Mikel

Est-ce que cela fonctionne de manière identique si vous n'utilisez pas le bit de groupe collant ( g+s)?
sebasth

@Mikel J'ai mis à jour le contenu de la question d'origine pour afficher les getfaclinformations.
Roxy

@sebasth J'ai mis à jour la question d'origine pour supprimer le bit setgid. Ce n'est pas pertinent.
Roxy

Après la mise à ACL storage, ls devrait montrer+ , de même je pense getfaclsortie soit semblable à ce que vous avez sur le système Debian. Le setfaclcode de sortie de réussite a- t-il été renvoyé?
sebasth

Réponses:


1

En bref, je dirais (supposons) qu'ils utilisent umask différemment.

0022 est exactement un autre groupe non défini W. Vous pouvez modifier umask pour supprimer l'interdiction d'écriture et vérifier le résultat.

Citant le manuel de Solaris aka SunOS (et les commentaires également) car cela semble assez lié: "… L'umask (1) ne sera pas appliqué si le répertoire contient des entrées ACL par défaut.…"


1
Est-ce que l'un a raison et l'autre a tort? Existe-t-il une norme à laquelle cela est censé adhérer?
Roxy

Je ne suis pas un expert en la matière, mais (assez ironiquement) l'homme WEB de FreeBSD a une entrée pour l'implémentation "canonique" (sans doute) (SunOS) qui dit explicitement que umask ne devrait pas être compté: freebsd.org/cgi/man.cgi?query= setfacl & manpath = SunOS + 5.10
poige

"… Le umask (1) ne sera pas appliqué si le répertoire contient des entrées ACL par défaut.…"
poige

La page de manuel de FreeBSD n'est pas mentionnée umask, donc cela semble être un comportement sous-défini. L'implémentation ACL de FreeBSD est-elle censée fonctionner de la même manière que SunOS?
Roxy

Évidemment, cela ne (mentionne) pas la cause sinon il y aurait clairement une contradiction entre les choses déclarées et faites.
poige
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.