让 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
权限。
到目前为止,我已经研究了三种我不太了解的可能解决方案,我想知道哪条路是最佳选择。
- 在我的计算机上本地开发并使用
apache-mpm-itk
或 suPHP 让 PHP 编辑文件(我从 this question on ServerFault 那里得到这个想法)。
- 在我的计算机上进行本地开发,然后
rsync
使用 grunt-rsync
将文件发送到我的服务器,然后以某种方式获取 rsync
以将所有权设置为 www-data
(another ServerFault thread helping here).
- 在我的计算机上使用 SSHFS 挂载项目的 server 目录,该目录属于
www-data
,然后直接在服务器上编辑文件或者使用 grunt-copy
. 从我的本地目录复制它们
您怎么看:从安全性和易用性的角度来看,哪种方法最好?或者你知道更好的吗?
感谢您花时间阅读和思考本文!
安娜~
我想通了!我最终阅读了有关 运行 PHP 作为 CGI 而不是作为 Apache 模块的内容,这将解决我的权限问题。另外,据我所知,当我是唯一一个在本地计算机上使用它的人时,无需采取额外的安全预防措施。
万一有人遇到这个可能会觉得有用的人,这是我所做的(基本上遵循these instructions):
- 我安装了
php7.0-fpm
编辑 /etc/apache2/sites-enabled/000-default.conf 并在 </VirtualHost>
之前添加以下内容:
DirectoryIndex index.php
<LocationMatch "^(.*\.php)$">
ProxyPass fcgi://127.0.0.1:9000/var/www/html
</LocationMatch>
- 我激活了 Apache 模块
proxy_fcgi
(通过 Webmin,它显然会自动重启 Apache)
在/etc/php/7.0/fpm/pool.d/www.conf中我注释掉了一条listen线并放另一个像这样:
; listen = /run/php/php7.0-fpm.sock
listen = 127.0.0.1:9000
- 然后我用这个命令重启了PHP-FPM:/etc/init.d/php7.0-fpm restart(与说明,我在 Debian 9 上)。之后,phpinfo() 给了我服务器 API "FPM/FastCGI".
- 最后,我在三个地方将用户和组从
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).
就是这样! :-)
我是一名网络开发人员,对于一些即将开展的项目,我想使用基于文件的 CMS。这意味着我在开始时创建的许多文件以后必须可以由 PHP 用户编辑,但对我的用户来说仍然是可编辑的(反之亦然)。我的 PC 运行 Debian 9,我喜欢它但不是很了解,我还刚刚用 Debian 9 设置了一个本地网络服务器用于备份和可能的文件共享。 (我是用Webmin来配置的,这反映了我的命令行技能水平)。
在我的在线共享主机上,PHP用户和FTP用户似乎是一样的,644/755权限也可以,这也是CMS推荐的我'我正在使用。我想在我的电脑上模仿这个,这样我就不必一直 fiddle 获得权限。但是我该怎么做呢?目前,我的普通用户 (anna
) 无法访问 www-data
的文件,反之亦然。将它们放在同一个组中仍然意味着更改文件权限。让 anna
成为 PHP 用户是个坏主意(据我所知),因为 anna
拥有 sudo
权限。
到目前为止,我已经研究了三种我不太了解的可能解决方案,我想知道哪条路是最佳选择。
- 在我的计算机上本地开发并使用
apache-mpm-itk
或 suPHP 让 PHP 编辑文件(我从 this question on ServerFault 那里得到这个想法)。 - 在我的计算机上进行本地开发,然后
rsync
使用grunt-rsync
将文件发送到我的服务器,然后以某种方式获取rsync
以将所有权设置为www-data
(another ServerFault thread helping here). - 在我的计算机上使用 SSHFS 挂载项目的 server 目录,该目录属于
www-data
,然后直接在服务器上编辑文件或者使用grunt-copy
. 从我的本地目录复制它们
您怎么看:从安全性和易用性的角度来看,哪种方法最好?或者你知道更好的吗?
感谢您花时间阅读和思考本文!
安娜~
我想通了!我最终阅读了有关 运行 PHP 作为 CGI 而不是作为 Apache 模块的内容,这将解决我的权限问题。另外,据我所知,当我是唯一一个在本地计算机上使用它的人时,无需采取额外的安全预防措施。
万一有人遇到这个可能会觉得有用的人,这是我所做的(基本上遵循these instructions):
- 我安装了
php7.0-fpm
编辑 /etc/apache2/sites-enabled/000-default.conf 并在
</VirtualHost>
之前添加以下内容:DirectoryIndex index.php <LocationMatch "^(.*\.php)$"> ProxyPass fcgi://127.0.0.1:9000/var/www/html </LocationMatch>
- 我激活了 Apache 模块
proxy_fcgi
(通过 Webmin,它显然会自动重启 Apache) 在/etc/php/7.0/fpm/pool.d/www.conf中我注释掉了一条listen线并放另一个像这样:
; listen = /run/php/php7.0-fpm.sock listen = 127.0.0.1:9000
- 然后我用这个命令重启了PHP-FPM:/etc/init.d/php7.0-fpm restart(与说明,我在 Debian 9 上)。之后,phpinfo() 给了我服务器 API "FPM/FastCGI".
- 最后,我在三个地方将用户和组从
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).
就是这样! :-)