首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >macOS系统扩展:使用供应配置文件的权限和签名

macOS系统扩展:使用供应配置文件的权限和签名
EN

Stack Overflow用户
提问于 2020-09-16 12:24:47
回答 2查看 3.3K关注 0票数 6

我有一个macOS设备驱动程序的系统扩展。当我禁用SIP并使用我的codesign (使用我的Apple使用终端的“安全查找-标识”生成)手动签名时,它可以工作--如下所述:https://github.com/knightsc/USBApp/issues/1

我可以激活和禁用右旋,并在激活时与设备一起使用它--我所做的和最后得到的例子如下:

将无代码的KEXT迁移到无代码的DEXT

在这里:

激活无码右旋体后获取OSSystemExtensionErrorCodeSignatureInvalid

我获得了苹果的授权,并遵循了他们概述的创建配置文件的步骤,然后下载并安装了配置文件。然后,我按照Apple电子邮件中引用的步骤手动签署应用程序:https://help.apple.com/xcode/mac/current/#/dev1bf96f17e

我重建了我的应用程序,并关闭了我的驱动程序的所有现有实例。当我试图激活新的驱动程序时,激活请求会失败,并出现应享权利错误:"Error Domain=OSSystemExtensionErrorDomain Code=8",我知道这是权利/签名问题的一个指示。

  • 如何正确地使用来自苹果的配置文件来签署我的应用程序和驱动程序?
  • 我需要更新我的权利文件吗?以下是我现有的文件:

应用程序

代码语言:javascript
运行
AI代码解释
复制
<?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-only</key>
    <true/>
    <key>com.apple.developer.system-extension.install</key>
    <true/>
    <key>com.apple.developer.system-extension.uninstall</key>
    <true/>
</dict>
</plist>

右旋

代码语言:javascript
运行
AI代码解释
复制
<?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.developer.driverkit</key>
    <true/>
    <key>com.apple.developer.driverkit.transport.usb</key>
    <array>
        <dict>
            <key>idVendor</key>
            <integer>LEGACY VID</integer>
            <key>idProductArray</key>
            <array>
                <integer>PID1</integer>
                <integer>PID2</integer>
                <integer>PID3</integer>
                <integer>PID4</integer>
                <integer>PID5</integer>
            </array>
        </dict>
        <dict>
            <key>idVendor</key>
            <integer>NEW VID</integer>
            <key>idProductArray</key>
            <array>
                <integer>PID6</integer>
            </array>
        </dict>
    </array>
    <key>com.apple.security.app-sandbox</key>
    <true/>
</dict>
</plist>

任何帮助都将不胜感激。

更新:

应用程序的App具有系统扩展功能,但没有附加的DriverKit功能。

dext的App具有额外的DriverKit功能。

应用程序的配置配置文件有

代码语言:javascript
运行
AI代码解释
复制
- com.apple.developer.driverkit set true
- com.apple.application-identifier set to <Team ID>.<App Bundle Identifier>
- keychain-access-groups set to <Team ID>.*
- com.apple.developer.system-extension.install set to true
- com.apple.developer.team-identifier set to Team ID

Dext的配置配置文件有

代码语言:javascript
运行
AI代码解释
复制
- com.apple.developer.driverkit set true
- com.apple.application-identifier set to <Team ID>.<Driver Bundle Identifier>
- keychain-access-groups set to <Team ID>.*
- com.apple.developer.team-identifier set to Team ID

更新2:

下面是我生成供应配置文件的过程:

  1. 注册一个新的供应配置文件-我选择“开发人员ID”下的“分发”,在最下面。这也是我生成的证书的目的。
  2. 生成一个配置配置文件-配置文件类型"Mac“,我选择一个App。
  3. 选择证书-选择与分发模式兼容的证书。
  4. 其他应享权利--为Mac配置文件/Mac配置文件选择"DriverKit和系统扩展模板“,该模板会导致”扩展权利“显示,并将"com.apple.developer.driverkit”设置为“真”
  5. 检查、命名和生成。-供应配置文件名称-选择一个名称并生成,然后下载和安装。

