Linux: потеря группового владения файлами

8

У меня есть проект с несколькими файлами, которые я создал в Linux.

И мне нужно было дать другому пользователю разрешение на запись на них. Поэтому я создал группу «dev», членами которой он и я, и изменил владельца файлов на эту группу.

Типичный файл теперь имеет следующие разрешения:

-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)?

Interstar
источник

Ответы:

17

В содержащей папке вы хотите изменить группу на dev, а затем использовать mark it set-gid.

chgrp dev <containing-folder>
chmod g+ws <containing-folder>

Бит set gid создает файлы, созданные в этой папке, для наследования группы папок, а также для пометки бита setgid в любых новых папках. Вы должны быть осторожны при перемещении файлов в каталог, так как это сохранит их существующие разрешения.

Frenchie
источник
только лекарство (см. мой ответ)
asdmin
8

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

chown :dev directory/
chmod g+s directory/
Дэн Карли
источник
только лекарство (см. мой ответ)
asdmin
7

Вы также можете смонтировать файловую систему (при условии, что ext2 / 3) с опцией монтирования grpid, которая сделает это так, что всякий раз, когда вы создаете новый файл в каталоге, он делает владельца группы таким же, как родительский каталог. Тогда вы просто сделаете так, чтобы каталог, в котором находятся эти файлы, принадлежал группе 'dev'.

Чтобы перемонтировать его, если это корневой раздел (пример):

sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /

Из «Человек крепление 8»:

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.

Когда установлен grpid, он принимает идентификатор группы каталога, в котором он создан; в противном случае (по умолчанию) он принимает fsgid текущего процесса, если только в каталоге не установлен бит setgid, в этом случае он берет gid из родительского каталога, а также получает установленный бит setgid, если это сам каталог.

Кайл Брандт
источник
Очень полезная новость: +1
Френчи
Сохранит ли это также разрешение на запись группы, если вы создадите или скопируете файл?
KB
1

Поведение по умолчанию для emacs - создать файл резервной копии путем переименования. Из руководства по emacs:

Emacs может переименовать исходный файл, чтобы он стал резервным файлом, а затем записать сохраняемый буфер в новый файл. После этой процедуры любые другие имена (т.е. жесткие ссылки) исходного файла теперь ссылаются на файл резервной копии. Новый файл принадлежит пользователю, выполняющему редактирование, и его группа используется по умолчанию для новых файлов, записанных пользователем в этом каталоге. Пользователем в этом каталоге.

Есть несколько способов изменить это.

  • Установите группу и закрепите, как другие описывают.
  • Запустите 'newgrp dev' перед редактированием файла, чтобы ваша группа по умолчанию была dev.

Или специфичные для Emacs:

  • Установите файл-драгоценный флаг в emacs, который изменяет поведение для сохранения группы, но имеет другие побочные эффекты.
  • Задайте несоответствие резервного копирования при копировании в emacs, которое использует копирование, а не переименование, когда это может привести к смене владельца или группы.

Итак, добавьте в ваш .emacs:

(setq backup-by-copying-when-mismatch 't)

На самом деле я предпочитаю 'newgrp dev', так как это явный переход от "личного" режима (файлы, которые я редактирую, только мои), к режиму группы dev (файлы, которые я сейчас редактирую, являются общими для группы).

jmanning2k
источник
это лучший ответ здесь.
Кристофер Нейлан