在Linux上获取新文件以继承组权限


87

我在Linux服务器上的权限有问题。我已经习惯了BSD。如果目录归某个组所有,则拥有该目录的用户不在其中,例如www-data,其中创建的文件将归该组所有。这很重要,因为我希望文件可以被Web服务器读取(我不会以root身份运行),但是用户仍然可以将新文件放入目录中。我无法将用户置于www-data中,因为这样他们就可以阅读所有其他用户的网站。

我希望网络服务器读取所有网站,我希望用户能够更改自己的网站。

目前,在文件夹上的权限设置如下。

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

BSD的标准行为是允许这种方式工作。我该如何让Linux做到这一点?


2
您可以使用ACL吗?
slm

Answers:


128

听起来您好像在描述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格式触摸文件

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

这将大致为您提供所需的声音。如果您确实想要您所描述的内容,我认为您需要借助访问控制列表功能来获得该(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-xg:apache:rx)。这将强制所有新文件仅r启用其位。


似乎提供了我想要的功能,谢谢。
约翰·泰特

这似乎也解决了我类似的问题。但是,我不太明白最后一句话:“这会强制所有新文件仅启用r位。” 为什么未启用x权限?有没有默认启用它的方法?
yaobin '16

1
@yaobin我认为这是安全的事情,您实际上并不希望默认情况下具有文件可执行文件
cdarken

这不起作用unzip吗?
datasn.io

@ datasn.io-查看的手册页unzip。特别是-X开关。
slm

36

TL:DR; 使文件继承容器文件夹的组:

$ chmod g+s somefolder

注意:它已包含在已接受的答案中,仅是摘录。


3
setgid表示文件和文件夹将具有正确的组,但是请记住,如果将文件移到树中,它们将没有配置正确的所有者。ACL方法可以解决此问题(通常)。
克里斯·摩根

@ChrisMorgan如何处理?在我看来,来自已接受答案的解决方案对已移动文件没有任何作用。
Dan M.

@DanM .:在文件模式下,您可以设置不继承的权限;但使用ACL,您设置权限继承(虽然孩子们可以指定自己认为是越权的访问控制列表),而在运行时检查。
克里斯·摩根

@ChrisMorgan是的。你是怎样做的?使用ACL表单接受的答案的解决方案不起作用。
Dan M.

10

作为对slm答案的补充,请注意,在ext2 / 3/4文件系统上,可以使用bsdgroups分区上的mount选项复制您描述的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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.