更新3:

我提交了一个支持请求,并最终得到了响应“我们已经联系了DriverKit权利筛选器,让您的权利模板更新,包括”,希望这是进步!

EN

回答 2

Stack Overflow用户

发布于 2020-09-16 13:30:00

一般答覆:

供应配置文件

  • 您将需要在开发人员帐户“证书、标识符和概要文件”区域中创建一个"App“,用于() dext和包含它的应用程序。是的,dext不是一个应用程序,但它仍然需要一个应用程序ID。
    • 对于右转,请确保"DriverKit…“项标记在“附加功能”项下。
    • 对于应用程序,确保“系统扩展”被勾选。
    • 确保您得到正确的包ID

  • 一旦您设置了应用程序ID,您将需要为您计划使用的每个签名机制(开发、通过开发人员ID分发或为应用程序存储生成供应配置文件 )以及为应用程序和dext生成。
    • 确保为每个配置文件在“应享权利”部分下选择正确的“模板”。这些“模板”似乎是由在苹果公司处理您的权限请求的人手工生成的,因此它们似乎没有一致的命名,但是它们通常会包含“系统扩展”和"DriverKit“。如果没有下拉列表,则可能没有授予这种类型的代码签名的权限。

Xcode可以下载配置文件本身,但我还建议将它们下载到本地文件中。这是因为您可以在供应配置文件上使用"QuickLook“来检查它们是否包含您期望的权利!选择Finder中的文件并按空格键。在进行任何其他故障排除之前,我强烈建议您检查所有供应配置文件是否与所讨论的目标的应享权利相匹配。除以com.apple.security.__,开头的配置文件之外,在权利文件中列出的每个权利都必须存在于供应配置文件中,否则它将无法工作。

权利

嵌入您的dext的应用程序将需要包括以下权限:

代码语言:javascript
运行
AI代码解释
复制
<key>com.apple.developer.system-extension.install</key>
<true/>

我被告知(在WWDC实验室的约会中),您还应该包含com.apple.application-identifier权限,并将其设置为上面生成的应用程序ID,这是10个字符的前缀,后面是一个点,后面是包ID。(前缀通常是您的团队ID)。

该右旋车将需要基本的DriverKit权利,加上任何其他驱动程序使用的驱动程序子系统的权利,等等。灵巧也是沙箱。例如。

代码语言:javascript
运行
AI代码解释
复制
<key>com.apple.developer.driverkit</key>
<true/>
<key>com.apple.developer.driverkit.transport.usb</key>
<array>
    <dict>
        <key>idVendor</key>
        <integer>1452</integer>
    </dict>
</array>
<key>com.apple.security.app-sandbox</key>
<true/>

同样,您显然也应该包括com.apple.application-identifier

具体答复:

由于问题已由应享权利文件和准备金配置文件的具体内容更新,我可以发现以下问题:

  1. 供应配置文件不包含DriverKit USB权限。也许你被授予它只是为了开发,而不是分配?不管是哪种情况,你都需要让苹果公司来解决这个问题。USB的配置配置文件在QuickLook中应该如下所示:

  1. 不要在您的USB (或PCI)权限中包含产品ID,除非Apple已经明确向您颁发了包含它们的配置配置文件。不过,我不认为这是他们目前正在做的事情,所以把他们排除在外。
  2. 我不知道com.apple.developer.system-extension.uninstall权利的原始来源是什么,但它似乎出现在网络上的许多地方。不过,这似乎并不是必要的,苹果也不同意。我不知道你的应用程序为什么要推出它,你是否在你的boot-args中启用了boot-args
  3. 在供应配置文件中,您没有在权利文件中声明的剩余权利是可以的。Xcode可能会对此发出警告,但它并没有实际问题。

如果您在修复所有这些之后仍然遇到问题,我建议您尝试在错误发生的瞬间捕获更详细的日志记录。以下命令行可能会有所帮助:

