Tengo algunas ACL definidas en un directorio así:
# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--
Me gustaría que cualquier archivo nuevo creado en esa carpeta sea u: apache: r-- y que los directorios nuevos sean u: apache: rx. ¿Cómo especifico esa intención usando ACL?
He probado el -dm u:apache:rX
y no parece hacer nada diferente en comparación con solorx
overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--
overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x #effective:r--
group::r--
mask::r--
other::r--
overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x #effective:r--
group::r--
mask::r--
other::r--
El permiso X mayúscula solo parece ser útil para configurar los permisos actuales, no para configurar los permisos predeterminados:
overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--
overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--
fuente
#effective
texto! Gracias por la explicación de cómo las máscaras efectúan permisos efectivos.Desafortunadamente, simplemente no hay forma de hacer esto con las ACL de Linux. Es cierto que la máscara parecerá hacer exactamente lo que desea, en lo que respecta a los permisos efectivos. Pero la próxima vez que realice una operación que recalcule la máscara de derechos, bam , todos sus archivos serán ejecutables.
También podría resignarse a esperar que todos los archivos en una ACL sean ejecutables. Eso es realmente solo una conveniencia más que una característica de seguridad, y siempre que no coloque esas carpetas en su $ PATH, no debería ser un problema. Si todavía le molesta, la única opción es colocar sus carpetas controladas por ACL en un sistema de archivos montado sin opción de ejecución.
fuente
-d (o --default) se usa para establecer los valores predeterminados en el directorio para que las cosas creadas en él hereden los permisos (como parece estar haciendo).
Aquí hay un resumen rápido. http://www.vanemery.com/Linux/ACL/linux-acl.html#default
No es posible tener archivos con un valor predeterminado y los directorios tienen un valor predeterminado diferente.
Podrías ejecutar un script fuera de cron que haga un setfacl en todos los directorios cada minuto, aunque eso es menos que ideal para una solución.
buscar / ruta / a / top / dir-tipo d -exec setfacl -dm u: apache: rx {} \;
o
find / path / to / top / dir -type d | xargs setfacl -dm u: apache: rx
fuente
Esta publicación sobre ACL y máscaras realmente me ayudó a comprender cómo hacer lo que quería y por qué.
La parte que faltaba de mi comprensión era que, al crear un archivo, el núcleo utiliza un conjunto de permisos predeterminado de 0666 y para los nuevos directorios 0777. Por lo tanto, los directorios predeterminados tendrán el conjunto de bits de ejecución (transversal).
La máscara ACL es básicamente una forma de establecer un nivel
umask
de directorio / archivo / usuario.fuente