Symfony 在没有acl的应用程序/缓存上设置Perimmissions

Symfony 在没有acl的应用程序/缓存上设置Perimmissions,symfony,permissions,Symfony,Permissions,我已将app/cache/目录权限设置为0775(文件设置为664)。和根目录的所有者:www-data。 这是可行的,但当我清除缓存时,它将权限转换为0755(文件转换为644),所有者转换为root:root。 它应该这样做: $ rm -rf app/cache/* $ rm -rf app/logs/* $ APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\ -f

我已将
app/cache/
目录权限设置为0775(文件设置为664)。和根目录的所有者:www-data。 这是可行的,但当我清除缓存时,它将权限转换为0755(文件转换为644),所有者转换为root:root。 它应该这样做:

$ rm -rf app/cache/*
$ rm -rf app/logs/*

    $ APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
    $ sudo chmod +a "$APACHEUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
或者这个:

$ APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
$ sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
$ sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
但是acl在我的VPS中不起作用,而且我不能像这里说的那样进行更改:。 我在Symfony2文档中看到了这一点:

不使用ACL

如果您无权更改目录的ACL,则需要更改umask,以便缓存和日志目录可以组写或全局写(取决于web服务器用户和命令行用户是否在同一组中)。要实现这一点,请在app/console、web/app.php和web/app_dev.php文件的开头添加以下行:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777
注意,当您有权在服务器上访问ACL时,建议使用ACL,因为更改umask不是线程安全的。

问题是: 没有acl,有没有更安全的方法来正确设置权限?
使用
umask
是否危险?
在这种情况下,“非线程安全”是什么意思?

唯一的方法是将cli用户(运行缓存清除命令的用户)设置为与Web服务器用户相同。在您的情况下,这意味着将此文件的所有者从
root:www-data
更改为
www-data:www-data
,并与
www-data
用户一起运行cache clear命令

关于
umask
,根据PHP官方文档:

避免在多线程Web服务器中使用此函数。最好在创建文件后使用chmod()更改文件权限。使用umask()可能会导致并发运行脚本和Web服务器本身的意外行为,因为它们都使用相同的umask


希望这能有所帮助。

事实上,这是我最近一直在做的事情,也是我找到的唯一方法。