суббота, 24 сентября 2011 г.

Linux: общие каталоги для локальных пользователей, стандартный способ


Допустим на вашей машине с ОС Linux есть несколько пользователей, для которых необходимо организовать общий доступ к файлам в определенном каталоге. Для примера можно рассмотреть, допустим, ноутбук и архив семейных фотографии. Проблема состоит в том, что пользователь в своей  домашней директории может создавать любые директории с файлами и по умолчанию на них назначаются разрешения для этого пользователя:

rw-r--r-- или 644 для файлов и владелец, допустим userA с группой userA

rwxr-xr-x или 755 для директории и владелец, допустим userA с группой userA

Пример:

создать пустой файл: 

%touch test_file

просмотреть права доступа:

%ls -l test_file

-rw-r--r-- 1 userA userA 0 2011-09-24 23:01 test_file

Ситуация меняется когда для этих файлов необходимо организовать доступ другим пользователем. В этом случае  необходимо назначить дополнительные разрешения на файлы, а еще лучше, на сам каталог, следующим образом: права на чтение и запись файлов в каталог имеет пользователь userB.

Стандартный способ:

Достаточно избитый вариант, в этом случае, создать новую группу, например, groupAB:

#addgroup --system groupAB

И добавить в группу необходимых пользователей:

#adduser userA groupAB
#adduser userB groupAB

Замечание. Совершенно естественно, для создания групп и добавления в них пользователя требуются права суперпользователя root. Поэтому необходимо предварительно выполнить:


%su root

либо, для пользователей Ubuntu:

%sudo -i

даем необходимые команды пользователем root и выходим:

#exit

Далее, создаем общий каталог:

%mkdir share

Изменяем группу:

#chown userA:groupAB share

Замечание. Опять совершенно и логично требуются права доступа суперпользователя, поэтому как вариант можно выполнить сразу:

%sudo chown userA:groupAB share

Проверить то, что группа изменилась:

%ls -ld share

drwxr-xr-x 2 userA groupAB 4096 2011-09-24 23:21 share

Далее устанавливаем бит sgid на данном каталоге, предварительно сменив первичную группу пользователя userA:

%newgrp groupAB
%chmod g+s share

Смысл в назначений sgid бита на группу share, теперь все новые файлы созданные в каталоге share будут иметь группу groupAB, а не например userAB. Смену первичной группы для пользователя необходимо произвести из-за того, что изменение прав иначе не сработает. После этого можно сменить первичную группу обратно:

%newgrp userA

Далее, на группу необходимо назначить дополнительное разрешение: возможность записи для пользователей групы. Для этого:

%chmod g+w share

Итого, мы создали общий каталог для двух пользователей userA, userB и дали соответствующие разрешения на чтение и запись в данном каталоге для пользователей группы groupAB. Все новые и скопированные файлы в данном каталоге будут иметь соответствующие разрешения.

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

%ls -ld ~userA

drwxr-xr-x 59 userA userA 4096 2011-09-24 23:35 /home/userA
         ^----------------------!

Иначе, получите отказ в доступе пользователем userB при обращении к данному каталогу.

Минусами данного подхода является:

1) Попробуйте не скопировать, а переместить файл пользователем userB в каталог share:

userB%touch test_file
userB%mv test_file /path_to_share_dir/share

и дать команду:

userB%ls -l /path_to_share_dir/share/test_file

Дело в том, что группа у файла будет userB и пользователь будет получать отказ в доступе при попытки записи в данный файл.

2) umask по умолчанию. В большинстве систем umask по умолчанию - 022. Т.е. для новых файлов и каталогов будут действовать следующие разрешения:


rw-r--r-- или 644 для файлов
rwxr-xr-x или 755 для директории

Таким образом вновь созданные и скопированные файлы в общем каталоге, по умолчанию будут доступны для других пользователей только в режиме чтения. Для решения проблемы можно, конечно, изменить umask в 002, например в файле .bashrc или .profile в домашней директории, но все вновь созданные файлы будут иметь следующие разрешения: 

rw-rw-r-- или 664 для файлов
rwxrwxr-x или 775 для директории

Что не очень полезно, с точки зрения безопасности. В общем то рекомендуется делать umask 066. Более подробно можно почитать здесь:

http://ru.wikipedia.org/wiki/Umask


Комментариев нет:

Отправить комментарий