Использование привилегий

Теперь, когда мы разобрались, как действует механизм привилегий, самое время научиться пользоваться ими. Далее демонстрируется решение типичной задачи — настройка общего каталога. Представьте себе двух пользователей, bill и karen. Оба имеют коллекции музыкальных произведений и хотели бы настроить общий каталог, где могли бы хранить файлы в формате Ogg Vorbis или MP3. Пользователь bill имеет доступ к привилегиям суперпользователя через sudo.

Первое, что нужно сделать, — это создать группу, куда будут входить оба пользователя, bill и karen. С помощью графического инструмента GNOME для управления пользователями bill создает группу с именем music и добавляет в нее пользователей bill и karen, как показано на рис. 9.3.

Рис. 9.3. Создание новой группы в GNOME

Далее bill создает каталог для музыкальных файлов:

[bill@linuxbox ~]$ sudo mkdir /usr/local/share/Music

Пароль:

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

[bill@linuxbox ~]$ ls -ld /usr/local/share/Music

drwxr-xr-x 2 root root 4096 2012-03-21 18:05 /usr/local/share/Music

Как видите, каталогом владеет root, который имеет права доступа 755. Чтобы сделать каталог общим, bill должен изменить группу каталога и права доступа для группы:

[bill@linuxbox ~]$ sudo chown :music /usr/local/share/Music

[bill@linuxbox ~]$ sudo chmod 775 /usr/local/share/Music

[bill@linuxbox ~]$ ls -ld /usr/local/share/Music

drwxrwxr-x 2 root music 4096 2012-03-21 18:05 /usr/local/share/Music

И что все это означает? А означает это следующее: владельцем каталога /usr/local/share/Music является root, и члены группы music получают права на запись и чтение в этом каталоге. Группа music включает пользователей bill и karen; то есть bill и karen могут создавать файлы в каталоге /usr/local/share/Music. Другие пользователи могут просматривать содержимое каталога, но не могут создавать файлы в нем.

Но остается нерешенной еще одна проблема. С текущими разрешениями файлы и каталоги внутри каталога Music будут создаваться с обычными разрешениями для пользователей bill и karen:

[bill@linuxbox ~]$ > /usr/local/share/Music/test_file

[bill@linuxbox ~]$ ls -l /usr/local/share/Music

-rw-r--r-- 1 bill bill 0 2012-03-24 20:03 test_file

В действительности здесь наблюдаются две проблемы. Во-первых, маска umask в этой системе имеет значение 0022, что не позволяет членам группы записывать в файлы, принадлежащие другим членам группы. Это не проблема, если общий каталог хранит только файлы, но так как в данном каталоге предполагается хранить музыкальные произведения, а музыкальные произведения обычно принято организовывать в иерархии по исполнителям и альбомам, членам группы может понадобиться создавать файлы в каталогах, принадлежащих другим членам. Нам нужно изменить маску umask для пользователей bill и karen на 0002.

Во-вторых, каждый файл и каталог, созданный одним членом группы, будет принадлежать основной группе пользователя, а не группе music. Исправить этот недостаток можно установкой бита setgid на каталог:

[bill@linuxbox ~]$ sudo chmod g+s /usr/local/share/Music

[bill@linuxbox ~]$ ls -ld /usr/local/share/Music

drwxrwsr-x 2 root music 4096 2012-03-24 20:03 /usr/local/share/Music

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

[bill@linuxbox ~]$ umask 0002

[bill@linuxbox ~]$ rm /usr/local/share/Music/test_file

[bill@linuxbox ~]$ > /usr/local/share/Music/test_file

[bill@linuxbox ~]$ mkdir /usr/local/share/Music/test_dir

[bill@linuxbox ~]$ ls -l /usr/local/share/Music

drwxrwsr-x 2 bill music 4096 2012-03-24 20:24 test_dir

-rw-rw-r-- 1 bill music 0 2012-03-24 20:22 test_file

[bill@linuxbox ~]$

И файл и каталог теперь созданы с правильными правами доступа, позволяющими всем членам группы music создавать файлы и каталоги внутри каталога Music.

Осталась только проблема с маской umask. Дело в том, что установленная маска действует лишь до конца сеанса и сбрасывается по его завершении. В главе 11 мы узнаем, как сохранить действие измененной маски umask между сеансами.