为什么这些 ACL 不起作用?

为什么这些 ACL 不起作用?

我正在尝试设置 ACL,以便在 Web 服务器目录中创建的新文件和目录的用户和组归 www-data 用户所有。我在另一台服务器上有完全相同的 ACL,它们工作正常。

andrew@sona:/srv/www$ getfacl .
# file: .
# owner: www-data
# group: www-data
user::rwx
group::rwx
group:www-data:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::r-x

andrew@sona:/srv/www$ mount | grep acl
/dev/xvda on / type ext3 (rw,noatime,errors=remount-ro,acl)
andrew@sona:/srv/www$ touch test.txt
andrew@sona:/srv/www$ ll
total 12
drwxrwxr-x+ 3 www-data www-data 4096 Sep  3 17:14 ./
drwxr-xr-x+ 3 root     root     4096 Sep  1 19:36 ../
-rw-rw-r--+ 1 andrew   andrew      0 Sep  3 17:14 test.txt

服务器是Ubuntu 12.04 LTS

Distributor ID: Ubuntu
Description:    Ubuntu 12.04.3 LTS
Release:    12.04
Codename:   precise

答案1

访问控制列表(ACL)提供一种细粒度的机制来控制使用权到文件/目录。它们不会更改或定义所有权。

default值定义目录中新创建的文件应“继承”哪个 ACL。这些似乎适用于/srv/www,因为您的新创建文件test.txt会获得一些 ACL(请注意+目录列表中的 )。

@Darius 链接的 SF 答案中给出了实现目标的要点:

chmod ug+s /srv/www

这就设置了设置用户 ID设置组 IDcoreutils 的信息手册解释了这个机制:

27.5 目录和设置用户 ID 位以及设置组 ID 位

在大多数系统中,如果设置了目录的 set-group-ID 位,则新创建的子文件将继承与目录相同的组,而新创建的子目录将继承父目录的 set-group-ID 位。在少数系统中,目录的 set-user-ID 位对新子文件的所有权和新子目录的 set-user-ID 位具有类似的影响。(...)

请注意“在少数系统上”的限制设置用户 ID位。事实上,无论是在我的 Debian 还是 openSuSE 系统上,所有者的继承都不起作用,只有组被传播。根据维基百科,这对于全部Linux 系统:

在 UNIX 和 Linux 系统上,目录上设置的 setuid 权限会被忽略。[4]可以配置 FreeBSD 将其解释为类似于 setgid,即强制所有文件和子目录由顶级目录所有者拥有。[5]

相关内容