2011-06-07 7 views
10

Después de leer la página de manual de getfacl/setfacl No pude encontrar un método obvio/robusto/elegante para comprobar si acl está habilitado para una ruta determinada en (ba) sh .Cómo verificar si POSIX ACL está habilitado para una ruta determinada

¿Alguna sugerencia?

+0

'getfacl path; if [$? -ne 0]; luego repite "NO ACL"; fi' no funciona? –

+0

@Let_Me_Be: no, eso es exitoso incluso con un kernel sin soporte de ACL. (Traduce los bits del modo de archivo a ACL, supongo) – Mat

+0

@Mat: Exactamente. 'getfacl' indica si un acl está configurado o no. Pero no si el sistema de archivos subyacente tiene acl habilitado. –

Respuesta

4
{ 
    # Determine what the mount point for the path is: 
    MOUNT_POINT=$(df -P $FILENAME | tail -n 1 | awk '{print $6}') 
    # Get the mount options for the path: 
    MOUNT_OPTS=$(awk '$2=="'$MOUNT_POINT'" { print $4 }' /proc/mounts) 
    # Check to see if acl is one of the mount points: 
    echo $MOUNT_OPTS | tr , \\\n | grep '^acl$' -q 
    if [ $? -eq 0 ]; then 
    echo "ACLs enabled" 
    else 
    echo "ACLs disabled" 
    fi 
} 
+0

desafortunadamente esto falla en un punto de montaje nfs. –

+0

¿Qué parte no funciona? ¿La implicación de que NFS acls no se denota por la opción de montaje 'acl' o se rompe su script en NFS de alguna manera? – synthesizerpatel

+0

@Mr. Mr .: AFAIK el NFS nunca soportó ACL ... solo derechos normales de UNIX. Tal vez cambió, pero no lo creo. – TMS

Cuestiones relacionadas