可以在macOS上使用/ tmp吗?

时间:2017-08-29 20:14:42

标签: macos cocoa

通常我会使用NSTemporaryDirectory,但是,我使用的工具有一些严格的路径长度限制,NSTemporaryDirectory返回的目录路径太长。将事物直接放在/tmp中,使用NSUUID生成文件名吗?

1 个答案:

答案 0 :(得分:2)

以下是文档对此的评论:

https://developer.apple.com/library/content/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html

“如果可能,请避免在共享目录(例如/ tmp)或用户拥有的目录中创建临时文件。如果其他人有权访问您的临时文件,他们可以修改其内容,更改其所有权或模式,或用硬链接或符号链接替换它。或者根本不使用临时文件(使用其他形式的进程间通信)或将临时文件保存在您创建的目录中并且仅保存到您的进程(作为您的用户)有权访问。

如果您的文件必须位于共享目录中,请为其提供唯一(并随机生成)的文件名(您可以使用C函数mkstemp执行此操作),并且永远不要关闭并重新打开该文件。如果您关闭此类文件,攻击者可能会在重新打开之前找到并替换它。

以下是您可以使用的一些公共目录:

...

的/ tmp

此目录用于常规共享临时存储。每次系统启动时都会清除它。

...

为了最大限度地提高安全性,您应始终在这些目录中创建临时子目录,在这些子目录上设置适当的权限,然后将文件写入这些子目录。“

所以,它是气馁的,但如果你别无选择,看起来你会好起来的,有一些安全警告。

但是有一个例外;如果您的应用是沙盒,则无法访问/tmp

https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html