作为一个极端的新手,我在管理我的第一个盒子的所有权和权限方面遇到了困难。我无法弄清楚如何使用一个用户进行部署,我们将调用他deploy
并使用用户操作我的 php 应用程序www-data
。
目前,我知道我的服务器通过www-data
此功能运行<?php echo(exec("whoami")); ?>
,但每次部署时都必须chown
在部署和 www-data 之间进行切换。必须有一种更简单的方法,既可以部署一个用户,又可以作为 www-data 运行。
编辑:以下是 ls-l 在相关文件夹上的输出。您将看到用户部署和组 www-pub,该组是试图将两个不同的用户添加到一个新组,并将其中一个用户 chown,希望他们俩都拥有权限(新手警报)
drwxrwxr-x 4 deploy www-pub 4096 Mar 7 01:41 example.com
我使用 capistrano 在用户下进行部署部署然后一旦完成,我就将 chown 改为 www-data,否则我无法使用 php 来操作文件。我也不确定如何更改 apache 正在运行的用户。
答案1
我反复阅读了好几遍,看看我理解得是否正确。所有权似乎被分解如下:
- httpd 进程:
www-data
用户 - 要服务的 PHP 脚本:
deploy
用户 - PHP脚本写入的数据:
www-data
用户
我的问题是,我不明白这其中的两难。我认为事情就该如此。
如果 Web 服务器可以写入存储 PHP 脚本的目录,那么您就等于要求某人重写您的应用程序。传统上,Web 服务器仅被授予脚本的读取和执行权限。
现在,我认为最后一条是导致你痛苦的原因。不是尝试在程序/应用程序文件中写入数据文件。这是一种糟糕的编程习惯。只需设置一次用户可写的目录www-data
。这也充满危险,因为各种会话可能会相互覆盖,但您可以创建带有 cookie/标签的子目录并将文件放在那里。如果您选择子目录方法,请不要忘记定期清理。
如果我遗漏了要点,请告诉我。这个问题似乎在未回答队列中搁置了很长时间。如果您已经解决了这个问题,请“回答您自己的问题”并关闭它。如果这个或其他答案解决了这个问题,请将其标记为已解决。
答案2
部署后更改权限很正常。我编写脚本进行代码部署。您现在的部署方法是什么?