Начну по порядку. На десктопе стоит OpenSUSE 11 kernel 2.6.25.5, ФС - ext3. Есть два
пользователя (А и В) и оба состоят в группе users. В домашнем каталоге
пользователя А есть каталог "Моя музыка" для которого (и всего его
содержимого) необходимо сделать полный доступ для пользователей А и В, при
этом вновь создаваемые файлы и каталоги автоматически должны получать теже
права.
Я поступил следующим образом:
>find моя\ музыка -type d -exec chmod g+rwx {} \;
>find моя\ музыка -type f -exec chmod g+rw {} \;
>find моя\ музыка -type d -exec setfacl -m default:user::rwx {} \;
>find моя\ музыка -type d -exec setfacl -m default:mask:rwx {} \;Что я получил в итоге? Getfacl моя\ музыка выдает:
>user::rwx
>group::rwx
>other::r-x
>default:user::rwx
>default:group::rwx
>default:mask::rwx
>default:other::r-xТоже и для существующих каталогов внутри "Моя музыка" и для внось создаваемых
каталогов.Для создаваемых внутри "Моя музыка" файлов getfacl выдает:
>user::rw-
>group::rwx #effective:rw-
>mask::rw-
>other::r--А вот если файл скопировать, (не важно кто из А и В копирует и чей файл) то:
>user::rw-
>group::rwx #effective:r--
>mask::r--
>other::r--В итоге полный доступ к файлу имеет только владелец, оставльные члены группы
обламываются (mask::r--). Хочу обратить внимание, что если копировать каталог, то ему
присваиваются теже права, что и на "Моя музыка", не работает именно с
файлами.
Пробывал umask 002, не помагает. Пробывал chmod -R g+s, тоже не помагает.
Подскажите пожалуйста, может я что-то не учел при раздаче прав, и как можно
решить мою проблему? Спасибо за ответ.
Вы бы сформулировали чего хотите, а не перечисляли что пробовали. Пока не увидел ничего что нельзя было бы решить стандартными юниксовыми правами, без всяких ACL.
>Вы бы сформулировали чего хотите, а не перечисляли что пробовали. Пока не
>увидел ничего что нельзя было бы решить стандартными юниксовыми правами, без
>всяких ACL.Я хочу чтоб копируемому в каталог "Моя музыка" файлу автоматически присваивались права rw-rw-r--. На практике такие права присваиваются только создаваемому.
Я так и не смог найти решение. Подскажите куда копать?
>Я так и не смог найти решение. Подскажите куда копать?-dm
>-dmа чем опция -dm отличается от -m default:итд?
setfacl -dm user::rwx и setfacl -m default:user::rwx дает один и тот же результат.
>>Вы бы сформулировали чего хотите, а не перечисляли что пробовали. Пока не
>>увидел ничего что нельзя было бы решить стандартными юниксовыми правами, без
>>всяких ACL.
>
>Я хочу чтоб копируемому в каталог "Моя музыка" файлу автоматически присваивались права
>rw-rw-r--. На практике такие права присваиваются только создаваемому.Факт простого копирования в какой-то каталог не означает что пользователь хочет его расшарить, утилита копирования не телепат, надо явно сказать какие права ставить, например используя утилиту install вместо cp, ну или связку cp file1 file2 && chmod 664 file2
>Факт простого копирования в какой-то каталог не означает что пользователь хочет его
>расшарить, утилита копирования не телепат, надо явно сказать какие права ставить,
>например используя утилиту install вместо cp, ну или связку cp file1
>file2 && chmod 664 file2А разве setfacl -m default не является явным указанием прав? Тем более копируемому каталогу присваиваются нужные мне права автоматом, не работает именно с файлами. Такое поведение мне не понятно. Возможно такая политика связана с безопасностью, кто знает что там за файл, но это лишь мои догадки.
>А разве setfacl -m default не является явным указанием прав? Тем более
>копируемому каталогу присваиваются нужные мне права автоматом, не работает именно с
>файлами. Такое поведение мне не понятно. Возможно такая политика связана с
>безопасностью, кто знает что там за файл, но это лишь мои
>догадки.логи действий в студию:
атрибуты и acl копируемого каталога, атрибуты и acl целевого каталога, umask, команда копирования, ls -l и getfacl на все до и после.
>логи действий в студию:
>атрибуты и acl копируемого каталога, атрибуты и acl целевого каталога, umask, команда
>копирования, ls -l и getfacl на все до и после.ok, поехпли. Создаю каталог ~/1
ls -l
>drwxr-xr-x 2 jura users 4096 Мар 12 19:57 1getfacl 1
># file: 1
># owner: jura
># group: users
>user::rwx
>group::r-x
>other::r-xumask
>0022Далее присваиваю права
>chmod g+rwx 1
>setfacl -m default:group::rwx 1
>setfacl -m default:mask:rwx 1Смотрим что получилось
getfacl 1
>group::rwx
>other::r-x
>default:user::rwx
>default:group::rwx
>default:mask::rwx
>default:other::r-xumask
>0022ls -l
>drwxrwxr-x+ 2 jura users 4096 Мар 12 20:11 1Теперь копируем файл и каталог. Так как это десктоп и пользуюсь не только я, но и жена, то копирование делается средствами DE, точнее kde.
Копируем каталог folder в каталог 1 и смотрим что получилось.
getfacl folder
>group::rwx
>group:users:rwx
>mask::rwx
>other::r-x
>default:user::rwx
>default:group::rwx
>default:mask::rwx
>default:other::r-xls -l
>drwxrwxr-x+ 2 jura users 4096 Мар 12 20:22 folderЕсли копировать cp -r folder ~/1, то
getfacl folder
>user::rwx
>group::rwx #effective:r-x
>mask::r-x
>other::r-x
>default:user::rwx
>default:group::rwx
>default:mask::rwx
>default:other::r-xls -l
>drwxr-xr-x+ 2 jura users 4096 Мар 12 20:55 folderumask для folder в обоих случаях дает 0022
Копируем файл cp file ~/1 или при помощи DE, не важно, результат один
getfacl file
># file: file
># owner: jura
># group: users
>user::rw-
>group::rwx #effective:r--
>mask::r--
>other::r--umask
>0022ls -l
>-rw-r--r--+ 1 jura users 2 Мар 12 20:52 file
а теперь ls -l и getfacl еще и для исходного folder, плз, а то только результат привели, но не исходные атрибуты.
>а теперь ls -l и getfacl еще и для исходного folder, плз,
>а то только результат привели, но не исходные атрибуты.Да, прошу прощения.
ls -l
>drwxr-xr-x 2 jura users 4096 Мар 12 21:36 foldergetfacl folder
># file: folder
># owner: jura
># group: users
>user::rwx
>group::r-x
>other::r-xumask
>0022И для исходного file
ls -l
>-rw-r--r-- 1 jura users 2 Мар 12 21:40 filegetfacl file
># file: file
># owner: jura
># group: users
>user::rw-
>group::r--
>other::r--
ок, убедились в исходных атрибутах.теперь сравним результат копирования для каталога с помощью DE и с помощью cp:
DE:
>ls -l
>drwxrwxr-x+ 2 jura users 4096 Мар 12 20:22 foldercp:
>ls -l
>drwxr-xr-x+ 2 jura users 4096 Мар 12 20:55 folderDE в отличии от cp действует как-то своеобразно, не устанавливая атрибуты исходного каталога для скопированного, да-да, это не автоматика, а такая работа кода DE. Поэтому мы видим w для группы. Видимо программисты DE что-то делают не так.
теперь сравним acl атрибуты:
DE добавляет новую запись group:users:rwx к скопированному каталогу, а его просили?
cp этого не делает, и getfacl дает коммент #effective:r-x, т.е. с учетом маски эффективный режим доступа r-x. Что логично, т.к. открывать доступ к объекту следует явно во избежание неожиданностей.дефолтовые атрибуты используются только для каталогов, они не применимы к файлам.
ЗЫ Представьте себе ситуацию в которой файл дважды скопирован (через некий каталог с "автоматическим" изменением атрибутов). Каково будет удивление владельца файла если права rw-r--r-- превратятся волшебным образом в rw-rw-rw- после копирования? Поэтому политика такова что целевой файл должен получать атрибуты исходного (если явно не сказано иное), или более урезанные согласно маске.
Спасибо Вам за пояснения, теперь стало понятней. Но как же мне быть? Выносить общее для обоих пользователей на fat, а как же dvd исошки более 4 ГГб? Сказать жене "копируй фотографии с фотоаппарата вот этой командой а не удобной digikam", тоже не выход. Дать крону задачу, чтоб делал периодически find folder -type -f -exec chmod g+rw {} \; вообще изврат. Больше пока ни чего не придумал :)
>Спасибо Вам за пояснения, теперь стало понятней. Но как же мне быть?
>Выносить общее для обоих пользователей на fat, а как же dvd
>исошки более 4 ГГб? Сказать жене "копируй фотографии с фотоаппарата вот
>этой командой а не удобной digikam", тоже не выход. Дать крону
>задачу, чтоб делал периодически find folder -type -f -exec chmod g+rw
>{} \; вообще изврат. Больше пока ни чего не придумал :)
>а как монтируется фляшка? какая маска у digikam? могет поправить там, чтобы файлы сразу rw-rw-r-- были?
>файлами.
>Пробывал umask 002, не помагает. Пробывал chmod -R g+s, тоже не помагает.Я поборол проблему так: Перед тем, как что либо сделать, в самом начале скрипта я объявляю umask 002, дальше уже работаю.
umask действует только в рамках сессии.Или Вы про другое?
>>файлами.
>>Пробывал umask 002, не помагает. Пробывал chmod -R g+s, тоже не помагает.
>
>Я поборол проблему так: Перед тем, как что либо сделать, в самом
>начале скрипта я объявляю umask 002, дальше уже работаю.
>umask действует только в рамках сессии.
>
>Или Вы про другое?Да, про другое. Попробуйте скопировать файл с диска в каталог с umask 002. Права у файла останутся r--r--r--
>[оверквотинг удален]
>>>Пробывал umask 002, не помагает. Пробывал chmod -R g+s, тоже не помагает.
>>
>>Я поборол проблему так: Перед тем, как что либо сделать, в самом
>>начале скрипта я объявляю umask 002, дальше уже работаю.
>>umask действует только в рамках сессии.
>>
>>Или Вы про другое?
>
>Да, про другое. Попробуйте скопировать файл с диска в каталог с umask
>002. Права у файла останутся r--r--r--# cp /etc/motd .
# getfacl motd
#file:motd
#owner:0
#group:80
user::rw-
user:appdata:rwx # effective: r--
group::rwx # effective: r--
group:appdata:rwx # effective: r--
mask::r--
other::r--Так не работает... А вот так:
# rm motd
# cat /etc/motd | cat > motd
# getfacl motd
#file:motd
#owner:0
#group:80
user::rw-
user:appdata:rwx # effective: rw-
group::rwx # effective: rw-
group:appdata:rwx # effective: rw-
mask::rw-
other::r--Работает.
Самое интересное, что даже через скрипт# cat vv.sh
#!/usr/local/bin/bashumask 002
cp /etc/motd .Не работает при копировании, только при создании новых файлов или каталогов.
Я для себя нашел другое решение, основанное на использовании средств мониторинга ФС (fam или gamin). Об этом я писал на хабре. Комментарии тоже могут быть интересные. http://habrahabr.ru/blogs/linux/64868/
2 пользователя test1 и test2 находятся в приватных группах и дополнительно в группе sharer. umask 002. Создан каталог test, в котором предполагается хранить общие файлы.
Вид /home (немного подредактированный) с правамиdrwsrwsr-x 3 root sharer 4096 2009-08-15 14:29 test
drwx------ 24 test1 test1 4096 2009-08-15 14:34 test1
drwx------ 22 test2 test2 4096 2009-08-15 14:24 test2Результат тестирования (копирование и создание каталогов - gnome и kde3)
[root@seed ~]# ls -laR /home/test
/home/test:
total 24
drwsrwsr-x 3 root sharer 4096 2009-08-15 14:29 .
drwxr-xr-x 8 root root 4096 2009-08-15 14:03 ..
-rw-rw-r-- 1 test1 sharer 3177 2009-08-15 14:06 2009-08-15-Note-14-06.xoj
-rw-rw-r-- 1 test2 sharer 3948 2009-08-15 14:23 2009-08-15-Note-14-23.xoj
drwxrwsr-x 2 test1 sharer 4096 2009-08-15 14:28 created by test1
-rw------- 1 test1 sharer 3177 2009-08-15 14:06 xxx.xoj/home/test/created by test1:
total 12
drwxrwsr-x 2 test1 sharer 4096 2009-08-15 14:28 .
drwsrwsr-x 3 root sharer 4096 2009-08-15 14:29 ..
-rw-rw-r-- 1 test1 sharer 239 2009-08-15 14:05 preferred-mail-reader.desktopФайл xxx.xoj специально был создан с правами 600 и затем скопирован в test
Такой вариант устраивает?
PS: это все в linux, как другие ОС интерпретируют sgid я не знаю
Чего-то не пойму. Я конечно сделал немного проще, ибо для тестов не было желания создавать приватные группы, в общем вот:
Есть два пользователя, оба члены группы users и группы video.1. Делаю #umask 002.
2. Создаю каталог 1, его права rwxrwxr-w ибо umask 002
3. sudo chown root:video 1
4. sudo chmod a+s 1
5. ls -l
drwsrwsr-x 2 root video 4096 Авг 31 23:08 1
6. touch 123 /В другом каталоге.
7. ls -l
-rw-rw-r-- 1 jura users 0 Авг 31 23:11 123 /группа rw потому как umask 002
8. chmod g-w 123 && ls -l
-rw-r--r-- 1 jura users 0 Авг 31 23:11 123
9. cp 123 ~/Desktop/1
10. cd ~/Desktop/1 && ls -l
-rw-r--r-- 1 jura video 0 Авг 31 23:14 123Итог, кроме владеющей группы ни чего не изменилось. Суть вашего решения я понял так, все файлы имеют полные права для владеющей группы, вопрос в том, какая группа владеет файлом. Для этого и созданы приватные группы, дабы исключить возможность полного доступа одного пользователя к файлом другого.
Вроде как изначально была проблема организации совместного доступа. Она решается постановкой sgid на каталог, владельцем которого является общая для пользователей группа. Естественно, что это работает только если umask=002.
Если пользователь не хочет, чтбы файл был доступен и намеренно удаляет права для группы, то никто помешать ему это сделать не сможет.PS: искренне считал, что приватные группы (а следовательно и umask=002) уже давно везде