假设我的服务器上有 3 个用户:
/home/bob
/home/joe
/home/fred
我想创建一个文件夹,/share
bob 和 joe 都可以在其中添加和删除文件。我希望添加到该目录的所有文件都具有权限,以便两个用户都可以修改或删除它们。
问题是,在 中创建目录时/share/
,它们的创建权限是所有者的。如果在 /shared 中创建文件夹,则该文件夹属于创建者,其他人都无法修改/删除其内容。
我需要让此文件夹的行为使得其中创建的所有内容对每个人都具有完全的 rwx 权限。
答案1
使用组
就像 Trevor 所说的那样,您可以创建一个组,并授予该组对该文件夹的读取、写入和执行权限。
要创建组:
sudo groupadd groupname
您可以使用任何内容代替组名,只需记住它是什么!接下来,让我们在 /share 中创建一个文件夹
sudo mkdir /share
将该文件夹的组设置为创建的组,并设置权限
sudo chgrp groupname /share
sudo chmod 775 /share
/share
记得将组名更改为您创建的组名!您可以看到我们将的权限更改为775
,下面是对此含义的解释。
7
在第一个位置,这赋予文件夹所有者读取(列出文件夹中的文件)、写入(创建/删除文件夹中的文件)和执行(能够cd
进入该文件夹)的权限。在我们的例子中,文件夹的所有者是 root。
7
在第二个位置,这为文件夹的组提供了读取、写入和执行权限。在我们的例子中,文件夹的组是groupname
或您将其设置为的任何值。
5
最后,这为公众(任何可以登录系统的人)提供了读取和执行权限。这允许他们进入cd
文件夹并使用ls
或类似命令列出文件。如果您想阻止其他人cd
进入文件夹,您可以使用0
而不是5
,这意味着他们没有权限。
要将用户添加到组,以便可以使用组权限,我们可以使用:
sudo usermod -a -G groupname [username]
确保将组名和 [用户名] 更改为正确的值。
笔记:一个用户只能属于一个主组,但可以属于多个次组。我提供的命令为指定的用户添加了另一个次组。
使用 ACL
我认为另一种更复杂的解决方案是使用 ACL(即访问控制列表)。这允许您向特定用户授予特定权限,而无需使用组或更改所有者。要使此方法有效,必须使用选项安装文件系统acl
。
准备使用 ACL
首先,我们必须检查驱动器是否已作为 ACL 安装。由于文件夹位于/share
根 ( /
) 分区中,因此我们必须确保根分区已使用该acl
选项安装。
笔记:文件夹不一定/home
位于根分区内,/home
文件夹可以是它自己的分区。这也适用于其他分区。
要确定分区是否启用了 ACL,我们可以使用该mount
命令。
mount -l
对我来说,这是第一行。
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
我们可以看到分区/dev/sda5
被挂载在/
。你的分区可能不在第一行,就像我的一样。它可能在第二行、第三行,但它应该被挂载在/
,因为我们的分区就在那里/share
。
现在,我们需要确定我们是否有这个acl
选择。
tune2fs -l [partition path]
从我的输出中mount -l
您可以看到我的分区路径是/dev/sda5
,您的可能不同。
运行该命令后我们将得到类似这样的结果:
tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 5e7b3dcf-cda0-4a74-ab0e-67c9ce8ab044
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
~cut off to save space~
在默认挂载选项行中,我们可以看到我们已acl
启用。如果你尚未acl
启用,你可以使用 Google 查找如何启用。
现在,与组的方法一样,您需要创建文件夹:
sudo mkdir /share
最后一件事,我们必须将文件夹设置为700
,这样只有 root(以及被 ACL 授予访问权限的人)才能访问该文件夹:
sudo chmod 700 /share
现在我们可以设置访问控制。
笔记:设置权限,不使用 acl,而是使用chmod
,将导致 acl 权限被重置。
设置 ACL 权限
现在有点简单了,如果你想为用户设置权限,你可以使用
sudo setfacl -m "u:[username]:rwx" /share
这将授予 [用户名] rwx(读取、写入、执行)权限。之所以sudo
需要,是因为 /share 归 root 所有。
对于团体使用:
sudo setfacl -m "g:[groupname]:rwx" /share
对于其他/公众(仅包括能够登录系统的人员)使用:
sudo setfacl -m "o:rwx" /share
笔记:您可以将其换成rwx
其他的,比如rx
只读/执行。
笔记:如果您-d
在使用setfacl
( setfacl -d -m "u:...
) 时传递选项,这将为文件夹设置默认 ACL 值。这将导致添加到文件夹的任何新文件自动具有您应用的权限。
答案2
編輯:
创建一个用户组,右键单击所需的文件夹并为该组设置适当的权限!希望这能有所帮助!