URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID14
Нить номер: 2215
[ Назад ]

Исходное сообщение
"Сохранение прав доступа при перемещении файлов"

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

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

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

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


Содержание

Сообщения в этом обсуждении
"Сохранение прав доступа при перемещении файлов"
Отправлено anonimous , 01-Ноя-09 19:47 
>[оверквотинг удален]
>Проблема возникает, когда пользователь, например, переносит файл из личной папки в общеотдельскую.
>Права доступа при перемещении сохраняются, и в отдельской папке появляется файл,
>на который группа отдела прав не имеет.
>
>Вопрос к знатокам: можно ли сделать так, чтобы при перемещении папок/файлов права
>доступа не сохранялись, а наследовались от родительского каталога, куда происходит перемещение.
>
>
>Сам пока что вижу единственный способ: мониторить лог самбовского full_audit, и после
>анализа строчек с rename переназначать права.

СМ. в сторону
force directory mode = 0777
force create mode = 0777
(force group - хуже, однако)
на по-шарной основе.

в личной папке, однако, user mask 022 стоит, верно?

В домене я применяю это и владельца (группу дисковых прав) всех Самба шар - группу Domain Users - первичную группу всех моих доменных юзеров.
Но это требует кроме
write users = Group1 Group2
в каждую шару писать
valid users = Group1 Group2 Group3 (Group3 - чтение)  
чтоб прочие не совали носы, куда не надо.


"Сохранение прав доступа при перемещении файлов"
Отправлено danmer , 03-Ноя-09 08:38 
>на по-шарной основе.

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

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


"Сохранение прав доступа при перемещении файлов"
Отправлено danmer , 01-Дек-09 22:36 
Проблему решил, как и первоначально думал, написанием программки мониторинга 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 не сохраняются, а назначаются равными той папке куда переместили.


"Сохранение прав доступа при перемещении файлов"
Отправлено Сергей , 02-Дек-09 09:46 
При перемещении права на файл сохраняются, а вот если копировать, то они спускаются с каталога...

"Сохранение прав доступа при перемещении файлов"
Отправлено danmer , 02-Дек-09 11:39 
Мне в обоих случаях нужно чтобы они не сохранялись.

"Сохранение прав доступа при перемещении файлов"
Отправлено tux2002 , 24-Дек-09 15:52 
>[оверквотинг удален]
>Проблема возникает, когда пользователь, например, переносит файл из личной папки в общеотдельскую.
>Права доступа при перемещении сохраняются, и в отдельской папке появляется файл,
>на который группа отдела прав не имеет.
>
>Вопрос к знатокам: можно ли сделать так, чтобы при перемещении папок/файлов права
>доступа не сохранялись, а наследовались от родительского каталога, куда происходит перемещение.
>
>
>Сам пока что вижу единственный способ: мониторить лог самбовского full_audit, и после
>анализа строчек с rename переназначать права.

Покажи getfacl хотя бы одного отдельского каталога. Там есть строка default для группы?
Лично у меня вот такой шаблон назначения прав:


#!/bin/sh
OWNER="administrator"
GROUP="domain admins"
WGROUP="acp-write"
RGROUP="acp-read"
DIR=/samba-data/acp

chmod -R 770 $DIR
chown -R "$OWNER" $DIR
chgrp -R "$GROUP" $DIR
setfacl -R -b $DIR
setfacl -R -d -m u:"$OWNER":rwx $DIR
setfacl -R -m g::rwx $DIR
setfacl -R -d -m g::rwx $DIR
setfacl -R -m u:"clamav":rwx $DIR
setfacl -R -d -m u:"clamav":rwx $DIR
setfacl -R -m g:"$WGROUP":rwx $DIR
setfacl -R -d -m g:"$WGROUP":rwx $DIR
setfacl -R -m g:"$RGROUP":r-x $DIR
setfacl -R -d -m g:"$RGROUP":r-x $DIR



"Сохранение прав доступа при перемещении файлов"
Отправлено danmer , 24-Дек-09 18:19 
default для группы конечно же есть. Назначаются права так

chown root:gotd1 otd1
chmod 700 otd1
chmod g+s otd1
setfacl -m d:g:gotd1:rwx,g:gotd1:rwx otd1

в итоге getfacl otd1 выдает следующее:

# file: otd1
# owner: root
# group: gotd1
user::rwx
group::---
group:gotd1:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:group:gotd1:rwx
default:mask::rwx
default:other::---