Web应用部署中最常见的服务器权限策略是什么?

91次阅读
没有评论

问题描述

在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);

这将确保在迁移完成后,生成的文件将拥有适当的权限。

其他注意事项

  1. 对于应用程序写入的文件,默认情况下会具有默认模式和所有者(rw-r--r-- www-data:www-data),在迁移过程中,用户<user>无法对其进行写入。你可以使用类似于sudo -user www-data chmod -R g+w /var/www/demoapp/storage的命令来解决这个问题。
  2. 如果运行的应用程序在完成后可以更改目录的权限,那么可以考虑在迁移完成后执行相应的权限更改操作。

请根据你的实际情况选择适当的方法,并始终确保在进行权限更改时考虑到安全性。


这就是关于在Web应用部署中常见的服务器权限策略的解决方案。请根据你的实际情况和安全需求选择适当的策略和操作步骤。

正文完