我经常阅读文章,说些什么
chmod 777很糟糕!
我在想:
当我在文件上执行chmod 777
时,我如何变得脆弱?
我可以重现的这个现实世界的例子是什么?
它允许任何人查看和/或修改文件系统内容:假设攻击者已经具有在共享主机平台上非常常见的一般系统访问权限......有些人从一开始就比其他人更“强硬”。这是一个可能的攻击向量的小型不完整列表:
在上文中,我还假设“组”包括web服务器主体,并且涉及Web服务器(和/或共享主机),其可以用作主要攻击媒介和/或安全漏洞。但是,我再次强调这一点:上面的列表并不完整。
虽然不是“保证安全”,但使用最具体的权限可以减轻一些漏洞/暴露。
如果攻击者只能访问Web界面(而不是文件,例如,通过同一共享主机上的另一个帐户),则模式777不会直接打开任何漏洞。它的作用是让攻击者一旦进入其他方式就更容易改变网站上的内容。
例如,假设您有一个WordPress站点,并且某个地方存在一个错误,允许攻击者在服务器守护程序的凭据下执行任意PHP代码(这在过去曾多次发生,并且无疑将来会再次发生)。 WordPress本身的代码存储在服务器守护程序可以读取的.php
文件中。如果这些文件是模式777,那么攻击者可以写信给他们 - 这意味着他们可以修改代码 - 改变你的网站所做的事情。也许他们安装了一个“漏洞利用”工具包,现在访问您网站的每个人都会被浏览器黑客入侵。也许他们安装了一个搜索引擎优化垃圾邮件工具包,现在谷歌认为你正在销售伟哥(但如果你直接访问该网站它是隐形的 - 是的,这确实发生了)。
如果.php
文件是模式755,并且由非服务器守护程序的用户拥有,则攻击者无法永久更改站点的功能。
请注意,这意味着WordPress的自我升级管理面板功能存在风险,因为它只有在WordPress可以自行修改时才有效 - 您不能拥有它并且让攻击者无法在文件执行后修改文件随意的PHP。
另请注意,如果没有文件,并且没有服务器守护程序可以修改的目录,那么在这方面只有100%安全。即使只是允许文件上传到单个目录仍然是一个问题 - 即使你让任何人放在那里的唯一东西是图像文件。 (如果这似乎不可能,请看看http://lcamtuf.coredump.cx/squirrel/。)
chmod
命令中的每个数字代表一个八进制(3位)数字。有三位数,总共9位。每个位代表一个权限; 1 ==有权限,0 ==没有权限。
每个数字中的三位表示读取(二进制100 ==十进制4),写入(二进制010 ==十进制2)和执行(二进制001 ==十进制1)。十进制7是读+写+执行权限。
chmod
命令的第一个数字表示文件或目录所有者的权限。第二个是小组。第三个是“宇宙” - 也就是其他人。
因此,chmod 777
代表您,小组和每个人的读,写和执行权限。这通常比所需的访问更多。
对于你的真实世界的例子,假设一个名为my_bank_account_credentials
的文件被chmod 777
改变了。不太安全!恶意用户可以更改其中的内容或只是阅读它并愉快地拿走你的钱。
对于服务器,主要的危险是服务器代码中的漏洞可能允许攻击者访问服务器进程有权访问的任何内容 - 其中包括具有777
权限集的任何内容。
chmod是CHange MODe命令。 777表示权限。有三组人可以拥有权限(每个人都有自己的数字),按顺序:所有者(文件或目录,前7个),组(每个人与所有者属于同一组,第二个7) )和世界(第三个7)。
所有者是文件的用户 - 那就是你。在* nix世界中,用户属于组。因此,您可能是组营销中的用户/所有者Bob。这个模型可以让你做一些事情,比如Bob可以读/写文件,其余的营销只能读取文件,其他用户可以读取文件。
777中的每个数字都是二进制表示形式:rwx(读/写/执行)。因此755的chmod意味着:111(7) - 所有者可以读取写入执行101(5) - 组中的其他可以执行或读取,没有写入101(5) - 其余的世界可以读取和执行,不写入。
该设置意味着您可以读/写并执行您的文件,但访问您站点的人只能读取或执行该文件。因此,您需要将cgi-bin中的程序设置为755,以便人们可以将该文件作为程序执行。
如果将权限设置为“chmod 644”,则会获得一个可由您编写的文件,但只能由世界其他地方读取。这对于直接的HTML文件很有用,所以没有hanky panky继续下去。但是尝试执行权限为644的文件,您将收到错误消息。
CHMOD 777将允许每个人对服务器的文件进行更改,它会给出WRITE条件,每个人都知道它很糟糕。
如果恶意条目到达您的应用程序,网站等,无论它对代码做了什么。关键点在于数据库,并且没有可能防止“写入”它。所以chmod 777权限完全没什么危险。