Предположим, вы создаете группу devs (прям как одноименный сериал ;), чтобы все разработчики могли работать в общей папке.
Сказано-сделано.
Создадим пользователей
adduser ivanov
adduser petrov
Cоздадим группу devs
addgroup devs
Добавим в группу devs обоих пользователей (в примере мы не стали задавать группу как основной, она будет дополнительной)
usermod -aG devs ivanov
usermod -aG devs petrov
Параметр -G указывает, что мы задаем дополнительную группу, а не меняем основную.
Параметр -a указывает, что м не замещаем список дополнительных групп, а добавляем в него новое значение
Создадим каталог /opt/devs
mkdir /opt/devs
Присвоим ему группу devs
chgrp devs /opt/devs
Посмотрим права
ls -ld /opt/devs
Видим, что у группы нет права на запись.
Почему?
Потому что чтобы создать каталог в /opt нужно быть рутом. То есть либо зайти root, либо sudo.
Но у root umask 077 а не 007, потому группе права не выдаются.
Нужно вручную задать
chmod g+w /opt/devs
Проверяем
Перейдем в пользователя ivanov
su ivanov
проверим umsak
0022 (или, что тоже самое 022) означает, что у группы для создаваемых файлов права будут только на чтение.
Нам нужна маска 0002 (002)
Вообще у пользователя umask имеет значение 002 но так как мы зашли рутом, и через него через non login shell (т.е. через su в данном случае), унаследовалась umask от root.
Чтобы даже в таком случае была umask 002 нужно добавить эту команду в файл .bashrc
Ctrl-X, Y
выходим и заходим снова
Сразу проверили маску, она правильная. Теперь файлы, создаваемые нами точно будут иметь право записи для группы, а это то что нужно.
Также проверим, что мы входим в группу devs
id
Все хорошо, входим.
Перейдем в /opt/devs, создадим файл ivanovfile
Выйдем, и зайдем пользователем petrov
Также проверим umask и зададим ее в ~/.bashrc
Снова выйдем, зайдем Петровым, проверим маску, и если все хорошо перейдем в папку /opt/devs
Проверим, что мы тоже в группе devs
id
Пробуем добавить в файл ivanovfile свою запись. Нам же надо будет исправлять его ошибки или править конфиги?
Как же так? Почему так получилось?
Смотрим права файлов
ls -la /opt/devs
Права на запись у группы есть. А вот группа у файла ivanovfile оказывается ivanov. Потому что это основная группа пользователя.
А мы поправить не сможем теперь.
Как этого избежать.
Вариант 1.Сразу задавать основную группу всем разработчикам devs. Как это сделать - домашнее задание.
А мы рассмотрим чуть более интересный Вариант 2.
Если мы для каталога /opt/devs зададим специальное право SGID (Set Group ID), то при создании в каталоге файлов они будут получать не группу создателя файла, а группу, которая указана для родительской группы.
Выходим из Петрова и выполняем команду
chmod g+s /opt/devs
Заходим Ивановым и создаем новый файл ivanov2
Переходим в Петрова и пытаемся пофиксить файл
Проверяем
Теперь все работает
Почему так?
Создадим свой файл и сразу проверим
Видим, что после присвоения каталогу права SGID у всех создаваемых файлов группа которая задана у родительской директории.
А как быдь с подкаталогами?
Подкаталог наследует не только родительский каталог, но и право SGID
Подписывайтесь на мой канал в дзен https://dzen.ru/olinux и будете в курсе новых моих статей по компьютерным сетям и ОС GNU/Linux.
Всегда с вами, Сергей Кручинин преподаватель GNU/Linux и компьютерных сетей