为什么 /var/www 不应该有 chmod 777

Lui*_*ado 75 permissions security apache2 www

在本地主机上开发页面时,我有时会收到“权限被拒绝”错误,我可以通过运行chmod -R 777 /var/www. 但是,人们告诉我,出于安全原因,这是一个坏主意。

为什么不应该/var/www有 777 的 chmod?

Mar*_*ppi 87

777 通常是一个不好的许可,我会告诉你原因。

不管在赌场或拉斯维加斯看起来如何,777 对您来说并不意味着中奖。相反,任何希望修改您的文件的人都可以获得大奖。777(及其丑陋的表亲 666)允许对其他. 您可以了解有关文件权限如何工作的更多信息,但简而言之,权限分为三组:所有者、组和其他。通过权限设置为6或7(rw-rwx)为其他你给任何用户的能力,编辑和操纵这些文件和文件夹。通常,正如您想象的那样,这对安全性不利。

这是我的例子:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经创建了一个文件夹并创建了一个具有“错误”权限(777 和 666)的文件。现在我将切换到另一个用户并尝试操作这些文件。

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE
Run Code Online (Sandbox Code Playgroud)

作为这个“恶意”用户,我能够将文件放入目录并将文本注入到已经存在的文件中。而在下面,在具有 755 的目录和具有 644 的文件中,我能够看到内部文件和目录,但我无法编辑文件或创建新文件:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied
Run Code Online (Sandbox Code Playgroud)

对于 Apache 权限,您将要umask 022分别为文件夹和文件坚持 0755 和 0644 (AKA )。这允许您作为文件的所有者编辑和操作它们,同时为 Apache 提供操作所需的最低限度的访问权限。

  • 我对语言感到抱歉,但这是一个踢屁股的答案。谢谢马可。 (14认同)
  • @UrkoM 要考虑的另一件事是,有很多“用户”并不代表真实的人,而是存在的,因此某些服务可以以较低的能力运行(主要是出于安全原因,但也是为了减少可能发生的伤害来自稳定性错误)。查看`/etc/passwd`的内容,你会看到像`mail`、`news`和`nobody`这样的用户。即使您系统的所有真实人类用户都可以修改 `/var/www` 的内容,这并不意味着您希望所有进程都以这些“人工”用户的身份运行. (6认同)
  • 如果您只为允许自由管理 /var/www 文件夹的人创建用户怎么办?我为我运行的每个网络服务器使用专用的虚拟机,我想知道您是否仍然应该如此小心。 (4认同)
  • @UrkoM 你永远不会太小心。如果您希望人们访问相同的文件,您可以将组权限提高到 6/7 (0664/0775) 并将每个用户添加到该组。虽然此设置(以及我在回答中描述的设置)不符合所有标准,但我认为 0755/0644 有 90% 的时间是您想要使用的权限。如果您只有“一个用户”系统,那么拥有*其他* 写权限的风险就不会*为*大。 (2认同)

Ima*_*ots 18

从本质上讲,拥有 777 的权限不会让您自己被黑客入侵,但如果有人在任何地方获得立足点,它可用于升级权限并完全控制您的计算机。最糟糕的是,您的权限使用了“7”——这意味着读取、写入和执行权限。

假设黑客想要接管您的计算机。他可能会使用网络浏览器连接到您的计算机,连接到http://yourcomputer.example.com:80/. 如果您有任何可让他上传图像的页面,他可以将可执行文件重命名为以“.jpg”结尾并将其上传到您的服务器。现在他在他的 web 浏览器中浏览到那个文件并运行它,因为 linux 不关心扩展名,它只看到它是一个可执行文件。这可能不会给他带来太多好处,但是因为它完全可以运行,所以他知道它是以 apache 用户身份运行的。然后他上传了一个修改过的版本,该版本将编辑 apache 的配置文件,授予他更多的访问权限 - 假设 apache 将输出 /etc/passwd 的内容。然后,他可以使用该信息查看系统上存在哪些用户。然后他可以使用 ssh 进行连接并尝试使用常用密码以这些用户身份登录 - 如果这不起作用,他将加紧使用完整的蛮力攻击。如果他以具有 sudo 访问权限的用户身份进入,

现在,您可能会说这不太可能,或者这不是真正的黑客的工作方式。确实如此,但关键是通过将文件设置为 chmod 777,您打开了一个安全漏洞,黑客可以随意使用该漏洞。

如果您改为遵循最小权限原则,则不会出现该漏洞,并且您的系统更难被破解。即使正确地做事情比较困难,你仍然应该尽一切努力去做。

  • 你能解释一下如何在服务器上执行伪装成 jpg 的文件吗? (9认同)