我希望Web服务器读取所有网站,我希望用户能够更改自己的网站。
此刻,对文件夹的权限设置如下。 ..
drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john
BSD上的标准行为是允许这种方式工作。如何使Linux做到这一点?
#1 楼
听起来好像您在描述setgid位功能,其中设置了目录的地方将强制其中创建的所有新文件将其组设置为与父目录上设置的组相同。示例
$ whoami
saml
$ groups
saml wheel wireshark
设置具有权限+所有权的目录
$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/
以saml in的方式触摸文件这个目录
$ whoami
saml
$ touch somedir/afile
$ ll somedir/afile
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile
这将大致为您提供所需的声音。如果您确实确实想要您所描述的内容,那么我认为您需要借助访问控制列表功能来获取该(ACL)。
ACL
如果您想要更多地控制在目录
somedir
下创建的文件的权限,可以添加以下ACL规则来设置默认权限,如下所示。之前
$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir
设置权限
$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/
请注意
+
的末尾,这意味着该目录已应用ACL。 $ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---
之后
$ touch somedir/afile
$ ll somedir/afile
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$
$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x #effective:r--
group:apache:r-x #effective:r--
mask::r--
other::---
设置了默认权限(
setfacl -Rdm
)的通知,以便将权限设置为(默认情况下(r-x
)。这将强制所有新文件仅启用其g:apache:rx
位。评论
似乎可以提供我想要的功能,谢谢。
–约翰·泰特(John Tate)
2014年2月18日在1:46
这似乎也解决了我类似的问题。但是,我不太明白最后一句话:“这会强制所有新文件仅启用r位。”为什么未启用x权限?有没有默认启用它的方法?
–姚斌
16年4月6日在18:20
@yaobin我认为这是安全的事情,您真的不希望默认情况下具有可执行文件
– cdarken
16年11月8日在11:30
这不适用于解压缩吗?
–datasn.io
19 Mar 6 '19 at 2:07
@ datasn.io-查看解压缩的手册页。特别是-X开关。
–slm♦
19 Mar 6 '19 at 3:17
#2 楼
TL:DR;要使新文件继承容器文件夹的组,请执行以下操作:$ chmod g+s somefolder
注意:其隐含在已接受的答案中,这只是一个摘要。
评论
setgid表示新文件和文件夹将具有正确的组,但是请记住,如果将文件移动到树中,则不会配置正确的所有者。 ACL方法可以解决此问题(通常)。
–克里斯·摩根(Chris Morgan)
18年5月29日在11:23
@ChrisMorgan如何处理?在我的情况下,接受的答案中的解决方案对移动的文件没有任何作用。
– Dan M.
19年4月3日在11:00
@DanM .:在文件模式下,您可以设置不继承的权限;但是使用ACL,您可以设置继承的权限(尽管子级可以指定自己的ACL来覆盖该权限),并在运行时进行检查。
–克里斯·摩根(Chris Morgan)
19年4月7日在14:18
@ChrisMorgan是的。你是怎样做的?使用ACL表单接受的答案的解决方案不起作用。
– Dan M.
19年4月8日在13:06
我必须添加-R以使设置向下传播到目录树
–isapir
19/12/8在0:31
#3 楼
作为对slm答案的补充,请注意,在ext2 / 3/4文件系统上,可以使用分区上的bsdgroups
挂载选项复制您描述的BSD行为。在mount(1)
手册页中:grpid|bsdgroups and nogrpid|sysvgroups
These options define what group id a newly created file gets.
When grpid is set, it takes the group id of the directory in
which it is created; otherwise (the default) it takes the fsgid
of the current process, unless the directory has the setgid bit
set, in which case it takes the gid from the parent directory,
and also gets the setgid bit set if it is a directory itself.
评论
可以使用ACL吗?