У меня есть проект с несколькими файлами, которые я создал в Linux.
И мне нужно было дать другому пользователю разрешение на запись в них. Итак, я создал группу разработчиков, членами которой мы с ним являемся, и передал права собственности на файлы этой группе.
Типичный файл теперь имеет следующие разрешения:
-rw-rw-r-- 1 phil dev 5617 Jul 14 15:45 profile.html
Однако, когда я редактирую файл profile.html, он возвращается ко мне вот так, и мой коллега теряет возможность редактировать.
-rw-rw-r-- 1 phil phil 5617 Jul 14 15:45 profile.html
Как мне избежать такого возврата? Смена владельца - неправильный поступок? Или это было сделано с неправильными вариантами? Или это связано с конфигурацией моего редактора (emacs)?
В содержащей папке вы хотите изменить группу на dev, а затем использовать отметку set-gid.
chgrp dev <containing-folder>
chmod g+ws <containing-folder>
Бит setgid заставляет файлы, созданные в этой папке, наследовать группу папки, а также отмечать бит setgid в любых новых папках. Будьте осторожны при перемещении файлов в каталог, так как это сохранит их существующие разрешения.
Вы можете использовать бит setgid в каталоге для сохранения групповой собственности детей.
chown :dev directory/
chmod g+s directory/
Вы также можете смонтировать файловую систему (при условии, что ext2 / 3) с параметром монтирования grpid, который сделает так, что всякий раз, когда вы создаете новый файл в каталоге, владелец группы будет таким же, как и родительский каталог. Тогда вы просто сделаете так, чтобы каталог, в котором существуют эти файлы, принадлежал группе «dev».
Чтобы перемонтировать его, если это корневой раздел (пример):
sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /
Из "man Mount 8":
grpid or bsdgroups / nogrpid or sysvgroups These options define what group id a newly created file gets.
Когда установлен grpid, он принимает идентификатор группы каталога, в котором он создан; в противном случае (по умолчанию) он принимает fsgid текущего процесса, если для каталога не установлен бит setgid, и в этом случае он берет gid из родительского каталога, а также получает установленный бит setgid, если это сам каталог.
По умолчанию emacs создает файл резервной копии путем переименования. Из руководства emacs:
Emacs может переименовать исходный файл, чтобы он стал файлом резервной копии, а затем записать сохраняемый буфер в новый файл. После этой процедуры любые другие имена (т. Е. Жесткие ссылки) исходного файла теперь относятся к файлу резервной копии. Новый файл принадлежит пользователю, выполняющему редактирование, и его группа является по умолчанию для новых файлов, записанных пользователем в этом каталоге. Пользователем в этом каталоге.
Есть несколько способов изменить это.
Или специфичные для emacs:
Итак, добавьте в свой .emacs:
(setq backup-by-copying-when-mismatch 't)
На самом деле я предпочитаю 'newgrp dev', поскольку это явный переход из «личного» режима (файлы, которые я редактирую, принадлежат только мне), в режим группового разработчика (файлы, которые я сейчас редактирую, совместно используются группой).