如何在特定目录内强制对创建文件的组和权限?


27

对于从/ var / www目录中的testuser帐户创建的文件,我需要它们具有g + rwx作为权限,并且具有www-data作为组。

我该如何实现?

我正在通过SSH创建文件。


1
您的用户如何创建文件?通过FTP stor/ appe?通过HTTP PUT吗?通过外壳帐户?这些细节很重要,因为它们会极大地影响可能的答案,因此需要您提出问题。
JdeBP 2012年

感谢您的输入:),我正在通过SSH创建所有内容。
甘多先生2012年

Answers:


53

要设置组,给/var/wwwsetgid的位:

chgrp www-data /var/www
chmod g+s /var/www

还要调整子目录: find /var/www -type d -exec chmod g+s {} +

这将使所有新创建的文件继承父目录的组,而不是用户的组。


要设置默认的组权限,您将必须使用ACL。设置“默认” ACL:

setfacl -m "default:group::rwx" /var/www

还要调整子目录: find /var/www -type d -exec setfacl -m d:g::rwx {} +

注意:文件系统必须启用ACL支持。有时默认情况下它是打开的;在ext3ext4上,您可能会得到“不支持操作”,在这种情况下,必须手动启用它:

  • 对于当前安装的文件系统: mount -o remount,acl /

  • 永久- 以下方法之一

    • 在fstab级别:编辑/etc/fstabacl在选项字段中具有

    • 在文件系统级别: tune2fs -o acl /dev/diskname


您无法使用chmod -R g + s / var / www获得子目录吗?似乎您不应该需要find命令。
bobpaul 2014年

4
@bobpaul:不,因为chmod还会获取所有文件。
grawity 2014年

请注意,某些命令(尤其是某些命令)install设法绕过目录默认ACL。
Ulrich Schwarz

@grawity这是一个非常好的答案,我敢肯定我的问题有解决方案,但是我无法解决。我有一个/var/www/html/projects文件夹,当www-data创建文件时,它具有rw-rw-r权限,但是当我在控制台中执行某些操作时,它使用创建一个文件rw-r--r。如何强制新创建的文件始终具有rw-rw-r权限?
lewis4u

@ lewis4u:全局还是按目录?全局(按进程划分)的默认权限由控制umask。每个目录的默认权限可以通过setfacl在主帖子中使用来更改。
grawity

3

这可能会使一些人对setgid的“原始性”答案感到困惑,如果文件夹的组不同于您自己的组,则可能需要以root用户身份运行chmod,但是不会出现任何错误,表明您需要执行此操作。

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

在碰到这个之前,我正在拔头发。谢谢。
AndrewStevens

0

用户正在创建的文件组就是该用户的组(在/ etc / group中)。权限由UMASK参数控制, 请参阅此

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.