【问题标题】:Permissions for new files in specific folder特定文件夹中新文件的权限
【发布时间】:2015-07-31 07:51:13
【问题描述】:

我有一个 Symfony2 应用程序在 vagrant vm 上的 apache 中运行。 Apache 以用户 www-data 运行,而 php 脚本通常以用户 vagrant 运行。

因为同步文件夹中的缓存速度很慢,所以我使用/dev/shm/project/cache/dev/shm/project/logs 作为我的日志。

我设置了这里提到的权限:http://symfony.com/doc/current/book/installation.html#book-installation-permissions

sudo setfacl -R -m u:"www-data":rwX -m u:"www-user":rwX -m u:"vagrant":rwX /dev/shm/project/cache /dev/shm/project/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:"www-user":rwX -m u:"vagrant":rwX /dev/shm/project/cache /dev/shm/project/logs

我的问题是,当我以 vagrant 运行 phpunit 时,缓存文件是使用以下权限创建的,这在通过 apache 访问它们时会出现问题,因为它会导致 RuntimeException "Failed to write缓存文件...”.

$ ls -la /dev/shm/project/cache/test
total 2320
drwxrwxr-x+ 7 vagrant vagrant    400 May 19 12:52 ./
drwxrwxr-x+ 3 root    root        60 May 19 12:52 ../
drwxrwxr-x+ 2 vagrant vagrant  38700 May 19 12:52 annotations/
-rw-r--r--+ 1 vagrant vagrant 233164 May 19 12:52 appTestDebugProjectContainerCompiler.log
-rw-r--r--+ 1 vagrant vagrant 538934 May 19 12:52 appTestDebugProjectContainer.php
-rw-r--r--+ 1 vagrant vagrant  57446 May 19 12:52 appTestDebugProjectContainer.php.meta
-rw-r--r--+ 1 vagrant vagrant 847598 May 19 12:52 appTestDebugProjectContainer.xml
-rw-r--r--+ 1 vagrant vagrant 174805 May 19 12:52 appTestUrlGenerator.php
-rw-r--r--+ 1 vagrant vagrant  16185 May 19 12:52 appTestUrlGenerator.php.meta
-rw-rw-r--+ 1 vagrant vagrant   5050 May 19 12:52 classes.map
drwxrwxr-x+ 3 vagrant vagrant     60 May 19 12:52 doctrine/
...

我不想在每次必须运行某些脚本时切换用户。我想要设置新文件的权限,以便两个用户都可以更改它们。

编辑:还有第三个用户:www-user。该用户是 fpm 的用户。所以实际上这个用户和 vagrant 用户必须拥有所有文件的读写权限。我已经改了acl,但是还是不行。

【问题讨论】:

    标签: php apache symfony debian vagrant


    【解决方案1】:

    您可以将当前用户 (vagrant?) 添加到 www-data 用户组,这与 Apache 用户相同。

    在类似的环境中,我使用了一个专用用户,属于该组。

    【讨论】:

    • 问题是,那个群成员也不能write
    • Apache 需要缓存目录的写入权限,否则您的应用将永远无法运行。
    • Apache 对缓存目录具有所需的写入权限。但它无权修改(写入)新创建的缓存文件。正如您在上面看到的那样,该组也是如此。
    【解决方案2】:

    您可以将 umask(0002) 添加到每 3 个用户的主目录中的 .profile(这是 linux 的方式,只是不确定 VM)

    将以下行放在应用程序/控制台的开头, web/app.php 和 web/app_dev.php 文件:

    umask(0002); // 这将使权限为 0775

    p.s: 3 个用户都必须属于 www-data 用户组

    【讨论】:

    • 已经尝试在 .php 文件中使用 umask 0002 并在运行 phpunit 之前作为命令执行。但是,对于-rw-r--r--+ 1 vagrant vagrant 40960 May 20 11:39 test.db 组,我的文件仍然不可写。
    • 您可以尝试将 umask 放入 .profile 配置文件吗?所以如果主目录是 /home/vagrant/ 然后把它放到 /home/vagrant/.profile ,清除缓存并再次运行控制台命令
    • 刚刚做到了;也适用于所有其他用户。我的 umask 是 0002,我在运行 phpunit 之前删除了现有文件。仍然所有创建的文件都是-rw-r--r--。不过有一个例外:文件夹是 drwxrwxr-x
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2015-10-18
    • 2014-10-18
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    相关资源
    最近更新 更多