Бит setgid и команда umask

В продолжение статьи о бите setuid решил написать подобную и о бите setgid, тем более, что пример, который я здесь приведу был нашим домашним заданием на курсах Linux. Хотя задание на мой взгляд было простое справилось с ним только двое из шести слушателей. Я с задачей справился и хочу рассказать как именно.А задача была следующая: создать общую папку PUB для двух пользователей, для их совместной работы. Пользователи должны иметь возможность создавать файлы в папке и редактировать файлы друг друга. Другие пользователи доступа к папке не имеют.

Для решения этой задачи нам понадобится бит setgid. Напомню, что если этот бит установлен для каталога, то создаваемые в нем объекты будут получать группу владельца каталога, а не пользователя. Пояснение: есть пользователь igor. Он создает в каталоге (бит setgid не установлен) файл. Владелец данного файла будет igor, группа-владелец основная группа пользователя igor (по умолчанию igor). Если есть каталог, владелец которого root, а группа-владелец share, и бит setgid установлен, то владелец созданного объекта будет igor, а группа-владелец не igor, а share (как и у каталога). Далее в примере будет еще понятнее.

Сначала создаю сам каталог PUB:

igor@ubuntu:~$ sudo mkdir /PUB

После этого создаю группу PUB, которая будет группой-владельцем данного каталога:

igor@ubuntu:~$ sudo addgroup pub

Одним пользователем буду я (igor), а второго создаю:

igor@ubuntu:~$ sudo adduser olya

Теперь добавляю пользователей в группу pub:

igor@ubuntu:~$ sudo addgroup igor pub
igor@ubuntu:~$ sudo addgroup olya pub

Проверяю, что пользователи добавились в группу pub:

igor@ubuntu:~$ less /etc/group | grep pub
pub:x:1002:igor,olya

Теперь изменяю группу-владельца каталога /PUB с root на pub:

igor@ubuntu:~$ sudo chown root:pub /PUB/

Проверяю:

igor@ubuntu:~$ ls -l / | grep PUB
drwxr-xr-x   2 root pub   4096 2009-10-24 20:19 PUB

Теперь устанавливаю права на каталог /PUB и бит setgid и проверяю результат:

igor@ubuntu:~$ sudo chmod g+ws,o= /PUB/
igor@ubuntu:~$ ls -l / | grep PUB
drwxrws—   2 root pub   4096 2009-10-24 20:19 PUB

Бит setgid установлен, прав у остальных пользователей нет.

Кажется все сделал. Проверяю. Захожу с учетной записью olya и создаю файл file.txt:

olya@ubuntu:~$ touch /PUB/file.txt

Из консоли пользователя igor пробую изменить файл:

igor@ubuntu:~$ echo Hello! > /PUB/file.txt
bash: /PUB/file.txt: Permission denied

и получаю сообщение, что доступ запрещен. Проверяю права на файл:

igor@ubuntu:~$ ls -l /PUB/
ls: невозможно открыть каталог /PUB/: Permission denied

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

igor@ubuntu:~$ ls -l /PUB/
итого 0
-rw-r–r– 1 olya pub 0 2009-10-24 22:01 file.txt

Вижу, что для группы pub файл имеет разрешения только на чтение. Вспоминаю о правах по умолчанию, шаблоне и команде umask. Для всех пользователей, шаблон задающий права для создаваемых объектов, установлен в 0022 (чтобы убедиться в этом можно набрать команду umask без параметров), что дает объекту файлу права 644 (или -rw-r–r–). Необходимо изменить этот шаблон для пользователей igor и olya, чтобы права для создаваемых файлов были -rw-rw—- . Для этого случая шаблон будет равен 0017. В Ubuntu этот шаблон задается в файле .profile, который расположен в домашнем каталоге каждого пользователя. Изменяю этот шаблон в файле .profile пользователей igor и olya. Необходимо найти строку со словом umask и изменить в ней значение на нужное. Захожу в систему повторно и проверяю полученный результат:

olya@ubuntu:~$ touch /PUB/file.txt
igor@ubuntu:~$ echo Hello! > /PUB/file.txt
igor@ubuntu:~$ cat /PUB/file.txt
Hello!
igor@ubuntu:~$ touch /PUB/file2.txt
olya@ubuntu:~$ echo Hello Igor! > file2.txt
olya@ubuntu:~$ ls -l /PUB/
итого 8
-rw-rw—- 1 igor pub 12 2009-10-24 22:43 file2.txt
-rw-rw—- 1 olya pub  7 2009-10-24 22:38 file.txt

Вот теперь все в порядке. В каталоге /PUB создаются файлы, которые доступны для редактирования обоим пользователям. Задача довольно распространенная и теперь я знаю как ее можно решить, зная, что есть бит segid и команда umask.

Статьи и новости схожей тематики:

Оставьте свой отзыв