Linux:失去文件的组所有权

int*_*tar 8 linux files permissions

我有一个项目,其中包含在 Linux 中创建的许多文件。

我需要给另一个用户写权限。所以我创建了一个“开发”组,他和我都是其中的成员,并将文件的所有权更改为该组。

一个典型的文件现在具有以下权限:

-rw-rw-r--  1 phil dev   5617 Jul 14 15:45 profile.html
Run Code Online (Sandbox Code Playgroud)

但是,当我编辑文件 profile.html 时,它会像这样还原给我,而我的同事就失去了编辑能力。

-rw-rw-r--  1 phil phil  5617 Jul 14 15:45 profile.html
Run Code Online (Sandbox Code Playgroud)

我如何避免它像这样恢复?改变所有权是错误的做法吗?或者是用错误的选项完成的?还是这与我的编辑器(emacs)配置有关?

Fre*_*hie 17

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

chgrp dev <containing-folder>
chmod g+ws <containing-folder>
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*ley 8

您可以在目录上使用setgid 位来保留孩子的组所有权。

chown :dev directory/
chmod g+s directory/
Run Code Online (Sandbox Code Playgroud)


Kyl*_*ndt 7

您还可以使用 grpid 挂载选项挂载文件系统(假设 ext2/3 ),这样无论何时在目录中创建新文件,它都会使组所有者与父目录相同。那么你就可以让这些文件所在的目录归'dev'组所有。

如果它是根分区(示例),则重新挂载它:

sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /
Run Code Online (Sandbox Code Playgroud)

来自'man mount 8':

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.
Run Code Online (Sandbox Code Playgroud)

当设置 grpid 时,它采用创建它的目录的组 ID;否则(默认)它采用当前进程的 fsgid,除非目录设置了 setgid 位,在这种情况下,它从父目录中获取 gid,如果它是一个目录本身,它也会获取 setgid 位设置。