Estoy tratando de entender la diferencia de comportamiento entre las ACL de FreeBSD y las ACL de Linux. En particular, el mecanismo de herencia para las ACL predeterminadas.
Usé lo siguiente en Debian 9.6 y 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
Obtengo el siguiente resultado 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
Tenga en cuenta que los archivos outside
y inside
tienen permisos diferentes. En particular, el outside
archivo tiene -rw-r--r--
, que es el predeterminado para este usuario y el inside
archivo tiene -rw-rw----
, respetando las ACL predeterminadas que asigné al storage
directorio.
La salida del mismo script en 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
(Tenga en cuenta que Debian getfacl
también mostrará las ACL predeterminadas incluso cuando no se utiliza -d
donde no lo hace FreeBSD, pero no creo que las ACL reales storage
sean diferentes).
Aquí, los archivos outside
y inside
también tienen diferentes permisos, pero el inside
archivo no tiene el permiso de escritura grupal que tiene la versión de Debian, probablemente porque la máscara en Debian retuvo w
mientras que la máscara en FreeBSD perdió el w
.
¿Por qué FreeBSD perdió la w
máscara pero Debian la retuvo?
fuente
getfacl storage
muestra en ambos sistemas?g+s
)?getfacl
información.storage
,ls
debería mostrar+
, de manera similar, esperaría que lagetfacl
salida sea similar a la que obtuvo en el sistema Debian. ¿setfacl
Devolvió el código de salida de éxito?Respuestas:
En resumen, diría (suponga) que usan umask de manera diferente.
0022 es exactamente grupo-otro sin establecer W. Puede cambiar umask para eliminar la prohibición de escritura y verificar el resultado.
Citando Solaris, también conocido como SunOS manual (y comentarios también) ya que parece estar bastante relacionado: "... umask (1) no se aplicará si el directorio contiene entradas de ACL predeterminadas ..."
fuente
umask
, por lo que parece ser un comportamiento poco definido. ¿Se supone que la implementación de ACL de FreeBSD funciona igual que SunOS?