Общий каталог для нескольких пользователей
Меня давно интересовала тема общего каталога для нескольких пользователей.
Кажется я таки нашёл пресловутый Грааль. :)
Итак, для начала установим пакет inotify-tools, а затем будем использовать inotifywait следующим образом:
inotifywait -mr --format '%w%f' \ -e close_write -e moved_to -e create \ /home/share | while read file; \ do sudo /usr/local/bin/script $file; \ done
Итак, /home/share это общий каталог, при попадании в который, любой файл или каталог должен обрести следующий параметры: принадлежать nobody:users (у меня так, хотя выбор пользователя и группы - дело индивидуальное), /usr/local/bin/script - скрипт, обрабатывающий целевой файл (каталог), следующего содержания:
#!/bin/bash chown nobody.users "$1" if [ -d "$1" ]; then chmod 770 "$1" elif [ -f "$1" ]; then chmod 660 "$1" fi
Собственно, всё. Осталось добавить строку с inotifywait в автозапуск.
Идея использования inotifywait подсмотрена на опеннете, скрипт для обработки взят у Karapuz'а.
Проверено, работает.

Грааль в данном случае это - ACL.
Монтируем файловую систему с флагом acl
Проверяем вывод mount:
/dev/sdb1 on /mnt/mybook type ext3 (rw,acl,user_xattr)
Затем создаем общую директорию:
# mkdir share
# chown nobody.users share/
# setfacl -d -m u:nobody:rwx,g:users:rwx share/
Проверим что получилось:
getfacl share/
# file: share
# owner: nobody
# group: users
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:nobody:rwx
default:group::r-x
default:group:users:rwx
default:mask::rwx
default:other::r-x
Теперь все файлы создаваемые в директории share будут принадлежать юзеру nobody и любой юзер из группы users сможет писать и редактировать файлы из этой директории.
Неплохое описание ACL и с чем его едят:
Using ACLs with Fedora Core 2
maxym комментирует...
30 Август, 2009 18:39
Проверил. Не работает.
StraNNicK комментирует...
30 Август, 2009 18:53
To maxym. ACL справедлив только для новых, ранее ни где не существовавших файлов, повторяю, только для новых. Если файл копировать или перемещать, то права остаются такие же как у исходного файла, то есть тоже копируются или перемещаются. Ни какие ALC'ы и umask'и тут не помогут.
To StraNNicK Я так понимаю, что в этом способе используется инструмент, отличный от fam (gamin), но суть такая же. А в чем преимущество?
Karapuz комментирует...
30 Август, 2009 19:24
ACL заработал, я был неправ.
Сейчас напишу как это делается.
StraNNicK комментирует...
30 Август, 2009 20:04
А я думал: чего-то мне нехватает для каталога с фотками, а оказалось нехватает того чтобы он был общим :)
StraNNicK инструкция по ALC будет или
способ maxym и так работает?
VampiRUS комментирует...
31 Август, 2009 10:43
Инструкция будет вечером, способ работает, смотри разбирательства в жуйке.
StraNNicK комментирует...
31 Август, 2009 14:14
VampiRUS, Вышеприведенный способ работает, проверил еще раз только что, но надо сделать еще:
chmod 775 share/
так как у обычных прав приоритет выше чем у ACL и сначала обрабатываются они. Подробности во вчерашнем разбирательстве в жуйке у StraNNicK
Даёшь ACL!
maxym комментирует...
31 Август, 2009 19:42
товарищи, я что-то из камментов так и не понял, всё же работает способ с ACL для новых файлов или нет? Что за жуйка такая? И вечер 31 числа уже наступил вчера, а инструкции нема ;)
ЗЫ: Для себя пока решил данную проблему созданием папки с правами рута и монтированием её каждому юзеру в home через bindfs с нужными правами (в моём случае задача усложняется тем что монтироваться она должна в том числе и по сети, а там разные базы пользователей, в результате чего на одном компе с UID 1001 один юзер, на другом - другой или вообще может не быть).
Murz комментирует...
02 Сентябрь, 2009 03:10
Скажем так - работает, но не с некоторыми ограничениями. Потому - заметки всё же не будет.
Разбирательства здесь и здесь (как раз в жуйке).
Если по сети - отчего не smbfs? Оно точно умеет принудительно юзера-группу-атрибуты выставлять.
StraNNicK комментирует...
02 Сентябрь, 2009 07:47
StraNNicK, smbfs умеет выставлять права на сервере, а мне нужно на клиенте подменять владельца файла на того кому надо, этого я так и не нашёл как там сделать.
Murz комментирует...
02 Сентябрь, 2009 14:18
Хмм... А приведённый в _этой_ заметке способ не подходит?
StraNNicK комментирует...
02 Сентябрь, 2009 18:26
Подходит, но насколько я понимаю, он тоже не очень хорошо, т.к. добавляет тормоза в работу всей системы: грузится inotifywait и следит за тем кто что куда пишет, плюс если она вдруг зависнет или вылетит - то перестанет следить.
А в моём случае получается что костыли начинают работать и тормозить систему только когда ковыряешься именно в этой папке...
Может конешно я и неправ, но с первого взгляда мне показалось что через bindfs лучше будет...
Murz комментирует...
02 Сентябрь, 2009 18:30
Unix ACL входит в один из стандартов POSIX. Для его работы должен быть установлен пакет acl и файловая система должна быть смонтирована с опцией acl. Ну и должна её поддерживать :) google:/unix acl linux сильно помогает насчёт тонкостей с маской и т. п.
ИМХО
Решение с inotify - хтонический квадратноколёсный велосипед.
/ИМХО
selivan комментирует...
05 Сентябрь, 2009 05:28
Зато работает :)
Я убил три дня на то, чтобы прикрутить ту же функциональность методом ACL. За это время выяснил, что ACL не работает с XFS совсем, а в остальных случаях - при соблюдении некоторых определённых условий.
Поскольку конечная цель - не заморачиваясь получать нужный результат - решение с inotify рулит, педалит и бибикает.
StraNNicK комментирует...
05 Сентябрь, 2009 09:33
Вот и у меня руки дошли попробовать. Работает на ура, лучше и стабильней gamin. Есть одно дополнение, переменную $file лучше взять в кавычки во избежании игнорирования файлов и каталогов, в именах которых есть пробел.
Karapuz комментирует...
19 Декабрь, 2009 16:27