代码语言:javascript
运行
AI代码解释
复制
log stream --info --predicate='process=="taskgated-helper" || process=="kernel" || process=="trustd" || process=="syspolicyd" || process=="amfid" || process=="sysextd"'

请随时用您获得的任何有用的诊断信息来更新这个问题,我会尽力帮助您解决问题的。

其他信息:

以下几点也可能有帮助:

票数 4
EN

Stack Overflow用户

发布于 2020-10-14 13:56:05

我使用apple developer帐户中的证书、标识符和概要文件页面中生成的供应配置文件中所包含的权利。

对于应用程序和dext,我都创建了一个“标识符”,并具有正确的权限(应用程序的“系统扩展”,以及DriverKit的“”作为右转的附加功能)。

然后,生成两个配置文件,一个用于应用程序,一个用于右旋。下载这些。

然后,您可以用这个makefile规则为应用程序和dext生成一个plist:

代码语言:javascript
运行
AI代码解释
复制
%.plist: %.provisionprofile
        security cms -D -i $< | plutil - extract Entitlements xml1 - -o $@

这保证了您使用的权利将与您的提供配置文件指定的内容相匹配。

如果在提供配置文件中没有正确的应享权利,则没有选择正确的权利。或者,苹果还没有授予您正确的权限(因此,在创建标识符时,它们无法进行选择)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63927475

复制
相关文章
[754]ImportError: DLL load failed: 找不到指定的模块
在tensorflow的学习中,想使用tensorflow-gpu版的学习,充分利用计算机。但是跟网上很多博主的方法安装gpu,cuda是安装成功了,但是却一直报以下一个错误。
周小董
2020/02/14
14.8K0
[754]ImportError: DLL load failed: 找不到指定的模块
Python 的 ImportError 错误
问题 错误:ImportError: No module named XXX 在Python的工程中,偶尔会遇到文件无法引用的情况,即PyCharm IDE支持文件跳转,但是当文件执行时,找不到模块。
小小科
2018/05/03
1.1K0
Python 的 ImportError 错误
python ImportError:
 >>> import paramiko Traceback (most recent call last): File "<stdin>", line 1, in <module> python ImportError: No module named paramiko 模块没有安装 接下来安装 root@scpman:~# apt-cache search python* |grep paramiko python-paramiko - Make ssh v2 connections with Python apt-get install python-paramiko root@scpman:~# python Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import paramiko /usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken RandomPool_DeprecationWarning) >>> import paramiko >>> >>> print "www.scpman.com" www.scpman.com >>> 现在好用了
py3study
2020/01/06
5430
server.c:5491:15: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
错误原因是gcc版本的问题,由于我使用的redis6.0版本的。查看gcc版本,如下所示:
别先生
2021/03/02
4.4K0
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
最近在师姐机器上跑实验的时候,想利用matplotlib包来绘制损失曲线图,安装过程中碰到了一些小麻烦,感觉之前好像也碰到过类似的问题,网上一搜什么numpy、matplotlib、pillow包版本冲突啊,然后就是各种尝试,直至重装Anaconda,当时特头疼,最后无意中解决了,今天又碰到了类似的问题,这次记录下来防止忘记
全栈程序员站长
2022/09/14
6.8K1
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Python导入自定义模块ImportError: No module named 'xxx'问题
Python导入自定义模块ImportError: No module named 'xxx'问题
芥末鱿鱼
2022/05/05
2.1K0
ImportError: No modu
报错:ImportError: No module named bs4 我的Python版本 python --version python 2.7.5 按照网上方法尝试安装BeautifulSoup无果,BeautifulSoup据说能在python2的版本很好兼容,在python3版本兼容不是太好。 yum install BeautifulSoup     (不可行) yum install bs4               (不可行) 正确解决方法 yum install python-beautifulsoup 启发 rpm -qa|grep python可以看到python许多兼容库 安装的版本是 python-BeautifulSoup-3.2.1-7.el7.noarch 使用from bs4 import BeautifulSoup任然报错 使用import BeautifulSoup不报错
py3study
2020/01/08
3690
ImportError: No mod
  File "/usr/local/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
