我的服务器上有一个文件夹,我已将权限更改为777(读取,写入和执行全部),以允许用户上传他们的图片。
所以我想知道,这涉及到哪些安全风险?
我已经实现了代码来限制可以上传的文件格式,但是如果有人要找到目录的位置会发生什么情况,这会对我的服务器造成任何威胁吗?
他们可以开始上传他们想要的任何文件吗?
感谢。
答案 0 :(得分:3)
当用户通过Web表单和某些PHP脚本将文件上传到您的服务器时,服务器上的磁盘访问会发生在运行Web服务器的用户ID(通常是nobody,www-data,apache,_httpd甚至根)。
请注意,无论哪个用户上传文件,都会使用此单用户ID 。
只要没有本地用户通过其他方式访问系统(例如ssh
),将上传目录权限设置为0777
就不会产生太大影响 - appart from有人利用系统中其他地方的安全漏洞,无论如何都没有人适用这些权限,这样的攻击者可能只会使用/tmp
。
最好只在实际需要的文件或目录上设置这些权限。在这种情况下,这可能意味着:
drwxrws--- 5 www-data www-data 4096 Nov 17 16:44 upload/
我假设除了Web服务器之外的其他本地用户都想访问这些文件,比如sysadmin或web设计器。将这些用户添加到您的Web服务器运行的组中,并且他们不需要sudo
或root权限来访问该目录。此外,+s
表示upload/
中的新文件和目录将自动归同一组所有。
至于你的上一个问题:只是因为攻击者知道目录在哪里,并不意味着他可以神奇地让文件出现在那里。仍然需要运行某种服务来接受文件并将其存储在那里......所以不,将权限设置为0777
不会直接使其安全性降低。
但是,在整个设置中,您无法使用文件权限解决“安全”和“安全”等多个维度:
......可能还有更多。您可能已经在上传脚本中解决了其中一些问题,但是再一次了解unix文件权限以及它们应用的位置通常在开始时了解安全问题,这表明您可能尚未准备好解决所有问题可能存在的问题。
有人看了你的代码!
答案 1 :(得分:1)
这些用户通过什么方式上传他们的照片?如果是在网络上,那么您只需要让Web服务器或CGI脚本用户访问该文件夹。
这里最大的危险是用户可以覆盖其他用户文件,或删除其他用户文件。没有人访问此文件夹的任何人都无法写入该文件夹(除非您有某种访客/匿名用户)。
如果你需要一个每个人都可以创建文件的目录,你想要的是模仿/ tmp目录的权限。
$ chown root:root dir; chmod 777 dir; chmod + t dir;
这样任何用户都可以创建文件,但不能删除其他用户拥有的文件。
与其他人所说的相反,unix系统中目录上的可执行位意味着您可以将该目录设为当前目录(cd到它)。它与执行无关(执行目录是没有意义的)。如果删除可执行位,则任何人都无法“cd”到它。
答案 2 :(得分:0)
如果没有别的,我会删除所有用户的可执行权限(如果不是所有者和组)。启用此选项后,有人可以上传一个看起来像图片但实际上是可执行文件的文件,这可能会导致无法完成损坏。
除非您需要匿名访问,否则可能会删除所有用户的读写权限,并将其限制为所有者和组。
答案 3 :(得分:-1)
您不希望可执行位开启。就* nix而言,可执行位意味着您可以实际运行该文件。因此,例如,php脚本可以作为JPEG类型上传,然后有人可以运行该脚本,如果他们知道位置并且它在web目录中。