使用setfacl设置默认文件权限


1

我需要通过apache服务用户在httpd创建的新文件上设置默认ACL,以便创建文件时将GUID设置为开发者用户帐户(调用devs)和特定权限。

看起来我的SGID工作得很好,因为PHP网页创建的任何文件都有apache所有者和开发者组。但不是拥有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::---

的data.txt文件经通过的httpd / apache中执行的PHP脚本创建的。所有权设置正确(apache / devs),但不是使用用户或组的可执行权限创建的。

该服务器正在运行CentOS版本6.9(最终版)

有任何想法吗?

谢谢!

Answers:


1

Linux文件权限不受setgid目录位的影响。 设置组ID会导致使用目录的组ID创建文件,而不是创建者的组ID。

新创建的文件的权限由文件的创建者指定,并受到open或其他系统调用中的文件创建掩码(umask)的影响。要影响PHP中的文件权限,您可以使用fopenchmod等。

这可以在不使用ACL的情况下完成。这些命令完成同样的事情:

chmod g+s .
chgrp devs .

PHP从httpd创建可执行文件似乎不寻常和不安全。我希望你知道你在做什么。


是的,我明白你的意思了。这些主要是日志文件或调试信息,需要由apache创建并可由devs访问。所以没有理由获得可执行权限。我想我更想弄清楚,为什么不加入时执行我能得到将要创建的文件罚款或者rw-rw----还是r--r-----,但从来没有rwxrwx---。没有真正计划将它留在那里,特别是在生产中。谢谢!
Justin
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.