Задать вопрос
@Elphet92
Системный администратор

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

Товарищи, очень нужна ваша мудрость. Досталась мне под командование сетевая файловая шара на Линухе. До этого с ними дела толком не имел, сейчас подразобрался но уперся в одну проблему. Условно, есть у меня ACL на папке d:u:group1:rwx и всё что в ней создается или в неё копируется - отлично отрабатывают по всем установленным правам. Но стоит пользователю перетащить что-то в неё дропом - сохраняются ВСЕ старые ACL и + добавляются нужные от вышеуказанной папки. Из-за этой фичи не получается нормально разграничить права доступа к ресурсам :( И вот вопрос: как запретить старые ACL при перемещении файоа в папку, что бы всё что было прописано setfacl удалялось и переписывалось заново, новыми?
  • Вопрос задан
  • 484 просмотра
Подписаться 9 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
@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 не сохраняются, а назначаются равными той папке куда переместили.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы