Por ejemplo, quiero darles a mis colegas acceso de escritura a cierto directorio. Supongamos que los subdirectorios en él tenían derechos de acceso 775, archivos 664, y también había algunos archivos ejecutables en el directorio - 775.
Ahora quiero agregar permisos de escritura. Con chmod, podría intentar algo como
chmod o+w -R mydir/
Pero eso no es bueno, ya que no quiero hacer que el directorio sea editable en todo el mundo, quiero dar acceso solo a ciertos usuarios, así que quiero usar ACL. ¿Pero hay una manera fácil de establecer esos permisos? Tal como lo veo, necesito abordar al menos tres casos (directorios, archivos, archivos ejecutables) por separado:
find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;
Parecen bastantes líneas de código para una tarea tan simple. ¿Hay una mejor manera?
fuente
-X
no funciona como se esperaba incluida ensetfacl 2.2.49
.Como mencionó umläute, el comando
setfacl -R
con mayúscula "X" es el camino a seguir, como:Sin embargo, para aquellos que necesitan volver a aplicar ACL de forma recíproca (es decir, como "volver a aplicar permisos en subdirectorios" a la Windows).
Ese comando podría dividirse para evitar errores como
setfacl: foobar: Only directories can have default ACLs
.Tenga en cuenta que la sintaxis
<( something )
es la sustitución de procesos , que es específica de bash. Es posible que deba crear un archivo temporal si usa otro shell.fuente
fuente
for i in $(find …)
.find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
$(find /data -mindepth 0 -type d)
no devolverá resultados línea por línea, almacenará los resultados completos. Si hay un espacio en una línea, obtendrá un registro incorrecto en la$i
variable.