Видео смотреть бесплатно

Смотреть японки видео

Официальный сайт ejnews 24/7/365

Смотреть видео бесплатно

WeLinux.ru

21.03.09 08:17karapuz

How-to`sПрактика распределения прав пользователей на Linux десктопе (продолжение)

В прошлой статье я рассказал о своем опыте распределения прав пользователей при помощи acl. Если вы читали её до конца, то должны помнить, что при помощи acl не получится автоматически изменять права на копируемые и перемещаемые файлы или каталоги. В Linux копируемый объект всегда наследует права исходного, если явно не указано иное. Я не буду вдаваться в подробности сего факты, а дам ссылку на созданную мною ветку на форуме opennet.ru. Там есть что почитать.

В этой статье я расскажу как можно автоматически назначать нужные права на копируемые (перемещаемые) в определенный каталог объекты.

Необходимые инструменты


Этих инструментов всего два:
1) fam или gamin - сервис мониторинга файловой системы. Что использовать, выбирать вам, но я рекомендую gamin, потому как fam сам по себе устарел, да и gamin работает стабильней.
2) fileschanged - маленькая консольная утилита, которая по сути является клиентской программой fam или gamin.

Пример использования


Пусть наш подопытный каталог будет ~/Фото. Все действия будем проводить с ним.
Для начала нам нужно создать скрипт /usr/local/bin/script следующего содержания

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


Этот скрипт будет изменять права на все новые элементы в каталоге ~/Фото. Для файлов rw-rw-r--, для каталогов rwxrwxr-x. Если используете fam, не забудьте запустить fam daemon

/etc/rc.d/fam start

Теперь при помощи fileschanged нужно этот скрипт выполнить.

fileschanged -cCfr -x /usr/local/bin/script ~/Фото &

Вот собственно и все. Теперь fileschsnged будет слушать что говорит fam (gamin) по поводу изменений в каталоге ~/Фото и ко всему новому применять скрипт /usr/local/bin/script.

Для того чтобы не запускать fileschanged ручками, пропишем его в автозапуск. В kde это делается так

vim ~/.kde/Autostart/fileschanged

#!/bin/bash
fileschanged -cCfr -x /usr/local/bin/script ~/Фото &

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


Благодарности.
За помощь при подготовке данной статьи хочу выразить отдельную благодарность следующим участникам Linuxforum:
sash-kan
KernelPanic

Данная статья - кросспост из моего блога

UPD:"...копируемый объект всегда наследует права исходного, если явно не указано иное." Таково дефолтное поведение утилиты cp. Если использовать, например, утилиту install, то она по дефолту ставит права rwxr-xr-x. Сам Linux тут не при чем.
+1
Dreams21.03.09 11:33# +0
не понял, а зачем такой геморой? неужели просто нельзя воспользоваться наследованием прав? это и проще и избавляет от такой рутинной работы...

по-моему вам следует сначала разобраться с правильной организацией прав пользователей... что это такое и с чем его едят...
karapuz21.03.09 12:09# +0
хм, а о чем конкретно Вы говорите? Acl, umask? Или вы знаете другой способ чтобы, например, я скопировал с фотоаппарата файлы с правами rw-r--r-- в определенный каталог и права стали rw-rw-r--? Обратите внимание, именно скопировал или переместил, не создал новые. Setfacl -d group::rwx или umask 002 тут не работают. При копировании права наследются от исходного элемента если явно не указано иное, или я ошибаюсь?
exelens21.03.09 12:26# +0
например, я скопировал с фотоаппарата файлы с правами rw-r--r--

А зачем такие сложности?
karapuz21.03.09 12:31# +0
Чтоб два пользователя, члены одной группы (я и жена) могли иметь полный доступ к этим файлам. Один вечером скинул фотки, другой на следующий день поубирал красные глаза.
Dreams21.03.09 12:32# +0
Прочитай хотя бы это Установка и изменение прав доступа

Я уже писал в твоей первой статье, что не стоит заморачиваться с пользователями, стоит подумать о группах пользователей. По умолчанию права должны наследоваться от того объекта в который ты копируешь...

то-есть пример:
есть у тебя папка ~/Фото и на ней выставлены права для пользователей/групп например группа User rw-r--r-- и пользователь XUser rw-rw-r--
если ты будешь копировать в папку файлы, то выставятся на них такие же самые права как и на каталог.

Если тебе нужны другие права на эти файлы, тогда уже выставляешь такие которые тебе нужно.
karapuz21.03.09 13:14# +0
mkdir 1
chmod 774 1
ls -l
drwxrwxr-- 2 user users 4096 Мар 21 19:51 1
touch file
touck file2
chmod 444 file2
ls -l
-rw-r--r-- 1 user users 0 Мар 21 19:49 file
-r--r--r-- 1 jura users 0 Мар 21 20:05 file2
cp file file2 ~/1
ls -l
-rw-r--r-- 1 user users 0 Мар 21 19:51 file
-r--r--r-- 1 user users 0 Мар 21 20:05 file2

setfacl -m group::rwx 1
setfacl -dm group::rwx 1
setfacl -dm mask:rwx 1
getfacl 1
# file: 1
# owner: user
# group: users
user::rwx
group::rwx
other::r--
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::r--
cp file file2 ~/1
ls -l
-rw-r--r--+ 1 user users 0 Мар 21 20:12 file
-r--r--r--+ 1 user users 0 Мар 21 20:12 file2

Не похоже чтобы что-то наследовалось или я что-то не так делал?
karapuz21.03.09 13:41# +0
Или еще. Создал группу test в состав которой включил моих двух пользователей.
setfacl -m group:test:rwx 1
setfacl -dm group:test:rwx 1
setfacl -dm mask:rwx 1
# file: 1
# owner: user
# group: users
user::rwx
group::r-x
group:test:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:test:rwx
default:mask::rwx
default:other::r-x
cp file file2 /home/jura/1
-rw-r--r--+ 1 user users 0 Мар 21 20:34 file
-r--r--r--+ 1 user users 0 Мар 21 20:34 file2
Dreams23.03.09 15:47# +0
Создаём 2 группы:
группа x в неё входят fox и xuser
группа y в неё входит yuser

Задача:
создать папку 1 с правами доступа группа x чтение/запись/выполнение, группа y чтение

Смотрим код:
fox@fox-desktop:/tmp$ mkdir 1
fox@fox-desktop:/tmp$ chgrp x 1
fox@fox-desktop:/tmp$ ls -l
total 1
drwxr-xr-x 2 fox x 1024 2009-03-23 14:24 1
fox@fox-desktop:/tmp$ setfacl -m u::rwx,g::rwx,g:y:rx,m:rwx,o:rw 1
fox@fox-desktop:/tmp$ setfacl -dm u::rwx,g::rwx,g:y:r,m:rwx,o:rwx 1
fox@fox-desktop:/tmp$ cd 1
fox@fox-desktop:/tmp/1$ touch 1
fox@fox-desktop:/tmp/1$ touch 2
fox@fox-desktop:/tmp/1$ getfacl 1
# file: 1
# owner: fox
# group: fox
user::rw-
group::rwx #effective:rw-
group:y:r--
mask::rw-
other::rw-

Проверяем:
Заходим под xuser в папку /tmp/1 возможно чтение/запись/выполнение, так же и под пользователем fox
Заходим под yuser в папку /tmp/1 можем только читать файлы, создать что либо, а так же отредактирвать ничего нельзя

думаю я ответил на твой вопрос???
Dreams23.03.09 15:50# +0
P.S. остальные пользователи не могут зайти в папку, пишет Operation not permitted ну или что-то тип того...
Dreams23.03.09 16:17# +0
P.S.S ошибся...

Проверяем:
Заходим под xuser в папку /tmp/1 возможно чтение/запись/выполнение, так же и под пользователем fox


Исправлено :)

Проверяем:
Заходим под xuser в папку /tmp/1 возможно чтение/запись, так же и под пользователем fox
karapuz24.03.09 01:39# +1
Нет, не ответил, при default acl создаваемые (новые) файлы наследуют права, это я прекрасно знаю и именно это я увидел в твоем комментарии. А теперь создай файл где-нибудь в другом месте с правами, например r--r--r-- и потом cp file /tmp/1 и посматри вывод ls -l. Права останутся r--r--r--. Именно об этом я писал в комментариях выше. Можно еще посматреть getfacl file, там будет #effective:r--, создай ты хоть 10 групп. Я еще раз повторюсь, не наследуются права на копируемые или перемещаемые файлы.
l1feh4ck3r21.03.09 12:28# +0
Почитай комментарии к предыдущей статье, там это все уже давно обсудили.
Хотя я с вами согласен, это ненужный гемор, ибо для этого и были придуманы группы.
Dreams21.03.09 12:38# +0
в прошлой статье мой коммент был про группы))

Просто тут человеку нужно было более лучше почитать про организацию прав пользователей)) Просто когда с ними работаешь давно этот вопрос не возникает, т.к. ты уже знаешь что и как работает, а когда человек впервые сталкивается с этим, то у него конечно возникает сразу вопрос - "а как оно работает?"))
karapuz22.03.09 06:01# +1
Я уже давно ищу ответ на свой вопрос, как на копируемые файлы автоматом присваивать права rw-rw-r--? Так может покажешь все таки на практическои примере как? А то только говоришь, что все что я делаю не правильно, и при этом пишешь про права группы rw-r--r-- и пользователя rw-rw-r--, хотя должен знать что rw-r--r-- и есть обозначение прав владельца, группы и остальных. Ткни меня уже носом наконец в правильный ответ.
zb21.03.09 11:37# +2
В Linux копируемый объект всегда наследует права исходного, если явно не указано иное.

это не правда. Linux тут не причем, это просто дефолтное поведение утилиты cp.
karapuz21.03.09 12:40# +0
Спасибо за замечение, поправил
Brun22.03.09 13:09# +0
Не понял для чего это...

chmod 777 -R ./folder/
chown brun:brun -R ./folder/

Вот так делаю я. Рекурсивно меняю атрибуты и владельца.
zb22.03.09 13:34# +1
да понятно зачем, чтобы только новые файлы обрабатывать, но я бы рекомендовал на perl написать с очереью, а то если тыщу файлов влить может и форкбомба получиться (правда не уверен как fam эти скрипты вызывает)
karapuz22.03.09 15:35# +0
Знаете, fam (gamin), как показала практика, не очень-то справляется с задачей. Если скопировать много маленьких файлов в подопотный каталог (например исходники программы), то нужные права не везде раскидываются. Я не очень силен в perl (читай "не знаю совсем"), если не трудно, покажите пример. Я думаю многим это было бы интересно.
zb24.03.09 06:47# +1
похоже дело не в fam, а в скрипте, в общем вот код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#!/usr/bin/perl
use Sys::Gamin;
use Fcntl ':mode';
         my $fm=new Sys::Gamin;
         my $path="/tmp/test";
         $fm->monitor("$path");
         while (1) {
           my $event=$fm->next_event;  # Blocks
           my $filename=("$path/".$event->filename);
        if (grep($event->type,qw(create change move))) {
                   my $mode = (stat($filename))[2];
                   my $omode=S_IMODE($mode);
                   if (S_ISDIR($mode) and $omode!=0775) {chmod 0775,$filename};
                   if (S_ISREG($mode) and $omode!=0664) {chmod 0664,$filename};
        }
         }

 

чего делает - цепляется к gamin и выполняет задания по евенту, я тестил touch 1000 файлов - без осечек.
домшнее задание - сделать из этого демона, и прикрутить getopt (чтобы параметрами задавать чего хочется)
Dreams24.03.09 07:58# +0
если файлам присваивать chmod 664 то там будет проблема с доступом к ним, для группы, папкам можно присваивать chmod 777...

для копируемых папок и файлов добавляются дополнительные ограничения по группам, то-есть если на родительской папке стоит g:usersy:r то оно будет присвоено так же всем копируемым в неё папкам и файлам...
zb24.03.09 19:46# +2
чего это за бред?
karapuz22.03.09 15:43# +0
А зачем менять владельца если оба пользователя члены одной группы? Достаточно поставить rw- на группу. А насчет атрибутов, я хочу конкретно на файлы rw-rw-r-- (тут мне не нужен x, ибо файлы не бинарники), и на каталоги rwxrwxrr-x (тут без x не обойтись, иначе не получится попасть во внутрь каталога).
Murz25.03.09 00:19# +0
"...копируемый объект всегда наследует права исходного, если явно не указано иное." Таково дефолтное поведение утилиты cp. Если использовать, например, утилиту install, то она по дефолту ставит права rwxr-xr-x. Сам Linux тут не при чем.

Только cp наследует или ещё остальные подобные программы? Например, если я копирую средствами KDE или Gnome? Или консольным Midnight Commander (точно не знаю сам ли он копирует или использует cp)?
Username25.03.09 00:32# +0
все копируют при помощи ср, на то они и оболочки
Murz25.03.09 00:51# +0
Я впринципе об этом подозревал, но ввёл в заблуждение текст с темы на opennet.ru:
теперь сравним результат копирования для каталога с помощью DE и с помощью cp:
DE:
>ls -l
>drwxrwxr-x+ 2 jura users 4096 Мар 12 20:22 folder

cp:
>ls -l
>drwxr-xr-x+ 2 jura users 4096 Мар 12 20:55 folder

DE в отличии от cp действует как-то своеобразно, не устанавливая атрибуты исходного каталога для скопированного, да-да, это не автоматика, а такая работа кода DE. Поэтому мы видим w для группы. Видимо программисты DE что-то делают не так.
Murz25.03.09 01:23# +0
Произвел небольшой эксперимент с помощью setfacl/getfacl и midnight commander.
Имеется папка /photos владелец murz:users права drwxrwx--- без ACL
Задача немного попроще: нужно сделать чтобы все файлы, копируемые в эту папку, были доступны на запись для всех пользователей группы users.
Ставим для этой папки доп. права на группу users:
$ setfacl -m d:g:users:rwx /photos

И вроде бы больше ничего и не надо.
Ставим эксперимент:
1. Создаю у себя в ~home папку 2009-01 владелец murz:murz права drwx------ без ACL
2. Создаем в этой папке файлы
1
2
file1.txt владелец murz:users права drwx------ без ACL
file2.txt владелец murz:murz права drwx------ без ACL

3. Копирую эту папку с помощью mc в /photos

В итоге получаем что права на запись для всех пользователей группы есть права на правку этого файла (через доп. права ACL):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
$ getfacl /photos
getfacl: Removing leading '/' from absolute path names
# file: /photos                              
# owner: murz                                        
# group: users                                        
user::rwx                                            
group::rwx                                            
other::r-x                                            
default:user::rwx                                    
default:group::rwx
default:group:users:rwx
default:mask::rwx
default:other::r-x

$ getfacl /photos/2009-01
getfacl: Removing leading '/' from absolute path names
# file: photos/2009-01
# owner: murz
# group: users
user::rwx
group::rwx                      #effective:---
group:users:rwx                 #effective:---
mask::---
other::---
default:user::rwx
default:group::rwx
default:group:users:rwx
default:mask::rwx
default:other::r-x

$ getfacl /photos/2009-01/file1.txt
getfacl: Removing leading '/' from absolute path names
# file: /photos/2009-01/file1.txt
# owner: murz
# group: users
user::rw-
group::rwx                      #effective:rw-
group:users:rwx                 #effective:rw-
mask::rw-
other::r--

$ getfacl /photos/2009-01/file2.txt
getfacl: Removing leading '/' from absolute path names
# file: /photos/2009-01/file2.txt
# owner: murz
# group: users
user::rw-
group::rwx                      #effective:rw-
group:users:rwx                 #effective:rw-
mask::rw-
other::r--
 


Насколько я понимаю, строчка "group:users:rwx #effective:rw-" означает что для пользователей группы users есть права на запись как для папки, так и для файлов, что и требовалось в задаче.
Или всё же в этом варианте есть подводные камни или кирпичи?
Dreams25.03.09 01:26# +0
мне сегодня подсказали, что mc поидее копирует с наследованием прав, но не успел проверить так ли это...
karapuz25.03.09 04:53# +0
1. Делаю каталог ~/3
2. Делаю каталог ~/12
ls -l
drwx------ 2 jura users 96 Мар 25 11:13 12
3. В каталоге ~/12 Делаю touch 1 2
делаю внутри ~/12 ls -l
-rwx------ 1 jura users 0 Мар 25 11:13 1
-rwx------ 1 jura users 0 Мар 25 11:13 2
4. Делаю $ setfacl -m d:g:users:rwx ~/3
5. Копирую mc каталог ~/12 в ~/3
6. Сомтрю внутри ~/3
ls -l
drwx------+ 2 jura users 96 Мар 25 11:13 12

getfacl 12
# file: 12
# owner: jura
# group: users
user::rwx
group::r-x #effective:---
group:users:rwx #effective:---
mask::---
other::---
default:user::rwx
default:group::r-x
default:group:users:rwx
default:mask::rwx
default:other::r-x

Как видно стоит #effective:--- для группы users
7. Внутри уже скопированного ~/12 делаю ls -l
-rwx------+ 1 jura users 0 Мар 25 11:13 1
-rwx------+ 1 jura users 0 Мар 25 11:13 2
getfacl делать смысла нет, и так все видно, группа не имеет доступа вообще. Что было до копирования то и осталось.
Очень странно, почему у вас по другому? Если честно, у меня тоже было как у Вас, но потом до меня дошло, что я использую в качестве подопытного каталога каталог ~/1, за которым сейчас следит fileschandged. То есть я не удалил свои прошлые эксперементы. Посматрите, может у Вас тоже так?
Murz25.03.09 17:53# +0
Нет, я на этом компе пока с fileschandged не заморачивался...
Права у файла и папки так и остаются старыми у меня тоже, но вот ACL наследуются нормально:
До копирования было так:
$ ls -lR .
drwx------ 2 murz users 4096 2009-03-25 17:48 2009-01
-rw------- 1 murz murz 0 2009-03-25 17:48 file1.txt
-rw------- 1 murz users 0 2009-03-25 17:48 file2.txt

После копирования в папку photos стало так:
$ ls -lR .
drwx------+ 2 murz users 4096 2009-03-25 17:48 2009-01
-rw-------+ 1 murz users 0 2009-03-25 17:48 file1.txt
-rw-------+ 1 murz users 0 2009-03-25 17:48 file2.txt

Т.е. правила ACL сменили группу верно. Но права не меняли.
А если посмотреть через getfacl, то на файлах и папках можно увидеть права чтения и записи для группы users:
$ getfacl ./2009-01/
# file: 2009-01/
# owner: murz
# group: users
user::rwx
group::rwx #effective:---
group:users:rwx #effective:---
mask::---
other::---
default:user::rwx
default:group::rwx
default:group:users:rwx
default:mask::rwx
default:other::r-x


$ getfacl ./2009-01/file1.txt
# file: 2009-01/file1.txt
# owner: murz
# group: users
user::rw-
group::rwx #effective:---
group:users:rwx #effective:---
mask::---
other::---
Murz25.03.09 18:01# +0
Копировал всё через mc.
Только вот под другим пользователем (tat:users) в эту папку попасть не получается почему-то, видимо mc смотрит только на права, а не на ACL.
karapuz26.03.09 01:23# +0
Стоит #effective:--- для группы users. Полный доступ только для владельца (user::rwx). По этой причине любой член группы users не может попасть в этот каталог, кроме владельца.

Top блогов (все)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Top пользователей (все)
Топ пользователей Топ блогов
welinux.ru
Идея сайта exelens; Движок 0byte, разработчик nvbn; Дизайн - Astramak

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн