如何在Mac OS X上允许Python.app进入防火墙?

时间:2016-01-13 06:53:21

标签: python macos certificate firewall

当我在Mac上运行python应用程序时,它会显示许多关于想要" Python.app"的对话框。接受传入的网络连接。

即使我允许它多次,也会一次又一次地显示。

如何允许一次而不再显示?

enter image description here

修改

我发现了这个问题: Add Python to OS X Firewall Options?

我按照接受的答案做了但最后当我跑codesign -s "My Signing Identity" -f $(which python)时,它说:

/usr/bin/python: replacing existing signature
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate: can't create output file: /usr/bin/python.cstemp (Operation not permitted)
/usr/bin/python: the codesign_allocate helper tool cannot be found or used

下一步怎么做?

6 个答案:

答案 0 :(得分:3)

显然El Capitan有一些叫System Integrity Protection的东西可以阻止任何用户(甚至是root用户)修改某些操作系统资源。比如这个案例中的/ usr / bin目录,你有python可执行文件。要对python二进制文件进行自签名,可以通过在恢复模式下重启mac来禁用SIP(在按住CMD + R时重新启动),然后在终端中输入:

csrutil disable

然后启动回常规OSX,并按照自签名python的步骤执行:

codesign -s "My Signing Identity" -f $(which python)

最后重新启动进入恢复模式,然后重新启用SIP:

csrutil enable

答案 1 :(得分:3)

我从python.org安装了Python 3.6,并且遇到了类似的问题。我反复尝试自签名python二进制文件/usr/local/bin/python3、/Library/Frameworks/Python.framework/Versions/3.6/bin/python3,依此类推,但我会不断使MacOS Firewall拒绝/允许弹出窗口。

最后,对位于/Library/Frameworks/Python.framework/Versions/3.6/Resources的应用程序进行自签名可以达到目的:

codesign --force --sign "My Signing Identity" /Library/Frameworks/Python.framework/Versions/3.6/Resources/Python.app

我在MacOS Mojave 10.14.1上物有所值。

答案 2 :(得分:1)

创建自签名证书。

  • 打开钥匙串访问。应用程序>实用程序>钥匙串访问。
  • “钥匙串访问”菜单>“证书助手”>“创建证书...”
  • 输入“我的证书”之类的名称。
  • 选择身份类型:自签名根
  • 选择证书类型:代码签名
  • 选中“让我覆盖默认设置”框
  • 点击继续
  • 输入唯一的序列号(从1到2147483647)
  • 输入7300的有效期。
  • 点击继续
  • 点击继续以查看其余对话框
  • 现在通过以下方式签名您的应用程序:

    • 在终端运行codesign -s --deep "My Certificate" -f $(which python)
    • 在出现的对话框中,单击“允许”。

    • 打开“钥匙串”应用程序,搜索您的证书,
    • 右键单击“获取信息”
    • 展开“信任”部分,在“代码签名”下选择“始终信任” enter image description here

注意,在使用虚拟环境时,需要先激活虚拟环境,然后再运行此命令。

答案 3 :(得分:0)

上面@ mr-howdy给出的答案的附录。对于Python 3.7,我必须使用:

codesign --force --sign "My Certificate" /Library/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python

请注意添加到路径的多余Contents/MacOS/Python

答案 4 :(得分:0)

With the OS X firewall enabled, you can remove the "Do you want the application "python" to accept incoming network connections?" message.

Create a self-signed certificate.

Open Keychain Access. Applications > Utilities > Keychain Access.
Keychain Access menu > Certificate Assistant > Create a Certificate...
Enter a Name like "My Certificate".
Select Identity Type: Self Signed Root
Select Certificate Type: Code Signing
Check the Let me override defaults box
Click Continue
Enter a unique Serial Number
Enter 7300 for Validity Period.
Click Continue
Click Continue for the rest of the dialogs
Now sign your application

  codesign -s "My Certificate" -f $(which python)

In the dialog that appears, click "Allow".

Note that when using a virtual environment, you need to activate the virtual environment before running this command.

答案 5 :(得分:-1)

您可以在系统偏好设置->安全和隐私中允许python的传入连接。单击防火墙选项卡,然后单击防火墙选项按钮(您可能需要先进行身份验证/解锁)。您应该会在某处看到python,您可以选择允许传入连接。至少这对我来说解决了这个问题。