py3study
2020/01/08
6340
Python中ImportError:
Python脚本在编译的时候,经常会遇到ImportError: No module named *** 的错误 错误提示: ImportError: No module named request 问题分析: 原因是Python中有些模块未导入。 解决方法: 检查 from *** import *** 中模块名称是否有错误,如果没有错,就通过命令行 pip install *** 下载该模块,如果安装不成功,可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/ 搜索下载。
py3study
2020/01/13
1.3K0
python错误 ImportError
python错误:ImportError: No module named setuptools
py3study
2020/01/09
7480
[Python] ImportError: DLL load failed … 找不到指定的模块 此类问题解决方法
最近升级 Python 项目,由 Python2.7 升级到 Python3.8.3,项目使用了 PySide2,对于较新的Python3.8.3 , PySide2 可能存在些许不兼容问题,环境配置完成后,出现一连串的 ImportError: DLL load failed 找不到指定模块 对于很多 Python 开发者来说,这类问题最为头疼,不知道如何下手解决。
全栈程序员站长
2022/09/14
11.2K0
[Python] ImportError: DLL load failed … 找不到指定的模块 此类问题解决方法
解决module = loader.load_module(fullname) ImportError: DLL load failed: 找不到指定的模块。
在使用Python时,有时可能遇到​​ImportError: DLL load failed: 找不到指定的模块​​错误。这个错误通常是由于无法找到依赖的动态链接库(DLL)文件引起的。本篇文章将介绍一些解决这个问题的方法。
大盘鸡拌面
2023/10/25
1.9K0
关于 python ImportError: No module named 的问题
今天在 centos 下安装 python setup.py install 时报错:ImportError: No module named sysconfig, 当时急着用,就顺手直接源码编译了一把,make install 后就 ok 了。 然后又在 cygwin 下安装时同样的问题,这下 cygwin 源码编译也不行了,因为会调用很多 linux 特有的类库。 虽然最后解决了 import 的问题,但是又报了其它错。比如 ldconfig 啥的,可能是我cygwin环境没装全。 只有
用户1177713
2018/02/24
2.9K0
关于 python ImportError: No module named 的问题
idea导入maven项目右侧没有maven_maven多模块和单模块的
今天重装了idea,发现右边的maven,数据库模块不见了,在网上找了一些方法(如:IDEA Maven不见了_小鹰信息技术服务部-CSDN博客_maven找不到了),也没解决,最后自己瞎捣鼓出来了,记录下。
全栈程序员站长
2022/11/09
3.5K1
idea导入maven项目右侧没有maven_maven多模块和单模块的
ImportError: No module named 'ConfigParser'
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
2.3K0
pycharmmatplotlib装不上_pycharm没有matplotlib模块
打开Anaconda Prompt, 然后去网站https://matplotlib.org/下载相关模块,再使用 “路径名pip install 模块” 更新模块即可。
全栈程序员站长
2022/09/27
4650
pycharmmatplotlib装不上_pycharm没有matplotlib模块
python调用matplotlib报错_pycharm没有matplotlib模块
可能是因为网络带宽或是访问限制的问题,在第一个网址无法正常获取安装包,通过镜像网站可以轻松解决以上问题
全栈程序员站长
2022/09/27
6680
python调用matplotlib报错_pycharm没有matplotlib模块
uwsgi 的 ImportError: No module named 'encodings' 错误
在做的项目使用Django REST做后端,发现使用python3 manage.py runserver时能够正常启动,使用uwsgi时报错:
fanzhh
2019/08/20
2.7K0
[1207]ImportError:无法导入名称“ RandomizedLogisticRegression”
ImportError:无法导入名称“ RandomizedLogisticRegression”
周小董
2023/10/10
4340
点击加载更多

相似问题

ImportError:没有名为“ImportError”的模块

16

ImportError:没有模块名为bottle

511

ImportError:没有模块名为dom

45

ImportError:没有模块名为package

14

ImportError:没有模块名为date

45
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文