Общий доступ для двух локальных пользователей (Нужен совет)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Karapuzz
Сообщения: 100

Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

На десктопе два пользователя, члены одной группы. Есть определенный контент (музыка, фотки и прочее) для которого необходиом организовать общий доступ для обоих пользователей с правами на запись. При этом не только для существующего контента, но и для нового, например один из пользователей скинул фотки с фотоаппарата, второй должен иметь полный доступ на эти фотки. Игрался с acl, не помагает. Дефолтные права, установленные при помощи setfacl действительны только для создаваемых файлов, копируемые файлы наследуют права исходно. Создание раздела fat для хранения на нем контента не подходит, ибо есть файлы более 4ГГб.
Что посоветуете?
Спасибо сказали:
Sleeping Daemon
Сообщения: 1450

Re: Общий доступ для двух локальных пользователей

Сообщение Sleeping Daemon »

Karapuzz писал(а):
14.03.2009 05:16
На десктопе два пользователя, члены одной группы. Есть определенный контент (музыка, фотки и прочее) для которого необходиом организовать общий доступ для обоих пользователей с правами на запись. При этом не только для существующего контента, но и для нового, например один из пользователей скинул фотки с фотоаппарата, второй должен иметь полный доступ на эти фотки. Игрался с acl, не помагает. Дефолтные права, установленные при помощи setfacl действительны только для создаваемых файлов, копируемые файлы наследуют права исходно. Создание раздела fat для хранения на нем контента не подходит, ибо есть файлы более 4ГГб.
Что посоветуете?

Создать группу, включить этих пользователей в эту группу, создать каталог с полными правами для этой группы. Курить man для chmod.
Или ACL.
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

Sleeping Daemon писал(а):
14.03.2009 07:23
Создать группу, включить этих пользователей в эту группу, создать каталог с полными правами для этой группы. Курить man для chmod.
Или ACL.

Все это я делал, за исключением создания отдельной группы, оба пользователя и так члены одной группы. Как я писал выше, копируемые файлы сохраняют свои права, если явно не указать иное. Подробней можно почитать на opennet.ru
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Общий доступ для двух локальных пользователей

Сообщение sash-kan »

fam+fileschanged

Shell

$ cat /usr/local/bin/chchch #!/bin/bash chown mail:floppy "$2" chmod a=rwx "$2" $ ls -ld /home/share/ drwxrwxrwx 2 root root 4096 2009-03-15 02:17 /home/share/ $ sudo fileschanged -cCfr -x /usr/local/bin/chchch /home/share/ & $ touch /home/share/1 $ touch /tmp/2 $ mv /tmp/2 /home/share $ touch /tmp/3 $ cp /tmp/3 /home/share $ ll /home/share/ -rwxrwxrwx 1 mail floppy 0 2009-03-15 02:25 1 -rwxrwxrwx 1 mail floppy 0 2009-03-15 02:25 2 -rwxrwxrwx 1 mail floppy 0 2009-03-15 02:25 3 $ apt-cache -n search ^fam$ fam - File Alteration Monitor $ apt-cache -n search ^fileschanged$ fileschanged - command-line utility that reports when files have been altered
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

sash-kan писал(а):
15.03.2009 02:27
fam+fileschanged

Не знал про такое, спасибо, только вот что-то не выходит.

Код: Выделить всё

vim chch
#!/bin/bash
chmod 664 $2

chmod a+x chch

ls -l ~/1/
drwxrwxrwx    2 jura users  4096 Мар 15 11:23 1

sudo fileschanged -cCfr -x /usr/local/bin/chch ~/1/<тут пробел?>&

touch ~/1/file1
touch ~/Desktop/file2
cp file2 ~/1/
ls -l
-rw-r--r-- 1 jura users 0 Мар 15 11:27 file1
-rw-r--r-- 1 jura users 0 Мар 15 11:29 file2

И еще, как быть с файлам, в именах которых есть пробелы?

Код: Выделить всё

vim chch
#!/bin/bash
chmod 664 $1

chch Text\ File
chmod: невозможно получить доступ к `Text': Нет такого файла или каталога
chmod: невозможно получить доступ к `File': Нет такого файла или каталога
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Общий доступ для двух локальных пользователей

Сообщение KernelPanic »

Наверное сделать так:

Код: Выделить всё

#!/bin/bash
chmod 664 "$2"

Да, пробел там нужен. И использовать именно $2
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

С пробелами разобрался, спасибо. Но вот права все равно остаются rw-r--r--
И еще

Код: Выделить всё

fileschanged -cCfr -x /usr/local/bin/chch ~/1/ &
[1] 7059 //это нормально, и что значит?
jura@linux-jdbp:~ #
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Общий доступ для двух локальных пользователей

Сообщение sash-kan »

