让 PHP 和普通用户编辑相同文件的三种方法

three ways to let PHP and a regular user edit the same files

我是一名网络开发人员,对于一些即将开展的项目,我想使用基于文件的 CMS。这意味着我在开始时创建的许多文件以后必须可以由 PHP 用户编辑,但对我的用户来说仍然是可编辑的(反之亦然)。我的 PC 运行 Debian 9,我喜欢它但不是很了解,我还刚刚用 Debian 9 设置了一个本地网络服务器用于备份和可能的文件共享。 (我是用Webmin来配置的,这反映了我的命令行技能水平)。

在我的在线共享主机上,PHP用户和FTP用户似乎是一样的,644/755权限也可以,这也是CMS推荐的我'我正在使用。我想在我的电脑上模仿这个,这样我就不必一直 fiddle 获得权限。但是我该怎么做呢?目前,我的普通用户 (anna) 无法访问 www-data 的文件,反之亦然。将它们放在同一个组中仍然意味着更改文件权限。让 anna 成为 PHP 用户是个坏主意(据我所知),因为 anna 拥有 sudo 权限。

到目前为止,我已经研究了三种我不太了解的可能解决方案,我想知道哪条路是最佳选择。

  1. 在我的计算机上本地开发并使用 apache-mpm-itk 或 suPHP 让 PHP 编辑文件(我从 this question on ServerFault 那里得到这个想法)。
  2. 在我的计算机上进行本地开发,然后 rsync 使用 grunt-rsync 将文件发送到我的服务器,然后以某种方式获取 rsync 以将所有权设置为 www-dataanother ServerFault thread helping here).
  3. 在我的计算机上使用 SSHFS 挂载项目的 server 目录,该目录属于 www-data,然后直接在服务器上编辑文件或者使用 grunt-copy.
  4. 从我的本地目录复制它们

您怎么看:从安全性和易用性的角度来看,哪种方法最好?或者你知道更好的吗?

感谢您花时间阅读和思考本文!
安娜~

我想通了!我最终阅读了有关 运行 PHP 作为 CGI 而不是作为 Apache 模块的内容,这将解决我的权限问题。另外,据我所知,当我是唯一一个在本地计算机上使用它的人时,无需采取额外的安全预防措施。

万一有人遇到这个可能会觉得有用的人,这是我所做的(基本上遵循these instructions):

  1. 我安装了php7.0-fpm
  2. 编辑 /etc/apache2/sites-enabled/000-default.conf 并在 </VirtualHost> 之前添加以下内容:

    DirectoryIndex index.php
    <LocationMatch "^(.*\.php)$">
        ProxyPass fcgi://127.0.0.1:9000/var/www/html
    </LocationMatch>
    
  3. 我激活了 Apache 模块 proxy_fcgi(通过 Webmin,它显然会自动重启 Apache)
  4. /etc/php/7.0/fpm/pool.d/www.conf中我注释掉了一条listen线并放另一个像这样:

    ; listen = /run/php/php7.0-fpm.sock
    listen = 127.0.0.1:9000
    
  5. 然后我用这个命令重启了PHP-FPM:/etc/init.d/php7.0-fpm restart(与说明,我在 Debian 9 上)。之后,phpinfo() 给了我服务器 API "FPM/FastCGI".
  6. 最后,我在三个地方将用户和组从 www-data 更改为 anna,两次 /etc/php/7.0/fpm/pool .d/www.conf 然后再次进入 /usr/lib/tmpfiles.d/php7.0-fpm.conf(这是最后一个位可能是 Ubuntu/Debian 具体的,感谢 Keith 的 comment on StackExchange).

就是这样! :-)