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

Yan*_*iuk 4 php security webserver file-permissions laravel

我正在使用新的 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

Run Code Online (Sandbox Code Playgroud)

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

Eli*_*lin 8

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


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

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


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

然而。如果某些 CMS 没有写访问权限,它们会感到恼火。例如,Wordpress有一个非常用户友好的Install updates按钮,如果网络服务器没有写访问权限,该按钮将无法工作(因为没有写访问权限它无法更新文件),在这种情况下,您需要通过 FTP(或通过克隆阶段,或者您的 DevOps 运行方式)上传更新。

然而,例如,Drupal使用名为 的命令行工具composer来安装更新,但由于 Composer 是通过 ssh 用户从命令行运行的,因此 Web 服务器本身不需要写访问权限。

Wordpress赞同这样的想法,即我们不能总是期望每个 Web 管理员都知道如何通过 SSH 访问服务器,因此它只是为了用户友好的更新而接受增加的安全风险。)


例外情况:

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

有时他们还需要能够写入其他文件夹,例如caching插件可能有他们使用的目录。

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


对于 Laravel 来说,底线是:

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

用户:YourUsername 组:www-data

目录:2755 文件:644

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

这应该可以做到:

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
Run Code Online (Sandbox Code Playgroud)