使源代码文件可由网络服务器写入是否安全?

问题描述 投票:0回答:1

我正在使用新的 PHP Laravel 框架安装,我注意到公共目录中所有文件和文件夹的所有权已递归更改为 Web 服务器用户www-data。以下是公用文件夹的文件和所有权的概述:

vagrant@dev:/laravel-app/public$ ls -al
total 20
drwxr-xr-x  2 www-data www-data 4096 Aug 10 09:19 .
drwxr-xr-x 12 www-data www-data 4096 Sep 15 10:39 ..
-rw-r--r--  1 www-data www-data    0 Aug 10 09:19 favicon.ico
-rw-r--r--  1 www-data www-data  603 Aug 10 09:19 .htaccess
-rw-r--r--  1 www-data www-data 1710 Aug 10 09:19 index.php
-rw-r--r--  1 www-data www-data   24 Aug 10 09:19 robots.txt

我是否需要删除“可写”权限以使应用程序文件结构更安全?

php laravel security webserver file-permissions
1个回答
0
投票

不。嗯,有点像。有时候也是没办法的事。但你使用的是 Larvel,所以答案是否定的。


为什么我们不想让源代码文件可写:

一般来说,网络服务器不应写入这些文件,因为它会显着降低您的攻击面以及黑客可能造成的最大损害。例如,即使用户以某种方式利用您的插件之一中的安全缺陷来上传文件,如果网络服务器本身,他们也无法上传带有

index.php
keylogger
的替换
javascript-based bitcoin miner
没有写访问权限。


为什么我们可能希望允许源代码文件可写:

但是。如果某些 CMS 没有写访问权限,它们会感到恼火。例如,Wordpress有一个非常用户友好的

Install updates
按钮,如果网络服务器没有写访问权限,则该按钮将不起作用(因为它无法更新没有写访问权限的文件),在这种情况下,您需要通过 FTP(或通过克隆阶段,或者您的 devops 运行方式)上传更新。

例如,Drupal 使用名为

composer
的命令行工具来安装更新,但是 因为 Composer 是通过 ssh 用户从命令行运行,所以 Web 服务器本身不需要写访问权限。

Wordpress同意我们不能总是期望每个网络管理员都知道如何通过 SSH 连接到服务器,因此它只是为了用户友好的更新而接受增加的安全风险。)


例外:

也就是说,许多 CMS,例如 WordpressDrupal,允许管理员上传文件(例如图像或 pdf)。对于这些 CMS,服务器应该有一个名为

uploads
的可写目录,服务器可以修改该目录。

有时他们还需要能够写入其他文件夹,例如

caching
插件可能有他们使用的目录。

每种类型的网站都会有稍微不同的目录,所以一般来说,您可以询问谷歌您的网站的正确权限应该是什么。


底线,对于 Laravel:

Laravel 通过 Composer 运行更新,这意味着您将运行更新。所以不,您的网络服务器不需要写访问权限。正确的权限是:

用户:

YourUsername
组别:
www-data

目录:

2755
文件:
644

但是,

cache
目录和
storage
目录应该可由服务器写入,因此我们将它们更改为
2775
664
...

这应该可以做到:

cd /path/to/laravel-project/
sudo chown -r YourUsername:www-data .
sudo find ./ -type f -exec chmod 644 {} \;    
sudo find ./  -type d -exec chmod 2755 {} \;

sudo chmod -R g+w storage/
sudo chmod -R g+w bootstrap/cache/
© www.soinside.com 2019 - 2024. All rights reserved.