The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Сохранение прав доступа при перемещении файлов, !*! danmer, 25-Окт-09, 18:42  [смотреть все]
Есть сервер с debian lenny на борту. На нем организован файловый сервер на самбе 3.2.5 Права на доступ к файлам и папкам задаются через acl. Каждому пользователю доступны как минимум две папки на чтение и запись: личная, куда имеет доступ только он и папка отдела, куда имеет доступ группа пользователей. Все самбовские шары расположены на одной файловой системе.

Проблема возникает, когда пользователь, например, переносит файл из личной папки в общеотдельскую. Права доступа при перемещении сохраняются, и в отдельской папке появляется файл, на который группа отдела прав не имеет.

Вопрос к знатокам: можно ли сделать так, чтобы при перемещении папок/файлов права доступа не сохранялись, а наследовались от родительского каталога, куда происходит перемещение.

Сам пока что вижу единственный способ: мониторить лог самбовского full_audit, и после анализа строчек с rename переназначать права.

  • Сохранение прав доступа при перемещении файлов, !*! anonimous, 19:47 , 01-Ноя-09 (1)
    • Сохранение прав доступа при перемещении файлов, !*! danmer, 08:38 , 03-Ноя-09 (2)
      >на по-шарной основе.

      А если будет две-три сотни шар самба нормально их переварит? И постоянные samba reload посреди рабочего дня не будут сказываться на работе юзверей? И, как я понимаю, в этом варианте уже будет невозможно назначить отдельные права на подпапки внутри шары?

      Сейчас у меня владельцем папок является root:root, за редким исключением, когда надо назначить квоты. Права даны 700. Сделано жесткое наследование владельца с помощью inherit owner, группы с помощью SGID и прав с помощью inherit permissions и inherit acls. Ну а конкретные права назначены уже с помощью acl, которые тоже наследуются.

      • Сохранение прав доступа при перемещении файлов, !*! danmer, 22:36 , 01-Дек-09 (3)
        Проблему решил, как и первоначально думал, написанием программки мониторинга full_audit лога самбы. На оптимальность кода не претендую, но может кому пригодится

        $PATH_SHARE="home/samba/shares";
        $TMP_FILE="/tmp/acl_rename.tmp";
        $TMP_FILE2="/tmp/acl_rename2.tmp";

        while ($str=<STDIN>)
        {

        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 = <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 = <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 не сохраняются, а назначаются равными той папке куда переместили.

  • Сохранение прав доступа при перемещении файлов, !*! tux2002, 15:52 , 24-Дек-09 (6)



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру