【问题标题】:How to correctly configure ownerships / rights for a Symfony2 website on Debian如何在 Debian 上正确配置 Symfony2 网站的所有权/权限
【发布时间】:2015-03-27 13:37:42
【问题描述】:

我想管理一个 Claroline 网站(基于 Symfony 2)。所以对于我的网站 mysymfony.com 为用户“theclient”安装

1 - 0 我将客户端添加到 www-data 组:adduser theclient www-data

1 - 1 - 修改 /etc/hosts :

127.0.0.1   mysymfony.com

1 - 2 创建虚拟主机 /etc/apache2/sites-available/mysymfony.com :

<VirtualHost *:80> 
        ServerName mysymfony.com 
        DocumentRoot /var/www/mysymfony.com 
        <Directory /var/www/mysymfony.com/> 
                Options -Indexes 
                AllowOverride all 
                Order allow,deny 
                allow from all 
        </Directory> 
        ErrorLog ${APACHE_LOG_DIR}/error.log 
</VirtualHost> 

1 – 3 - 已激活:a2ensite mysymfony.com

1 – 4 - 重新加载服务器:service apache2 reload

1 - 5 - 链接到 var/www :

ln -s /home/theclient/www/mysymfony.com/ /var/www/mysymfony.com 

然后作为根我:

1 – 6 - 更改所有权:chown -hR theclient:www-data /home/theclient/www/mysymfony.com

1 – 7 - 更改权限:chmod -R 755 /home/theclient/www/mysymfony.com 以及可以写入的目录和文件:

chmod 775 app/cache/ app/logs/ app/config/ files/ templates/ vendor/ web/
chmod -R 775 app/cache/ app/logs/ vendor/ web/ 
chmod 775 composer.json composer.lock app/config/bundles.ini app/config/parameters.yml app/config/platform_options.yml

使用此配置,我可以正确安装网站(使用基于 web 安装程序或控制台的)。

如果我以 root 身份安装插件,插件目录,其内容,所有 Symfony 配置文件和缓存文件是 root:root => 我需要重做一个 :chown -hR theclient:www-data /home/theclient/www/mysymfony.com 上传的文件属于 www-data:www-data (这是预期的,但对于来自用户 theclient 的脚本不实用。刷新缓存(以 root 身份)时会发生相同的文件/目录所有权“问题”

所以这不是错误,但如果我希望能够每天管理这个站点(开发/尝试/安装插件、刷新缓存、升级......)

所以我的问题是您能否提供一种“精确”的方式来设置这种网站(权利/所有权、管理......)?

除了初始设置外,还应该使用“chown”和“chmod”吗? 谢谢

【问题讨论】:

    标签: php symfony file-ownership


    【解决方案1】:

    好的,我现在看到你的问题了。这是您的网络服务器设置。

    你没有将 symfony 作为客户端运行(如果你使用 web 服务器 php 而不是 php-cli)但是你作为用户 www-data 运行它。我假设您使用 apache 和 mod_php?这通常是一个坏主意。有两种解决方案:

    1. 保持当前设置,但是你必须运行 php-cli(composer 和 symfony 命令)作为 www-data 并且很多文件将归 www-data:www-data 所有,但这没问题,因为您的客户端在 www-data 组中并且可以读取和写入这些文件。但这不是一个好的做法(您必须依赖 openbase_dir 否则您的客户端可以读取您所有的 www-data 文件)。
    2. 将您的 webstack 更改为使用 apache + mod_proxy_fcgi + php-fpm 然后您可以以正确的用户身份运行 php 并且您的所有问题(以及更多 mod_php)都消失了。有很好的安装php-fpm的教程:https://wiki.apache.org/httpd/PHP-FPM

    【讨论】:

    • 谢谢。事实上,我使用 apache 和 mod_php。我将研究您的解决方案 apache+mod_proxy_fcgi+php-fpm。我从来不知道 mod_php 会是一个“坏”的想法,就我而言,出于所有权原因。
    【解决方案2】:

    您回答了自己的问题:

    如果我以 root 身份安装插件,插件目录、其内容、所有 Symfony 配置文件和缓存文件都是 root:root

    不要以 root 身份运行 composer 或 symfony 脚本!你为什么要?以客户端用户身份运行。

    如果你有 sudo,你可以打开一个 shell 作为“客户端”:

    sudo -s -u theclient
    

    【讨论】:

    • 我不确定这意味着什么。 (我应该为客户端设置特殊的 visudo 行)。在任何情况下,如果作为客户端,我这样做:composer update 在我的 symfony 目录中,在 composer json 中添加一行后,安装正常,直到 symfony 尝试清除缓存然后抛出错误,因为某些缓存目录/文件是由 www-data:www-data (这是预期的)而不是(thecleint:www-data)生成的,尽管我将客户端添加到 www-data 组。那么在这个其他错误情况下 sudo 会帮助我吗?在那种特殊情况下,我只能以 root 身份(或 www-data 可能)刷新缓存并执行显示...
    • 好的,我现在看到你的问题了。这是您的网络服务器设置。您不将 symfony 作为客户端运行(如果您使用 web 服务器 php 而不是 php-cli),而是作为用户 www-data 运行它。我假设您使用 apache 和 mod_php?这通常是一个坏主意。有两种解决方案:
    • 我添加了一个新答案,因为评论太长了,我可以在第一次保存后 5 分钟编辑它。
    【解决方案3】:

    官方文档中概述了解决此问题的 4 种精确方法:http://symfony.com/doc/current/book/installation.html#running-the-symfony-application 只需向下滚动到“设置权限”:)

    【讨论】:

    • 感谢您的链接,但这仅适用于应用程序/日志应用程序/缓存。安装插件时怎么样(参见上面的):我为供应商插件集获得了 root:roo。更一般地说,这种网站的一般设置(或设置工作流程)应该是什么(即具有动态生成的内容和控制台管理)
    猜你喜欢
    • 1970-01-01
    • 2016-01-25
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多