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)配置有关?

Answers:


17

在包含的文件夹上,您需要将组更改为dev,然后将其标记为set-gid。

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

set gid位使在该文件夹中创建的文件继承该文件夹的组,并在任何新文件夹上标记setgid位。将文件移动到目录中时,您将需要小心,因为这将保留其现有权限。


仅是一种补救措施(请参阅我的答案)
asdmin


7

您还可以使用grpid mount选项挂载文件系统(假设ext2 / 3),这样一来,每当您在目录中创建新文件时,组所有者便与父目录相同。因此,您只需将这些文件所在的目录归组“ 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后,它将使用创建目录的组ID;否则,将使用该目录的组ID。否则(默认)它将使用当前进程的fsgid,除非目录设置了setgid位,在这种情况下,它将从父目录获取gid,并且如果它本身是目录,还将获取setgid位。


非常有用的珍闻知道+1
Frenchie

如果您创建或复制文件,这还将保留组的写权限吗?
KB

1

emacs的默认行为是通过重命名来创建备份文件。从emacs手册中:

Emacs可以重命名原始文件,使其成为备份文件,然后将保存的缓冲区写入新文件。执行此步骤之后,原始文件的任何其他名称(即,硬链接)现在都指向备份文件。新文件归执行编辑的用户所有,并且该组是该用户在该目录中写入的新文件(该目录中的用户)的默认文件。

有几种更改方法。

  • 如其他人所述,设置组和粘性位。
  • 在编辑文件之前运行“ newgrp dev”,以便您的默认组为dev。

或特定于emacs:

  • 在emacs中设置file-precious-flag,这会更改行为以保留组,但有其他副作用。
  • 在emacs中设置不匹配时通过复制进行备份,该操作使用复制而不是重命名(这会导致所有者或组发生更改)。

因此,添加到您的.emacs:

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

我的偏好实际上是'newgrp dev',因为它是从“个人”模式(我编辑的文件只是我的文件)到组dev模式(我现在编辑的文件在组之间共享)的显式切换。


这是最好的答案。
Christopher Neylan 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.