如何设置文件夹以便在其中创建的任何内容都继承权限?

ste*_*evc 21 permissions shared-folders

我有一个 /data 文件夹(实际上是一个分区),用于存放所有用户(在本例中为家庭成员)可以访问的所有数据。我们都有个人用户帐户,并且通常都在这台 PC 上随时登录。

我如何设置权限,以便我们所有人都可以保留对文件的访问权限,无论是谁创建它们,包括新文件夹?如果我创建一个文件夹,它会获取我的用户和组,因此其他人无法写入它。

enz*_*tib 19

另一种方法是使用访问控制列表,文件权限的超集。

首先我们要安装acl 安装ACL 包裹:

sudo apt-get install acl
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 14.04 之前,必须使用以下选项挂载分区acl才能工作。它可以添加到 中/etc/fstab,如

UUID=<XXXX>  /media/shared  ext4  noatime,acl  0  2
Run Code Online (Sandbox Code Playgroud)

或者对于已经挂载的文件系统

sudo mount -o remount,acl /media/shared
Run Code Online (Sandbox Code Playgroud)

接下来,您应该创建一个新组,所有允许以读/写模式访问共享的用户都将添加到该组中。我称之为usershare。可以使用已经存在的组。

sudo addgroup usershare
Run Code Online (Sandbox Code Playgroud)

现在我们将用户enzotib和添加steevc到该组:

sudo gpasswd -a steevc  usershare
sudo gpasswd -a enzotib usershare
Run Code Online (Sandbox Code Playgroud)

(下次登录时生效)。

然后我们将一个具有rwx组权限的 ACL 添加usershare到已经存在的所有文件中/media/shared

sudo setfacl -Rm g:usershare:rwX /media/shared
Run Code Online (Sandbox Code Playgroud)

最后,我们为从现在开始创建的所有文件添加一个具有rwx组权限的默认 ACLusershare/media/shared

sudo setfacl -d -Rm g:usershare:rwX /media/shared
Run Code Online (Sandbox Code Playgroud)

现在该usershare组的所有用户对/media/shared. 每个用户在他和其他人的主目录上的权限不受影响。

我测试了这个解决方案并且似乎有效,但欢迎提出建议和更正。

备注:在考虑的目录中创建的新文件和目录将具有该usershare组的写入权限,但在文件夹中复制或移动的文件将保留其原始权限。如果用户,据我所知,只需要对新创建的目录进行写访问,这不是问题。否则它应该手动修改权限。见这个答案就如何通过定义用户的umask为克服这个002


Pas*_*as_ 9

  1. 制作文件夹。

    例如:

    mkdir /mnt/family
    
    Run Code Online (Sandbox Code Playgroud)

    如果你需要给它们挂载分区......如果你需要的/etc/fstab是 ext4

    UUID=xxx    /mnt/family ext4    **rw,exec,defaults,auto,async   0   2**
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建组 myfam。

    addgroup myfam
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将一些用户添加到该组

    adduser papa myfam  
    adduser mom myfam
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在接受并给予许可。

    我认为你应该从改变开始umask

    12.04 中的默认文件系统权限和访问权限

    chown -R you.myfam /mnt/family  
    chmod -R g+rwx /mnt/family  
    
    Run Code Online (Sandbox Code Playgroud)

    现在最重要。该行创建setgid您在该文件夹下创建的任何内容,将您的用户作为所有者和组myfam。这让系统覆盖用户主要组。

    chmod -R g+s /mnt/family   
    
    Run Code Online (Sandbox Code Playgroud)


enz*_*tib 3

想到的最简单的事情是将每个用户添加到所有其他用户的组中。

然后将每个用户的 umask 从 022 更改为 002,这可以在/etc/profile.

编辑

第一步可以替换为以下内容:使所有用户都属于作为users主要组的组。

埃迪2

正如 @James_Henstridge 所建议的,在主目录上设置 setgid 位可以很方便,这样创建的新文件和目录将具有相同的组,而与用户无关。通过这种方式,您可以避免将该组设置users为用户的主要组。


jua*_*aco 0

我不明白,都是linux-linux、linux-windows、linux-???、使用Samba?、SSH?、Pigeons?;无论如何,您需要将其他人包含到您的用户名组(您的组)中,他们将获得与您相同的权限。