Найти тему
Кручинин.Linux

Каталог для группы в Linux

Предположим, вы создаете группу devs (прям как одноименный сериал ;), чтобы все разработчики могли работать в общей папке.

Сказано-сделано.

Создадим пользователей

adduser ivanov

-2

adduser petrov

-3

Cоздадим группу devs

addgroup devs

-4

Добавим в группу devs обоих пользователей (в примере мы не стали задавать группу как основной, она будет дополнительной)

usermod -aG devs ivanov
usermod -aG devs petrov

-5

Параметр -G указывает, что мы задаем дополнительную группу, а не меняем основную.

Параметр -a указывает, что м не замещаем список дополнительных групп, а добавляем в него новое значение

Создадим каталог /opt/devs

mkdir /opt/devs

-6

Присвоим ему группу devs

chgrp devs /opt/devs

-7

Посмотрим права

ls -ld /opt/devs

-8

Видим, что у группы нет права на запись.

Почему?

Потому что чтобы создать каталог в /opt нужно быть рутом. То есть либо зайти root, либо sudo.

Но у root umask 077 а не 007, потому группе права не выдаются.

Нужно вручную задать

chmod g+w /opt/devs

-9

Проверяем

-10

Перейдем в пользователя ivanov

su ivanov

проверим umsak

-11

0022 (или, что тоже самое 022) означает, что у группы для создаваемых файлов права будут только на чтение.

Нам нужна маска 0002 (002)

Вообще у пользователя umask имеет значение 002 но так как мы зашли рутом, и через него через non login shell (т.е. через su в данном случае), унаследовалась umask от root.

Чтобы даже в таком случае была umask 002 нужно добавить эту команду в файл .bashrc

-12
-13

Ctrl-X, Y

выходим и заходим снова

-14

Сразу проверили маску, она правильная. Теперь файлы, создаваемые нами точно будут иметь право записи для группы, а это то что нужно.

Также проверим, что мы входим в группу devs

id

-15

Все хорошо, входим.

Перейдем в /opt/devs, создадим файл ivanovfile

-16

Выйдем, и зайдем пользователем petrov

Также проверим umask и зададим ее в ~/.bashrc

-17
-18

Снова выйдем, зайдем Петровым, проверим маску, и если все хорошо перейдем в папку /opt/devs

-19

Проверим, что мы тоже в группе devs

id

-20

Пробуем добавить в файл ivanovfile свою запись. Нам же надо будет исправлять его ошибки или править конфиги?

-21

Как же так? Почему так получилось?

Смотрим права файлов

ls -la /opt/devs

-22

Права на запись у группы есть. А вот группа у файла ivanovfile оказывается ivanov. Потому что это основная группа пользователя.

А мы поправить не сможем теперь.

Как этого избежать.

Вариант 1.Сразу задавать основную группу всем разработчикам devs. Как это сделать - домашнее задание.

А мы рассмотрим чуть более интересный Вариант 2.

Если мы для каталога /opt/devs зададим специальное право SGID (Set Group ID), то при создании в каталоге файлов они будут получать не группу создателя файла, а группу, которая указана для родительской группы.

Выходим из Петрова и выполняем команду
chmod g+s /opt/devs

-23

Заходим Ивановым и создаем новый файл ivanov2

-24

Переходим в Петрова и пытаемся пофиксить файл

-25

Проверяем

Теперь все работает

Почему так?

Создадим свой файл и сразу проверим

-26

Видим, что после присвоения каталогу права SGID у всех создаваемых файлов группа которая задана у родительской директории.

А как быдь с подкаталогами?

-27

Подкаталог наследует не только родительский каталог, но и право SGID

Подписывайтесь на мой канал в дзен https://dzen.ru/olinux и будете в курсе новых моих статей по компьютерным сетям и ОС GNU/Linux.

Всегда с вами, Сергей Кручинин преподаватель GNU/Linux и компьютерных сетей

-28