Есть сервер с debian lenny на борту. На нем организован файловый сервер на самбе 3.2.5 Права на доступ к файлам и папкам задаются через acl. Каждому пользователю доступны как минимум две папки на чтение и запись: личная, куда имеет доступ только он и папка отдела, куда имеет доступ группа пользователей. Все самбовские шары расположены на одной файловой системе.Проблема возникает, когда пользователь, например, переносит файл из личной папки в общеотдельскую. Права доступа при перемещении сохраняются, и в отдельской папке появляется файл, на который группа отдела прав не имеет.
Вопрос к знатокам: можно ли сделать так, чтобы при перемещении папок/файлов права доступа не сохранялись, а наследовались от родительского каталога, куда происходит перемещение.
Сам пока что вижу единственный способ: мониторить лог самбовского full_audit, и после анализа строчек с rename переназначать права.
>[оверквотинг удален]
>Проблема возникает, когда пользователь, например, переносит файл из личной папки в общеотдельскую.
>Права доступа при перемещении сохраняются, и в отдельской папке появляется файл,
>на который группа отдела прав не имеет.
>
>Вопрос к знатокам: можно ли сделать так, чтобы при перемещении папок/файлов права
>доступа не сохранялись, а наследовались от родительского каталога, куда происходит перемещение.
>
>
>Сам пока что вижу единственный способ: мониторить лог самбовского 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 - чтение)
чтоб прочие не совали носы, куда не надо.
>на по-шарной основе.А если будет две-три сотни шар самба нормально их переварит? И постоянные samba reload посреди рабочего дня не будут сказываться на работе юзверей? И, как я понимаю, в этом варианте уже будет невозможно назначить отдельные права на подпапки внутри шары?
Сейчас у меня владельцем папок является root:root, за редким исключением, когда надо назначить квоты. Права даны 700. Сделано жесткое наследование владельца с помощью inherit owner, группы с помощью SGID и прав с помощью inherit permissions и inherit acls. Ну а конкретные права назначены уже с помощью acl, которые тоже наследуются.
Проблему решил, как и первоначально думал, написанием программки мониторинга 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 не сохраняются, а назначаются равными той папке куда переместили.
При перемещении права на файл сохраняются, а вот если копировать, то они спускаются с каталога...
Мне в обоих случаях нужно чтобы они не сохранялись.
>[оверквотинг удален]
>Проблема возникает, когда пользователь, например, переносит файл из личной папки в общеотдельскую.
>Права доступа при перемещении сохраняются, и в отдельской папке появляется файл,
>на который группа отдела прав не имеет.
>
>Вопрос к знатокам: можно ли сделать так, чтобы при перемещении папок/файлов права
>доступа не сохранялись, а наследовались от родительского каталога, куда происходит перемещение.
>
>
>Сам пока что вижу единственный способ: мониторить лог самбовского full_audit, и после
>анализа строчек с rename переназначать права.Покажи getfacl хотя бы одного отдельского каталога. Там есть строка default для группы?
Лично у меня вот такой шаблон назначения прав:
#!/bin/sh
OWNER="administrator"
GROUP="domain admins"
WGROUP="acp-write"
RGROUP="acp-read"
DIR=/samba-data/acpchmod -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
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::---