Допустим на вашей машине с ОС 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
Комментариев нет:
Отправить комментарий