我有关于我的VPS上的Nginx和www-data用户的问题。
比方说,我有一个共同的父文件夹/var/www下的两个网站siteA和siteA 。 这两个网站和父文件夹都有www-data作为用户和组。 如果siteA受到攻击/黑客攻击,黑客将能够访问siteA上的文件?
我读过另一篇文章,为了防止这种情况,我应该运行在自己的用户和组下的每个网站。 我将如何去与Nginx实现这一点?
额外:
siteA是一个使用php-fpm的WordPress站点, siteB将是一个NodeJS应用程序
值得注意的是,你所要求的攻击types(网站污损)是一种相对罕见的攻击forms。 黑客通常更感兴趣的是窃取数据和/或劫持整个服务器。 通过简单地replace网站内容来抵制污损也相对容易。 除非你有一个坚定的敌人,否则在追踪导致它的漏洞时,这往往会阻止你。
也就是说,你所描述的configuration比拥有不同的网站引入了更大的攻击面,是的,你可以做些事情来减less这个表面。
你可以做的第一件事就是使用标准的linux组和用户来完全拒绝所有静态网站内容和源代码的写入权限。 您可以通过创build一个www-admin用户并将所有内容分配给该用户来完成此操作。 然后有不同的用户(或用户)的程序和服务。 一个普通的networking服务用户是用户nobody,但是专用用户(如www或http)也可以工作。 将静态内容和源代码放入由www-admin拥有的自己的目录中,目录权限为755,文件权限为644。 这将防止受损的Web服务或应用程序对您的网站进行任何更改。 如果出于方便的原因,您可以进一步对组进行微调,但为了安全起见,此所有权设置将保护您的文件免受基于Web的损坏,并且易于实施和维护。
默认情况下,nginx不接受http TRACE,DELETE或PUT请求。 不过,testing这个是个好主意:
curl -v -X TRACE "http://www.example.com" curl -v -X DELETE "http://www.example.com/dummy-page.html" echo evil > ./test4evil.txt curl -v -X PUT "http://www.example.com" -F "file=./test4evil.txt"
你应该得到405(不允许)这些testing的回应。
如果您希望网站访问者能够上传内容,请为此创build专门的仅限用户内容的目录,并将这些目录的写入权限分配给执行上传的应用程序或服务。 狭义地说,我的意思是避免给不需要写入该目录的用户或组的写权限。
所有这些地址只在磁盘上的文件。 由于您的网站dynamic地生成内容,您还应该确保您解决了与注入dynamic内容相关的php注入,sql注入以及其他潜在漏洞。 但是,这是一个不同的话题,这里的问题只是防止对磁盘上的文件进行更改。