Karapuzz писал(а):
15.03.2009 12:12
это нормально, и что значит?

когда отправляете процесс в бэкграунд, то пишется его job-номер и pid.
кстати, не забывайте убивать эти процессы. а то, возможно, их у вас наплодилась уже куча.
и друг другу мешают.

для теста запустите просто в отдельном терминале
$ fileschanged -cCfr ~/1
и смотрите, будет ли он писать в stdout имена файлов, которые вы в первом терминале будете создавать/перемещать/копировать в ~/1

очень рекомендовал бы прочитать
info fileschanged
или хотя бы
man fileschanged

p.s. ну, и, насколько я понимаю, famd должен присутствовать в списке процессов (улыбка).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

Разобрался. Действительно famd не был запущен, даже скрипта /etc/rc.d/fam не было. Необходимо доставить пакет fam-server (это в opensuse 11 так). Всем спасибо большое за помощь!
И еще, немного изменил скрипт /usr/local/bin/chch

Код: Выделить всё

#!/bin/bash
find "$2" -type f -exec chmod g+rw,u+rw {} \;
find "$2" -type d -exec chmod g+rwx,u+rwx {} \;

В первом варианте не было возможности разделения файлов и каталогов, и по этому файлам приходилось присваивать права rwx, но x не нужен.
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

Ну вот, вроде все хорошо, да не очень. Как оказалось fileschanged не может справится с большим объемом данных.

Код: Выделить всё

fileschanged -cCfr /home/jura/1/
/home/jura/1/gajim
/home/jura/1/gajim/m4
/home/jura/1/gajim/m4/python.m4
/home/jura/1/gajim/m4/acinclude.m4
/home/jura/1/gajim/m4/nls.m4
/home/jura/1/gajim/test
/home/jura/1/gajim/test/lib
....
/home/jura/1/gajim/autopackage/@gnome.org/pygtk/skeleton.1
/home/jura/1/gajim/autopackage/@gtk.org
Ошибка сегментирования

Ну и права естественно не меняются. С этим можно как-то справиться?
Спасибо сказали:
Mazdader
Сообщения: 155
ОС: Debian Squeeze

Re: Общий доступ для двух локальных пользователей

Сообщение Mazdader »

А вариант с umask 002 не подходит?
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

Mazdader писал(а):
16.03.2009 09:29
А вариант с umask 002 не подходит?

Нет, при копировании надо явно права указывать, иначе они наследуются от исходного объекта
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

К чему в итоге я пришел. То что я описывал выше (это про то где хоть как-то работало) я делал на работе где стоит opensuse 11. Дома стоит opensuse 11.1. Вот тут проблема. Fam запущен. Делаю fileschanged -cCfr ~/1, кидаю в каталог 1 чего-нибудь и ни чего, ноль реакции. Поробовал заменить fam на gamin. Делаю fileschanged -cCfr ~/1 и вижу изменения в подопытном каталоге, но когда делаю fileschanged -cCfr -x /usr/local/bin/chch ~/1/ &, то скрипт /usr/local/bin/chch не выполняется. Права остаются прежними. Есть еще идеи?
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: Общий доступ для двух локальных пользователей

Сообщение Goodvin »

Karapuzz писал(а):
16.03.2009 13:16
Есть еще идеи?
Посмотреть в логи ?
Может быть там видна причина того, почему на срабатывает ?
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

Goodvin писал(а):
16.03.2009 13:41
Karapuzz писал(а):
16.03.2009 13:16
Есть еще идеи?
Посмотреть в логи ?
Может быть там видна причина того, почему на срабатывает ?

Давно бы посматрел, если бы там что-то было.
Вроде заработало. Надо было просто не закрывать консоль, в которой fileschanged запущен, иначе процесс убивается (интересно почему?). Gamin, скажу я вам работает куда стабильней fam. Ради теста скопировал в подопытный каталог небольшой набор картинок (более 600 Мб) в виде сложной иерархии каталогов и подкаталогов с файлами. Все схавал, все права раздал как надо.
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Общий доступ для двух локальных пользователей

Сообщение KernelPanic »

Потому что связан с консолью. Отвязка производится с помощью символа амперсанда в конце команды &
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Общий доступ для двух локальных пользователей

Сообщение Ленивая Бестолочь »

имхо - от закрытия графической консоли амперсанд не поможет.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Общий доступ для двух локальных пользователей

Сообщение KernelPanic »

А, ну да, тогда через развязку nohup (пример на основе команды sash-kan):

Код: Выделить всё

nohup fileschanged -cCfr -x /usr/local/bin/chchch /home/share/ > /dev/null &

Там еще вывод в /dev/null ( > /dev/null), чтоб в открытую консоль не сыпалась инфа о работе утилиты.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Общий доступ для двух локальных пользователей

Сообщение sash-kan »

