受到this question中讨论的启发,可能是一个愚蠢的问题。
我们都被告知,在基于Linux的Web托管中保留目录或文件的权限级别为777
是件坏事,并且根据需要设置总是很少的权限。
我现在很好奇确切地在哪里存在利用的危险,特别是在PHP / Apache上下文中。
毕竟,无论是否标记为“可执行”,都可以从外部执行PHP脚本文件(即通过调用Web服务器,然后调用解释器),不是吗?这同样适用于通过命令行php
解释器调用的文件,对吧?
那么777
的漏洞到底在哪里?事实是同一台机器上的其他用户可以访问世界上可写的文件吗?
答案 0 :(得分:27)
以下是一个场景:
system()
调用的php文件。如果这个目录是777,那意味着任何人(包括用户apache,这是php脚本将执行的)都可以执行它!如果没有在该目录上设置执行位,并且可能是目录中的文件,则上面的步骤3将不执行任何操作。
从评论中编辑:重要的不是PHP文件的权限,而是PHP文件中的system()
调用将由linux用户apache执行的linux系统调用(或者您拥有的任何apache设置)运行as),这是执行位重要的地方。
答案 1 :(得分:3)
它极大地增加了您的网站对恶意活动的漏洞配置文件,因为它只需要分成一个帐户。
任何能够通过任何登录访问您系统的人都可以对您的网页做任何他们想做的事情,包括将其更改为“此网站真的不安全所以请告诉我您的信用卡信息。”
编辑:(澄清并发表评论)
许多服务器在生活中有不止一个目的。他们运行多种服务。如果您通过为每个用户分配一个唯一的用户并相应地管理文件权限来仔细隔离这些服务,是的,如果有人破坏了帐户的凭据,您仍然处于热水中,但他们可以做的损害仅限于那一项服务。如果您只有一个通用帐户并将整个文件系统设置为777,则一个受感染的帐户会危及计算机上的所有内容。
如果您的服务器专用于仅运行Apache / PHP并且在生活中没有其他用途,并且只有一个帐户可以运行Apache / PHP,那么让一个帐户受到攻击就像拥有整个机器一样好从您的应用程序的角度来看已经受到损害(尽管您仍然应该使用用于运行PHP的帐户保护系统文件并且不可写入...但仍然只能用于管理员帐户/ root)。
如果他们可以编写文件并且它是可执行文件,他们可以将其更改为在您的计算机上执行的内容(可执行文件或脚本),然后使用PHP的shell_exec来运行该可执行文件。如果您配置为不允许shell_exec,则他们也可以更改您的配置
答案 2 :(得分:2)
在权限方面,有很多很好的一般理由可以遵循极简主义,但在LAMP虚拟主机环境中,很少有人会想到的是
rm -rf /
。现在通常这将是无害的,因为几乎没有任何文件没有人应该具有写权限,但是这个胭脂程序现在将带有你的文件。答案 3 :(得分:0)
假设您的服务器中安装了软件包,并且存在零日漏洞,攻击者可以通过上传文件功能访问管理控制面板,如果您将所有内容设置为777,则会让他在任何他想要的地方上传shell脚本都是微不足道的。但是,如果您正确设置了权限,则他无法执行此操作,因为nobody / www-data / etc不具备写入权限。