使用应用范围的安全书签从系统位置删除文件

Posted

技术标签:

【中文标题】使用应用范围的安全书签从系统位置删除文件【英文标题】:Delete file from system location with app-scoped security bookmark 【发布时间】:2015-04-15 18:05:37 【问题描述】:

我有一个 OS X 应用程序,我在其中使用 NSOpenPanel 向用户请求应用程序范围的安全书签 - 这很好用。

现在我也想删除该文件 - 这适用于所有文件,但存储在系统位置的文件除外,例如/private/var/log。即使用户授予我一个(不是陈旧的)安全书签。

是否有任何权利允许我从这些位置删除用户选择的文件?

仅供参考,设置如下权利:

<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key> <array> <string>/.Trash</string> </array> <key>com.apple.security.files.user-selected.read-write</key> <true/> <key>com.apple.security.files.bookmarks.app-scope</key> <true/> <key>com.apple.security.app-sandbox</key> <true/>

干杯!

【问题讨论】:

我没有想到一个解决方案,但我只是想暗示我一直在与审核团队就临时异常进行“永无止境”的讨论——他们基本上没有不希望人们再使用它们。此外,感谢您提醒我安全书签。我必须尽快再次调查。我会四处询问是否有人为您提供解决方案... 【参考方案1】:

系统位置中的大多数文件属于用户root,其他人没有写权限。为了删除这些文件,他们需要设置适当的权限。您可以使用终端检查:

cd /private/var/log
ls -la

仅仅因为您的应用具有沙盒权限并不意味着它具有文件系统的写入和删除权限。不好意思说。

【讨论】:

文件是 rw-r--r-- 具有 $(whoami):staff 权限,所以当前用户是所有者。应该从这个角度工作,因为终端的 rm 也可以正常工作。 遗憾的是毕竟是权限错误。 chmod'ing 封闭文件夹到 go+w 使原始应用程序工作。感谢您的澄清!【参考方案2】:

我相信您只需要访问文件的(父)目录,因为它是在删除文件时修改的目录。

我假设您可以使用当前使用的相同权限授予机制来执行此操作。

当然,用户自己没有对系统中所有文件的读/写权限,因此会限制删除系统文件的能力。如果你想删除那些,那么你需要实现权限提升。

【讨论】:

我会试一试,如果它工作正常会报告。谢谢!

以上是关于使用应用范围的安全书签从系统位置删除文件的主要内容,如果未能解决你的问题,请参考以下文章

移动到垃圾箱时的 URL 书签数据

在 Firemonkey 应用程序中使用 OSX 安全范围的书签

10.7.3 之前的 Mac App Store 沙盒和处理安全范围的书签

Java PDF书签——添加编辑删除读取书签

Swift 从特定文档目录位置删除所有文件

ubuntu14 文件夹添加/删除书签