gpt4 book ai didi

python - 应用沙盒: Python wandering out of the sandbox

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:58 25 4
gpt4 key购买 nike

我正在编写一个 Mac 应用程序,它接受文件作为输入,让用户进行元数据操作,然后将文件发送到 Python 脚本来处理输出。这在没有沙箱的情况下效果非常好。与所有事情一样,沙箱使其变得困难。

我嵌入到 NSBundle 中的 python 库正在调用系统拥有的一些 MimeTypes 库,但这些库正在尝试打开 /etc/apache2/mime.types,我的沙箱中没有它,并且失败并出现错误:IOError:[Errno 1]不允许操作:'/etc/apache2/mime.types'.

以下是我的权利:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>

这是完整的回溯:

Traceback (most recent call last):
File "/Users/thomaspritchard/Library/Developer/Xcode/DerivedData/Chapters-ejrappchxzcmqxdjlzydqffndmtk/Build/Products/Debug/Chapters.app/Contents/Resources/EditChaptersScript.py", line 3, in <module>
import eyed3 # ID3 Writer
File "/Users/thomaspritchard/Library/Developer/Xcode/DerivedData/Chapters-ejrappchxzcmqxdjlzydqffndmtk/Build/Products/Debug/Chapters.app/Contents/Resources/eyed3/__init__.py", line 91, in <module>
from .utils.log import log
File "/Users/thomaspritchard/Library/Developer/Xcode/DerivedData/Chapters-ejrappchxzcmqxdjlzydqffndmtk/Build/Products/Debug/Chapters.app/Contents/Resources/eyed3/utils/__init__.py", line 33, in <module>
_mime_types = mimetypes.MimeTypes()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetypes.py", line 66, in __init__
init()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetypes.py", line 358, in init
db.read(file)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetypes.py", line 202, in read
with open(filename) as fp:
IOError: [Errno 1] Operation not permitted: '/etc/apache2/mime.types'

提前感谢您的帮助,我真的很希望能够在 Mac App Store 中分发此应用程序,但在这个问题上我一直在碰壁。

编辑:我想也许我可以允许通过 Temporary Exception Entitlements 访问文件 /etc/apache2/mime.types 。使用此更新的权利 plist,它会退出并出现相同的错误:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.temporary-exception.files.absolute-path.read-only</key>
<array>
<string>/etc/apache2/mime.types</string>
</array>
</dict>
</plist>

有趣的是,如果我使用绝对路径 /,而不是 /etc/apache2/mime.types,它可以工作,但 Apple 根本不可能在 Mac App Store 中允许这样做!

最佳答案

发现问题了。当 OS X 中包含符号链接(symbolic link)时,/etc/ 的设置权限似乎存在问题!我已将其更改为 /private/etc/ 并且现在可以使用了。

Thanks to this answer for helping me get to the answer.

编辑:苹果工程师表示这是一个适当的异常(exception)情况,并关闭了我的雷达。如果您遇到同样的问题,请引用雷达:#24011257

关于python - 应用沙盒: Python wandering out of the sandbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34420174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com