2009-02-26 72 views
2

我在我的服务器上有一个文件夹,我已将权限更改为777(读取,写入和执行全部)以允许用户上传其图片。CHMOD和我的服务器上的目录的安全

所以我想知道,这涉及到哪些安全风险?

我已经实现了限制可以上传哪些文件格式的代码,但是如果有人找到目录的位置会发生什么情况,这会对我的服务器造成任何威胁吗?

他们可以开始上传他们想要的任何文件吗?

谢谢。

+0

这个问题是不可能没有更多的信息回答。例如,这些文件如何上传?你的代码可能有足够的问题,上传目录的权限是你最担心的问题。 – hop 2009-02-26 02:36:40

+0

谢谢你对我的编码感到厌恶,但它并没有真正回答这个问题。这些文件将通过在php页面中创建的表单上传。问题的关键是要确定是否可以放置一个具有777权限的目录集? – 2009-02-26 03:11:05

+0

用该信息更新问题 – hop 2009-02-26 12:05:01

回答

0

如果没有别的,我会删除所有用户(如果不是所有者和组)的可执行权限。启用此功能后,某人可以上传看起来像图片但实际上是可执行文件的文件,这可能不会造成任何损坏。

可能也会删除所有用户的读写权限,并将其限制为所有者和组,除非您需要匿名访问。

+0

嗨samoz,谢谢你的回复。当它说用户/组,然后每个人 - 谁属于什么组?我假设我是主人? – 2009-02-26 02:33:06

-1

您不希望可执行位打开。就* nix而言,可执行位表示您可以真正运行该文件。因此,例如,可以将php脚本作为JPEG类型上传,然后有人可以运行该脚本(如果他们知道位置并且它位于Web目录中)。

1

这些用户通过什么方式上传他们的图片?如果它在网络上,那么您只需要让Web服务器或CGI脚本用户访问该文件夹即可。

这里最大的危险是用户可以覆盖其他用户文件或删除其他用户文件。没有人无法访问此文件夹将能够写入(除非你有某种客人/匿名用户)。

如果你需要一个每个人都可以创建文件的目录,你想要的是模仿/ tmp目录的权限。

$ chown root:root dir; chmod 777 dir; chmod + t dir;

这样任何用户都可以创建一个文件,但他们不能删除其他用户拥有的文件。

与其他人所说的相反,unix系统中某个目录上的可执行位表示您可以将该目录设置为当前目录(对其进行光盘备份)。它与执行无关(目录的执行毫无意义)。如果你删除可执行文件位,没有人能够'cd'到它。

3

当用户通过Web表单和一些PHP脚本将文件上传到服务器时,服务器上的磁盘访问发生在Web服务器正在运行的用户标识(通常为nobody,www-data,apache,_httpd或甚至根)。

这里请注意,这个单用户ID被使用,无论哪个用户上传文件。

只要没有本地用户通过其他方式访问系统(例如ssh),将上传目录权限设置为0777就没什么区别了 - 从某人利用其他地方的安全漏洞在你的系统中,无论如何这些权限都不适用,这样的攻击者可能只是使用/tmp

在实际需要的文件或目录上只设置这些权限总是一个好习惯。在这种情况下,这意味着大概是这样的:

drwxrws--- 5 www-data www-data   4096 Nov 17 16:44 upload/ 

我假设除了Web服务器的本地用户将要访问这些文件,如系统管理员或网页设计师。将这些用户添加到您的Web服务器所在的组,并且它们不需要sudo或root权限来访问该目录。此外,+s意味着upload/中的新文件和目录将自动由同一组拥有。

至于你的最后一个问题:只是因为攻击者知道目录在哪里,并不意味着他可以神奇地让文件出现在那里。仍然需要某种服务运行,接受文件并将它们存储在那里...所以不,将权限设置为0777并不直接使其更安全。

不过,也有几个方面以“安全”和“安全”,你不能在这整个设置文件权限地址:

  • 上传者仍然可以覆盖每个人的文件,因为它们都与工作相同的用户ID
  • 有人可以上传恶意PHP脚本上传目录,并从那里运行它,可能利用您的系统并获得root访问权限的其他漏洞
  • 有人可以使用你的服务器分发儿童色情
  • 有人可能在上传了类似paypal.com后从您的服务器运行钓鱼网站

...并且可能还有更多。在上传脚本中可能遇到的一些问题,但是再次了解unix文件权限以及它们应用的位置通常在开始学习安全问题时就已经过时了,这表明您可能还没有准备好解决所有问题可能存在的问题。

有人看你的代码!