/ var / www为什么不拥有chmod 777


67

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

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


我想在@ serverfault.com上推荐此线程。在为apache2和权限提供示例设置方面做得很好。serverfault.com/q/6895/57036 PS我不能发表评论,所以我必须添加它作为答案。
MystaMax'1

Answers:


80

一般而言,777许可不当,我将向您说明原因。

尽管在赌场或拉斯维加斯可能看起来像777,但这并不意味着您会中奖。而是为希望修改您文件的任何人提供大奖。777(及其丑陋的表亲666)允许对other的读取和写入权限(在777中为Execute)。您可以了解有关文件权限如何工作的更多信息,但总之,可以分为三组权限:所有者,组和其他。通过设置权限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 

到目前为止,我已经创建了一个文件夹并制作了一个具有“不良”权限的文件(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

作为这个“恶意”用户,我能够将文件放入目录中并将文本注入到已经存在的文件中。而在下面的目录中,包含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

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


13
我很抱歉这种语言,但这是一个有力的回答。谢谢Marco。
Luis Alvarado

如果您只为允许自由管理/ var / www文件夹的人员创建了用户,该怎么办?我为运行的每个Web服务器使用专用的虚拟机,我想知道它是否仍然适用,因此您应该非常小心。
UrkoM 2011年

1
@UrkoM您永远不能太小心。如果希望人们访问相同的文件,则可以将组权限提高到6/7(0664/0775),然后将每个用户添加到该组。尽管此设置(以及我在答案中描述的设置)不能满足所有条件,但我会说90%的时间0755/0644是您要使用的权限。如果您只有“一个用户”系统,那么拥有其他具有写权限的风险就不会那么大。
Marco Ceppi

4
@UrkoM要考虑的另一件事是,有很多“用户”并不代表真实的人,而是存在的,因此某些服务可以以降低的能力运行(主要是出于安全原因,还可以减少可能发生的危害)来自稳定性错误)。查看的内容/etc/passwd,你会看到用户喜欢mailnewsnobody。即使您系统中的所有实际人类用户都可以修改的内容也可以/var/www,但这并不意味着您希望所有进程都以这些“人工”用户的身份运行。
伊利亚·卡根

1)尽可能简单的答案。没有说明Apache或Nginx如何处理文件夹或文件。Apache或Nginx的是服务器,使应用程序,他们是不是你的“恶意”的用户,他们无法输入ls -lahtouch bad或任何其他命令。他们如何操纵文件夹和文件?2)继承。您没有涵盖文件夹和其中文件之间的任何继承。至少有2-3个步骤中的文件之前:/var/var/www/var/www/project。应该/var具有哪些用户/组权限?应该/var/www具有哪些用户/组权限?等等。他们如何合作?
2015年

15

本质上,拥有777的权限并不会使您自己被黑客入侵,但是,如果有人在任何地方都能站稳脚跟,则可以用来升级权限并完全控制您的计算机。最糟糕的部分是您的权限使用“ 7”-表示读取,写入和执行权限。

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

现在,您可能会说这不太可能,或者这不是真正的黑客的工作方式。没错,但是要点是,通过将文件设置为chmod 777,您打开了一个安全漏洞,黑客可以使用此漏洞,但他认为合适。

如果改为遵循“最小特权原则”,则不会发生此漏洞,并且您的系统很难被黑客入侵。即使正确执行操作比较困难,您仍然应该尽一切努力做到这一点。


+1“代表”和“升级”。很好地描述了这个概念。
KariKääriäinen15年

3
您能否解释一下如何在服务器上执行伪装为jpg的文件?
阿努拉格·佩什尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.