2

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

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

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

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

谢谢。

4

4 回答 4

3

当用户通过 web 表单和一些 PHP 脚本将文件上传到您的服务器时,服务器上的磁盘访问发生在运行 web 服务器的用户 id 下(通常是 nobody、www-data、apache、_httpd 甚至 root)。

请注意,无论是哪个用户上传文件,都会使用此单个用户 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 文件权限及其应用位置的理解很重要,这表明您可能还没有准备好解决所有问题的可能问题。

有人看过你的代码!

于 2009-02-26T12:26:30.807 回答
1

这些用户通过什么方式上传他们的照片?如果是通过网络,那么您只需要授予网络服务器或 CGI 脚本用户访问该文件夹的权限。

这里最大的危险是用户可以覆盖其他用户文件,或删除其他用户文件。没有访问此文件夹的任何人都无法写入(除非您有某种来宾/匿名用户)。

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

$ chown root:根目录;chmod 777 目录;chmod +t 目录;

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

与其他人所说的相反,unix 系统中目录上的可执行位意味着您可以将该目录设为当前目录(cd 到它)。它与执行无关(执行目录是没有意义的)。如果您删除可执行位,则没有人可以“cd”到它。

于 2009-02-26T02:49:56.590 回答
0

如果不出意外,我会删除所有用户的可执行权限(如果不是所有者和组)。启用此功能后,有人可以上传看起来像图片但实际上是可执行文件的文件,这可能会造成无休止的损害。

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

于 2009-02-26T02:30:12.097 回答
-1

您不想打开可执行位。就 *nix 而言,可执行位意味着您可以实际运行该文件。因此,例如,php 脚本可以上传为 JPEG 类型,然后如果有人知道位置并且它在 web 目录中,他们就可以运行该脚本。

于 2009-02-26T02:48:35.267 回答