Online video hd

Смотреть 365 видео

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

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

karapuz 21.03.2009 08:17

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 тут не при чем.


Тэги: fam fileschanged gamin
+ 1 -
Похожие Поделиться

Dreams 21.03.2009 11:33 #
+ 0 -
не понял, а зачем такой геморой? неужели просто нельзя воспользоваться наследованием прав? это и проще и избавляет от такой рутинной работы...

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

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

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

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

Если тебе нужны другие права на эти файлы, тогда уже выставляешь такие которые тебе нужно.
karapuz 21.03.2009 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

Не похоже чтобы что-то наследовалось или я что-то не так делал?
karapuz 21.03.2009 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
Dreams 23.03.2009 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 можем только читать файлы, создать что либо, а так же отредактирвать ничего нельзя

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

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


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

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

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

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

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

Вот так делаю я. Рекурсивно меняю атрибуты и владельца.
zb 22.03.2009 13:34 #
+ 1 -
да понятно зачем, чтобы только новые файлы обрабатывать, но я бы рекомендовал на perl написать с очереью, а то если тыщу файлов влить может и форкбомба получиться (правда не уверен как fam эти скрипты вызывает)
karapuz 22.03.2009 15:35 #
+ 0 -
Знаете, fam (gamin), как показала практика, не очень-то справляется с задачей. Если скопировать много маленьких файлов в подопотный каталог (например исходники программы), то нужные права не везде раскидываются. Я не очень силен в perl (читай "не знаю совсем"), если не трудно, покажите пример. Я думаю многим это было бы интересно.
zb 24.03.2009 06:47 #
+ 1 -
похоже дело не в fam, а в скрипте, в общем вот код

#!/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 (чтобы параметрами задавать чего хочется)
Dreams 24.03.2009 07:58 #
+ 0 -
если файлам присваивать chmod 664 то там будет проблема с доступом к ним, для группы, папкам можно присваивать chmod 777...

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

Только cp наследует или ещё остальные подобные программы? Например, если я копирую средствами KDE или Gnome? Или консольным Midnight Commander (точно не знаю сам ли он копирует или использует cp)?
Username 25.03.2009 00:32 #
+ -1 -
все копируют при помощи ср, на то они и оболочки
Murz 25.03.2009 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 что-то делают не так.
Murz 25.03.2009 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. Создаем в этой папке файлы
file1.txt владелец murz:users права drwx------ без ACL
file2.txt владелец murz:murz права drwx------ без ACL

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

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

$ 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 есть права на запись как для папки, так и для файлов, что и требовалось в задаче.
Или всё же в этом варианте есть подводные камни или кирпичи?
Dreams 25.03.2009 01:26 #
+ 0 -
мне сегодня подсказали, что mc поидее копирует с наследованием прав, но не успел проверить так ли это...
karapuz 25.03.2009 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. То есть я не удалил свои прошлые эксперементы. Посматрите, может у Вас тоже так?
Murz 25.03.2009 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::---
Murz 25.03.2009 18:01 #
+ 0 -
Копировал всё через mc.
Только вот под другим пользователем (tat:users) в эту папку попасть не получается почему-то, видимо mc смотрит только на права, а не на ACL.
karapuz 26.03.2009 01:23 #
+ 0 -
Стоит #effective:--- для группы users. Полный доступ только для владельца (user::rwx). По этой причине любой член группы users не может попасть в этот каталог, кроме владельца.

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

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


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

Online video HD

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

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

Full HD video online

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

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

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