foo
,两个用户都是GROUPNAME的成员(使用Linux和ext3)。 如果我以爱丽丝用户身份在
foo
下保存文件,则权限为:-rw-r--r-- Alice Alice
。但是,是否有可能实现在foo
的某个子目录下保存的每个文件都具有-rwxrwx--- Alice GROUPNAME
的权限(即所有者Alice,组GROUPNAME)?#1 楼
您可以使用umask
来控制分配的权限位,并通过将目录setgid设置为GROUPNAME
来控制组。$ umask 002 # allow group write; everyone must do this
$ chgrp GROUPNAME . # set directory group to GROUPNAME
$ chmod g+s . # files created in directory will be in group GROUPNAME
请注意,每执行一次子目录;它不会自动传播(也就是说,setgid目录下的现有目录或后续创建的目录都不会被setgid设置,尽管后者将在组
chgrp
中)。并应用于该进程及其子级创建的所有文件(它们继承了在chmod
时在其父级生效的GROUPNAME
)。用户可能需要在umask
中进行设置,并且可能需要注意与目录无关的需要不同权限的内容。如果您在做不同的事情时需要不同的设置,则模块可能很有用。应该可以同时指定一个权限掩码和一个组,并使它们合理地传播。但是,对POSIX ACL的支持有些变化。评论
在父目录上设置setgid之后创建的子目录将自动设置setgid。
–Arrowmaster
2011年5月8日在21:14
@Arrowmaster:在某些系统上,也许,但不是全部;我在OSX上进行了测试,但它至少在非root用户中不会传播。
– geekosaur
11年5月8日在21:16
在Debian上(我假设大多数其他Linux发行版),setgid和组名都可以传播。
–Arrowmaster
2011年5月8日在21:19
在OS X上,目录中的setgid位仅被忽略;新文件和目录总是被赋予其包含目录的组。
– John Flatness
2011年5月9日,下午1:52
复制或移动到foo(使用cp或mv的文件)的文件是否也可能自动获得所需的权限(-rwxrwx --- A G)?
–学生
2011年5月10日20:15
#2 楼
如果可能,请使用访问控制列表(ACL)。在Linux下,请确保您使用的文件系统支持ACL(大多数UNIX文件系统都支持)。您可能需要更改安装选项以启用ACL:对于ext2 / ext3 / ext4,您需要显式指定
acl
安装选项,因此/etc/fstab
中的条目应类似于/dev/sda1 / ext4 errors=remount-ro,acl 0 1
。运行mount -o remount,acl /
激活ACL,而无需重新启动。还要安装ACL命令行工具getfacl
和setfacl
(通常在称为acl
的软件包中提供)。一次性设置已结束,请更改目录的ACL以授予组写权限并进行设置。这些权限由新创建的文件继承。在Linux下:
setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory
如果没有ACL,则将该目录设置为组
GROUPNAME
所拥有,并将其权限设置为2775或2770:chmod g+rwxs /path/to/directory
。这里的s
表示setgid位;对于目录,这意味着在此目录中创建的文件将属于拥有该目录的组。您还需要设置Alice和Bob的umask,以使所有文件都可以通过以下方式进行组写入:默认。大多数系统上的默认umask是022,这意味着文件可以具有除按组和其他方式写入以外的所有权限。将该值更改为002,表示仅禁止他人写许可。您通常会将该设置放入您的
~/.profile
中:umask 002 # or 007 to have files not readable by others
评论
+1-非常彻底的答案。我不知道有人可以即时重新安装。很高兴知道。
– boehj
2011年5月8日19:56
setfacl -d命令对我不起作用,因为该目录中包含的文件具有r-掩码,该掩码会否定任何写权限。希望有所帮助。参见unix.stackexchange.com/questions/71743/…
–本·麦肯(Ben McCann)
13年4月8日在22:26
@its_me Q1:我显示了带有remount选项的安装命令,因此它不使用fstab。两次拥有acl意味着已经使用acl选项挂载了文件系统,并且它是无害的。顺便说一下,acl是ext4在最近的内核中的默认设置(当我编写此答案时,该补丁仍是全新的)。 Q2:您可以按任何顺序运行命令。
–吉尔斯'所以-不再是邪恶的'
14年6月18日在21:30
@its_me是的,您的理解是正确的,只是您添加条目的顺序无关紧要
–吉尔斯'所以-不再是邪恶的'
14年6月18日在21:39
您应该改善答案,然后使用GROUPNAME而不是G,以使其更清晰
– knocte
16年8月16日在18:28
#3 楼
这个问题非常适合linuxacl
。由于您没有声明您的操作系统,因此我将假设使用Linux。这是一个示例会话。我不知道一个真正好的
acl
教程,但是您可以做得比http://www.vanemery.com/Linux/ACL/linux-acl更糟。 html 请注意,默认的
acl
的行为类似于本地umask。由于至少在Linux中,umask是全局应用的,所以这是我知道获得本地umask效果的唯一方法。由于某种原因,这是一个鲜为人知的功能。人们到处都在询问有关本地umask覆盖的问题,但网上几乎到处都是,但似乎没有人考虑使用acl
。还请注意,您需要挂载正在使用
acl
支持的分区。 /dev/mapper/debian-acl /mnt/acl ext3 defaults,acl 0 2
会话如下:
/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x
将
foo
的组设置为staff
并设置acl将foo
的组和用户的数量设置为rwx
。/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
还将用户和组的默认acl设置为
rwx
。这定义了文件和目录从foo
继承的权限。因此,在foo下创建的所有文件和目录将具有组权限rw
。/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---
现在,以
foo
和faheem
用户身份在john
中创建一些文件。 > /mnt/acl$ cd foo
/mnt/acl/foo$ touch bar
# switch to user john for this next command.
/mnt/acl/foo$ touch baz
列出文件。请注意,
faheem
拥有的文件和john
拥有的文件都是使用组许可权rw
创建的。/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff 1024 May 9 01:22 .
drwxr-xr-x 4 faheem faheem 1024 May 9 01:20 ..
-rw-rw---- 1 faheem faheem 0 May 9 01:20 bar
-rw-rw---- 1 john john 0 May 9 01:22 baz
评论
相关:如何处理ACL权限,以及它们以什么顺序应用于给定的用户操作?