Karapuzz писал(а):
16.03.2009 08:16
Ошибка сегментирования
возможно, имеет смысл увеличить timeout (см. man fileschanged).

KernelPanic писал(а):
16.03.2009 15:44
Отвязка производится с помощью символа амперсанда в конце команды &
а для надёжности неплохо ещё и stdout и stderr завернуть в /dev/null:
$ <команда> &>/dev/null &

да и вообще имеет смысл, если уж будете использовать fileschanged, прописать его запуск на нужных runlevel-ах, как для полноценного демона. из скрипта в /etc/init.d/
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

Поступил проще, положил все это дело в автозапуск kde.

Код: Выделить всё

vim ~/.kde/Autostart/fileschanged

#!/bin/bash
fileschanged -cCfr -x /usr/local/bin/chch /home/jura/Мои\ рисунки/ &

chmod a+x ~/.kde/Autostart/fileschanged

Вроде работает, но все равно как-то криво, если из каталога много чего удалить, потом права не меняются. Но это видимо косяк fileschanged, тем более что утилита с 2006 года не обновлялась. И еще, с timeout немного поигрался, не помогает.
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Общий доступ для двух локальных пользователей

Сообщение KernelPanic »

Если Ваш скрипт chch имеет вид, описанный выше, то есть:

Код: Выделить всё

#!/bin/bash
find "$2" -type f -exec chmod g+rw,u+rw {} \;
find "$2" -type d -exec chmod g+rwx,u+rwx {} \;

То он делает кучу лишних операций, так как рекурсивно работает.

Посмотрите на вызов fileschanged - там уже есть опция -r, показывающая, что нужно рекурсивно просматривать подпапки.
Другими словами. Принесли Вы на флешке папку с фотографиями. Предположим, что папка называется new-fotos, а там несколько подпапок с именами new1...new5, а внутри каждой подпапки еще несколько подпапок best1...best50, в которых сами фотки (foto1...).
то есть структура вида:

Код: Выделить всё

new-fotos
|---new1/
|   |---best1/
|   |   |---foto1.jpg
|   |   |---foto2.jpg
|   |   |   ...
|   |   |---fotoN.jpg
|   |
|   |---best2/
|   |   |---foto1.jpg
|   |   |---foto2.jpg
|   |   |   ...
|   |   |---fotoN.jpg
|   |
|   |   ...
|   |
|   |---best50/

...............

Вы берете и копируете всю папку new-fotos в Вашу папку /home/jura/Мои рисунки.
Утилита fileschanged отловила, что произошли изменения в корне папки "Мои рисунки", значит запускает на появившуюся там папку new-fotos Ваш скрипт.
Данный скрипт пробегает по всем файлам и папкам внутри папки new-fotos и производит изменения, так как утилита find работает рекурсивно в данном случае.
Далее, так как указана опция -r у утилиты fileschanged, то она также должна осуществить запуск скрипта для всех вложений внутри папки new-fotos.
И вот она видит, что в папке new-fotos у Вас есть папка new1, ну что ж значит запускает Ваш скрипт на эту подпапку. Но ведь Ваш скрипт уже произвел все изменения внутри всех подпапок папки new-fotos.
Поэтому это действие будет лишним. И так далее для всех подпапок внутри папки new-fotos, что проявляется в виде накладных расходов/временных затрат (причем затраты возрастают в несколько раз).
Как этого избежать?
Где-то нужно убрать рекурсию. Так как утилита fileschanged "мониторит", то ей рекурсия нужна, значит следует избавиться от рекурсии внутри скрипта:

Код: Выделить всё

#!/bin/bash
if   [ -d "$2" ]; then
    chmod 770 "$2"
elif [ -f "$2" ]; then
    chmod 660 "$2"
fi
В данном случае проверка на директорию/файл выполнена в условиях, что куда проще (и менее затратно) использования утилиты find.
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Общий доступ для двух локальных пользователей

Сообщение KernelPanic »

Выпадает в "Ошибка сегментрования" при копировании некоторого кол-ва небольших файлов в папках, так что костыль...
Спасибо сказали:
Karapuzz
Сообщения: 100

Re: Общий доступ для двух локальных пользователей

Сообщение Karapuzz »

KernelPanic писал(а):
17.03.2009 17:08

Код: Выделить всё

#!/bin/bash
if   [ -d "$2" ]; then
    chmod 770 "$2"
elif [ -f "$2" ]; then
    chmod 660 "$2"
fi

Вот за это большое спасибо, я не силен в скриптописании.
Выпадает в "Ошибка сегментрования" при копировании некоторого кол-ва небольших файлов в папках, так что костыль...

Да, костыли определенно есть. Думаю еще для верности в авторан прописать принудительное присвоение прав, чтоб при каждом старте системы доделывало то, что не сделал fileschanged.
Спасибо сказали: