我需要在以下用户创建的新文件上设置默认 ACL:httpd通过阿帕奇服务用户,这样创建的文件的 GUID 设置为 dev 用户帐户(我们称之为开发者) 以及特定权限。
看起来我已经让 SGID 工作正常了,因为任何由 PHP 网页创建的文件都有阿帕奇所有者和开发者rwxrwx---
组。但是他们没有 的 ACL,而是有rw-rw----
。
[root@webserver ~]# cd /var/www/html
[root@webserver html]# setfacl -Rb .
[root@webserver html]# chmod -R g+s .
[root@webserver html]# setfacl -Rdnm u:apache:rwx,g:devs:rwx .
[root@webserver html]# getfacl .
# file: .
# owner: apache
# group: devs
# flags: -s-
user::rwx
group::rwx
other::---
default:user::rwx
default:user:apache:rwx
default:group::rwx
default:group:devs:rwx
default:mask::rwx
default:other::---
[root@webserver html]# getfacl data.txt
# file: data.txt
# owner: apache
# group: devs
user::rw-
user:apache:rwx #effective:rw-
group::rwx #effective:rw-
group:devs:rwx #effective:rw-
mask::rw-
other::---
这数据.txt文件是通过 httpd/apache 执行的 PHP 脚本创建的。所有权已正确设置(阿帕奇/开发者),但它不是使用用户或组的可执行权限创建的。
该服务器运行的是 CentOS 版本 6.9(最终版)
有任何想法吗?
谢谢!
答案1
Linux 文件权限不受setgid
目录上的位的影响。 设置组 ID导致使用目录的组 ID 而不是创建者的组 ID 创建文件。
新创建文件的权限由文件创建者指定,并受open
或其他系统调用中的文件创建掩码 (umask) 的影响。要影响 PHP 中的文件权限,您可以使用fopen
或chmod
等。
无需使用 ACL 即可完成此操作。这些命令完成相同的操作:
chmod g+s .
chgrp devs .
PHP 从 httpd 创建可执行文件似乎不寻常且不安全。我希望你知道自己在做什么。