Answers:
通常唯一可在世界范围内写入的FHS强制目录是/tmp
和/var/tmp
。在这两种情况下,这都是因为它们旨在存储任何人都可以制作的临时文件。
/dev/shm
作为tmpfs(由RAM支持的文件系统),通常也很常见,可以快速访问进程之间共享的中型数据,或者仅创建保证在重新启动时销毁的文件。
可能还有一个/var/mail
或/var/spool/mail
,有时还有其他后台打印程序目录。这些用于在处理邮件之前临时保留邮件。它们并不总是可写的,具体取决于所使用的工具。之所以如此,是因为可以使用用户工具在此处创建文件以供守护程序处理。
所有这些目录通常都设置了粘滞位(t
),这意味着只有文件或目录的所有者才能移动或删除其中的文件。
以任何用户身份运行的任何程序都可以在这些目录中创建文件,并且就其特定数据的安全性而言,由创建程序来做正确的事情。除了可能填充文件系统的人之外,没有任何特殊的一般安全问题,但是程序有很大的范围来弄错它。
已经有一些服务特定/tmp
目录的移动。这些可以避免可能出现的一些潜在错误,因此,对于程序使用目录的方式,确保其没有错误并不是至关重要的。
您可以使用以下命令在系统上找到世界可写目录:
find / -maxdepth 3 -type d -perm -777
/tmp
,/var/tmp
和/var/lock
,默认情况下可在世界范围内写入。可能存在符号链接,例如/usr/tmp
→ /var/tmp
,以与较早的应用程序兼容。
/tmp
和 /var/tmp
世界范围内写入,因为它们是供任何用户用于任何临时存储的。 /var/lock
是世界可写的,因此任何以任何用户身份运行的进程都可以在中央位置创建锁定文件。
有安全隐患吗?不,但是可以。
所有这些目录的权限是1777
,与领先1
作为粘着位。这意味着尽管任何人都可以在这些世界可写目录中创建文件,但只有所有者可以删除自己的文件(当然,root用户也可以)。
临时文件创建不安全可能导致安全风险。由于这些目录是免费的,因此用户需要采取预防措施以确保他们创建的文件实际上是新文件,而不是打开可能由恶意用户植入的现有文件或符号链接。如果使用适当的技术(例如open(…, O_EXCL)
或)创建文件mkstemp(3)
,则可以避免这种风险。
/tmp
这是有风险的,因为您需要添加额外的代码才能安全地使用它。显然,这被忽略了。
史蒂夫·坎普(Steve Kemp)给出了一个最近的例子。 http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html
./mgmt/tools/SysAPI.cc: tmp = fopen("/tmp/shadow", "w"); ./mgmt/tools/SysAPI.cc: system("/bin/mv -f /tmp/shadow /etc/shadow");
如果(攻击者)在第二行之前替换/ tmp / shadow,则可以替换每个人的密码。(我猜这种攻击要求您在第一行之前创建文件,并使该文件可全局写入)。
在Linux上的Systemd可以通过为许多系统服务隔离/ tmp来缓解此类漏洞。(除了“将/ tmp用作IPC套接字和其他通信原语的位置”)。
在Fedora Linux中-http://fedoraproject.org/wiki/Features/ServicesPrivateTmp
系统说明-http: //0pointer.de/blog/projects/security.html
fopen
则将其覆盖但不重置权限,因此恶意用户仍然可以进行更改。同样,恶意用户可能ln -s /bin/bash /tmp/shadow
在第一行之前就做了类似的操作,因此基本系统二进制文件将被覆盖。
/var/lock
→/run/lock