问题描述
在Ubuntu服务器上运行着一个Web服务器(Apache或Nginx),托管一个PHP应用程序。该应用程序包括以下部分:
– 处理HTTP请求的可执行代码(位于/var/www/demoapp/app
目录中)
– 配置文件(位于/var/www/demoapp/.env
文件)
– 文件存储,应用程序将数据(缓存、上传等)存放其中,以644模式(假设无法更改应用程序以使用其他模式写入)写入文件。存储目录位于/var/www/demoapp/storage
。
PHP应用程序的部署通过SSH进行,分为两个阶段:
1. 上传可执行代码到服务器。
2. 运行迁移。迁移必须能够写入配置文件和文件存储。运行迁移意味着执行一个shell命令(例如cd /var/www/demoapp/app && ./migrate.php
)。
对于这样的应用程序和部署过程,什么是适当的或最常见的用户/组访问和文件权限策略?我期望的回答是类似于“Web服务器应以user1的身份运行,通过user2访问SSH,/var/www/demoapp
目录应该具有xxx模式”等。
由于安全问题,我不希望SSH部署用户能够以root身份运行命令。而且我不希望Web应用程序能够写入可执行文件和配置文件(除非有迁移正在运行)。我承认这些要求可能会忽略,但保持良好的安全级别。
解决方案
在进行以下操作之前,请注意版本差异及做好备份。
常见策略与操作步骤
用户和组访问
常见的策略是将需要部署应用程序的用户添加到一个共同的组中,例如,你可以将他们添加到www-data
组中。
sudo adduser <user> www-data
你可以使用以下命令查看用户属于哪些组:
groups <user>
目录和文件权限设置
然后,将包含migrate.php
的目录的组更改为www-data
:
sudo chgrp -R www-data /var/www/demoapp
为该目录和其子目录分配组的读/写/执行权限:
sudo chmod -R g+rwx /var/www/demoapp/
这将确保在这个组中的用户可以在demoapp/
目录内写入和运行脚本。
运行迁移脚本
对于迁移过程,你可以在migrate.php
中添加适当的权限更改,以便在运行迁移后将生成的文件设置为适当的权限。这可以通过在脚本中添加类似于以下的命令来实现:
// 在迁移完成后,更改生成的文件的权限
chmod('/var/www/demoapp/generated_file', 0644);
这将确保在迁移完成后,生成的文件将拥有适当的权限。
其他注意事项
- 对于应用程序写入的文件,默认情况下会具有默认模式和所有者(
rw-r--r-- www-data:www-data
),在迁移过程中,用户<user>
无法对其进行写入。你可以使用类似于sudo -user www-data chmod -R g+w /var/www/demoapp/storage
的命令来解决这个问题。 - 如果运行的应用程序在完成后可以更改目录的权限,那么可以考虑在迁移完成后执行相应的权限更改操作。
请根据你的实际情况选择适当的方法,并始终确保在进行权限更改时考虑到安全性。
这就是关于在Web应用部署中常见的服务器权限策略的解决方案。请根据你的实际情况和安全需求选择适当的策略和操作步骤。