我经常阅读一些这样的文章:
chmod 777 是不好的!
我想知道:
当我在一个文件上执行 chmod 777
时,我如何变得容易受攻击?
有没有一个真实的例子,我可以复现它?
它允许任何人查看和/或修改文件系统内容:假设攻击者已经拥有一般系统访问权限,这在共享托管平台上非常普遍...有些比其他人更加“硬化”。以下是可能的攻击向量的一个小而不完整的列表:
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世界中,用户属于组。所以你可能是Marketing组中的用户/所有者Bob。这种模型让你可以做出像Bob可以读/写该文件,其余营销人员只能读取该文件,其他用户可以读取该文件等操作。
777中的每个数字都是rwx(读/写/执行)的二进制表示。因此,chmod 755的意思是:
111(7)-所有者可以读取、写入和执行
101(5)-组中的其他人可以执行或读取,但不能写入
101(5)-全球的其他人可以读取和执行,但不能写入。
这样设置意味着你可以读取/写入和执行你的文件,但是访问你网站的人只能读取或执行该文件。因此,你需要将cgi-bin中的程序设置为755,以便人们可以将该文件作为程序执行。
如果您将权限设置为“chmod 644”,则可以获得一个只能被您写入但其他人只能读取的文件。这对于纯HTML文件非常有用,以防止任何不良行为发生。但是,如果使用权限为644的文件进行执行,则会出现错误。
CHMOD 777将允许每个人更改您服务器上的文件,它会给予他们写入条件,而众所周知这是不好的。