• Как запретить перенос ACL при перемещении папок и файлов в Linux?

    @9999_dk
    из кладовки:
    Программка мониторинга full_audit лога самбы.
    $PATH_SHARE="home/samba/shares";
    $TMP_FILE="/tmp/acl_rename.tmp";
    $TMP_FILE2="/tmp/acl_rename2.tmp";

    while ($str=)
    {

    if (index($str,"|rename|ok|")!=-1)
    {
    @ar = split(/\|/,$str);
    $share=$ar[2];
    $action=$ar[3];
    $ok=$ar[4];
    $src=$ar[5];
    $dst=$ar[6];
    chomp($dst);

    $psrc=reverse(substr(reverse($src),index(reverse($src),"/")+1,1000));
    $pdst=reverse(substr(reverse($dst),index(reverse($dst),"/")+1,1000));

    if ($psrc ne $pdst)
    {
    qx "find '/$PATH_SHARE/$share/$dst' > $TMP_FILE2";
    open(F2, $TMP_FILE2) or die "Ошибка открытия файла в acl_rename";
    @f2 = ;
    close(F2) or die "Ошибка закрытия файла в acl_rename";

    foreach $j (@f2)
    {
    chomp($j);
    $pj=reverse(substr(reverse($j),index(reverse($j),"/")+1,1000));
    qx "getfacl '$pj' > $TMP_FILE 2>/dev/null";

    open(F1, $TMP_FILE) or die "Ошибка открытия файла в acl_rename";
    @f1 = ;
    close(F1) or die "Ошибка закрытия файла в acl_rename";

    open(F1, ">$TMP_FILE") or die "Ошибка открытия файла в acl_rename";
    $f1[0] = "# file: $j\n";

    if (-d "$j")
    {
    print F1 @f1,"\n";
    }
    else
    {
    foreach $i (@f1)
    {
    if (index($i,"default:")==-1)
    {
    print F1 $i;
    }
    }
    }
    close(F1) or die "Ошибка закрытия файла в acl_rename";
    qx "cd / && setfacl --restore=$TMP_FILE";
    }
    }
    }
    }

    Запуск tail -n 0 -F /var/log/samba/full_audit.log | acl_rename.pl &

    Теперь при перемещении файла или папки внутри шары, пермишены и acl не сохраняются, а назначаются равными той папке куда переместили.
    Ответ написан
    1 комментарий