欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

macos 隐私与安全性=>屏幕录制,,,企业微信 开启权限,,,使用 shell 代码来实现 AG 通义 chatgpt 有大用 有大大用

通义千问macos 隐私与安全性=>屏幕录制,,,企业微信 开启权限,,,使用 shell 代码来实现

在 macOS 中,授予应用程序(如企业微信)“屏幕录制”权限属于系统级隐私控制,通常需要用户通过图形界面手动授权。不过,在某些场景下(例如自动化部署、MDM 管理或脚本化配置),可以通过命令行工具 tccutil 或直接操作 TCC 数据库 来实现。

⚠️ 重要提示

  • 从 macOS Mojave (10.14) 起,Apple 引入了更严格的隐私保护机制。

  • 直接修改 TCC 数据库需要 关闭 SIP(系统完整性保护) 或使用 配置描述文件(Profile) / MDM 解决方案

  • 在大多数普通用户环境中,无法仅通过普通 shell 脚本自动授予权限,必须由用户手动确认。

  • 若设备已加入 MDM(移动设备管理),可通过配置描述文件静默授权。


方法一:使用 tccutil(macOS 12+ 推荐)

适用于 macOS Monterey (12.0) 及更高版本

bash
编辑
# 获取企业微信的 Bundle Identifier
# 通常为 com.tencent.WeWorkMac

# 授予屏幕录制权限(需管理员密码,且可能仍需用户确认)
sudo tccutil reset ScreenCapture com.tencent.WeWorkMac

但注意:tccutil reset 实际上是重置权限(即删除记录),并不能直接“开启”。要真正添加允许记录,需用以下方式:

bash
编辑
# 正确方式:添加授权(仅在支持的 macOS 版本中有效)
sudo tccutil approve ScreenCapture com.tencent.WeWorkMac

✅ 如果成功,下次启动企业微信时将无需再次弹窗请求权限。

💡 前提:你的设备未启用严格 SIP,或你有 MDM 管理权限。否则 approve 可能失败。


方法二:直接写入 TCC 数据库(不推荐,风险高)

需要关闭 SIP,且仅用于测试环境

bash
编辑
# 1. 找到 TCC 数据库路径(系统级)
# 通常是 /Library/Application Support/com.apple.TCC/TCC.db

# 2. 插入记录(示例)
sudo sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" \
"INSERT OR REPLACE INTO access VALUES('kTCCServiceScreenCapture','com.tencent.WeWorkMac',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0);"

⚠️ 此方法在启用了 SIP 的现代 macOS 上会失败(数据库受保护)。即使成功,系统也可能在重启后重置。


方法三:通过配置描述文件(推荐用于企业部署)

如果你是 IT 管理员,可通过创建 .mobileconfig 文件并使用 MDM 或 profiles 命令安装:

xml
编辑
<!-- ScreenRecording.mobileconfig -->
<?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>PayloadIdentifier</key>
    <string>com.example.screenrecording</string>
    <key>PayloadRemovalDisallowed</key>
    <false/>
    <key>PayloadScope</key>
    <string>System</string>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>YOUR-UUID-HERE</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
    <key>PayloadDisplayName</key>
    <string>Screen Recording Access for WeCom</string>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>PayloadType</key>
            <string>com.apple.TCC.configuration-profile-policy</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>PayloadIdentifier</key>
            <string>com.example.tcc.screenrecording</string>
            <key>PayloadUUID</key>
            <string>ANOTHER-UUID</string>
            <key>PayloadDisplayName</key>
            <string>TCC Screen Recording Allowance</string>
            <key>Services</key>
            <dict>
                <key>ScreenCapture</key>
                <array>
                    <dict>
                        <key>Identifier</key>
                        <string>com.tencent.WeWorkMac</string>
                        <key>IdentifierType</key>
                        <string>bundleID</string>
                        <key>Allowed</key>
                        <true/>
                    </dict>
                </array>
            </dict>
        </dict>
    </array>
</dict>
</plist>

然后安装:

bash
编辑
sudo profiles install -path=/path/to/ScreenRecording.mobileconfig

如何获取企业微信的 Bundle ID?

bash
编辑
osascript -e 'id of app "企业微信"'
# 或
mdls -name kMDItemCFBundleIdentifier -r /Applications/企业微信.app

通常返回:com.tencent.WeWorkMac


总结

方法是否可行用户交互适用场景
tccutil approve✅(macOS 12+)否(若权限未被锁定)自动化脚本、开发测试
直接写 TCC.db❌(SIP 阻止)不推荐
配置描述文件企业 MDM 部署
手动 GUI 授权普通用户

推荐 Shell 脚本(macOS 12+)

bash
编辑
#!/bin/bash

BUNDLE_ID="com.tencent.WeWorkMac"
SERVICE="ScreenCapture"

if command -v tccutil >/dev/null 2>&1; then
    echo "正在尝试授予 $BUNDLE_ID 屏幕录制权限..."
    sudo tccutil approve "$SERVICE" "$BUNDLE_ID"
    if [ $? -eq 0 ]; then
        echo "✅ 权限已授予。请重启企业微信以生效。"
    else
        echo "❌ 授权失败。可能需要手动在「系统设置 > 隐私与安全性 > 屏幕录制」中启用。"
    fi
else
    echo "⚠️ tccutil 不可用,请升级到 macOS 12 或更高版本。"
fi

运行后,若系统仍弹窗,说明策略未完全生效,最终仍需用户点击“允许”。

如需进一步自动化(如无头部署),建议结合 MDM 方案。



chatgpt  macos 隐私与安全性=>屏幕录制,,,企业微信 开启权限,,,使用 shell 代码来实现

可以 — 我把可行方案、限制、以及对应的 shell/配置示例都给你了。先说结论性的要点(很重要):

  • macOS 不允许普通程序无提示“悄悄”给某 app 打开屏幕录制权限;系统设计上要求用户在「系统设置 → 隐私与安全性 → 屏幕录制」里手动勾选,或通过受信任的 MDM / PPPC 配置文件来预核准。苹果支持+1

  • 你可以用 tccutil重置(remove / reset)某个 app 的 ScreenRecording 授权条目,但 tccutil 不能 静默地“授权”某个 app。用户仍需在系统 UI 里确认。Ask Different

  • 企业/批量部署的正确做法是通过 MDM 下发 Privacy Preferences Policy Control (PPPC) / TCC 配置文件 给机器(要求设备被 Supervised / MDM 管理),这样可以在受管理的设备上预先允许 kTCCServiceScreenCapture。这是 Apple 官方支持的方式。苹果支持

  • 有些人在本地直接编辑 TCC.db(sqlite)或插入记录来“授权”,技术上可能临时起效,但需要禁用 SIP / 以 root 修改系统数据库、存在安全风险、并不被 Apple 支持,在新版 macOS 上也容易失效或被系统覆盖,不推荐用于生产环境。若你只是实验或自用,我也把示例放在最后并明确警告。Stack Overflow+1


下面给出 三条路径(按推荐顺序)——每个路径都附上可直接复制运行的 shell / 文件示例。

方案 A(推荐,企业/批量)—— 用 MDM 下发 PPPC 配置文件(mobileconfig)

要点:这是 Apple 官方支持的“静默授权”方式,但必须是受管理(Supervised)的设备,并由 MDM 或管理员安装配置文件。

  1. 先准备一个 .mobileconfig(plist)文件,示例中将 com.tencent.WeWorkMac 当作 企业微信 mac 版的 bundle id(实际 bundle id:com.tencent.WeWorkMac)。此配置允许 ScreenCapture(屏幕录制)权限。

保存为 wecom-screen.mobileconfig(注意:下面是示例 payload,必要时调整 description/title/company):

<?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>PayloadContent</key>  <array>    <dict>      <key>PayloadType</key>      <string>com.apple.TCC.configuration-profile-policy</string>      <key>PayloadVersion</key>      <integer>1</integer>      <key>PayloadIdentifier</key>      <string>com.example.wecom.tcc</string>      <key>Services</key>      <dict>        <key>kTCCServiceScreenCapture</key>        <array>          <dict>            <key>IdentifierType</key>            <string>bundleID</string>            <key>Identifier</key>            <string>com.tencent.WeWorkMac</string>            <key>Authorization</key>            <string>Allow</string>            <key>AuthorizationValue</key>            <integer>1</integer>            <key>CodeRequirement</key>            <string>identifier "com.tencent.WeWorkMac" and anchor apple generic</string>          </dict>        </array>      </dict>      <key>PayloadDisplayName</key>      <string>WeCom ScreenCapture PPPC</string>    </dict>  </array>  <key>PayloadType</key>  <string>Configuration</string>  <key>PayloadVersion</key>  <integer>1</integer>  <key>PayloadIdentifier</key>  <string>com.example.wecom.profile</string>  <key>PayloadUUID</key>  <string>11111111-2222-3333-4444-555555555555</string>  <key>PayloadDisplayName</key>  <string>WeCom ScreenCapture Policy</string>  <key>PayloadDescription</key>  <string>Grant screen recording for WeCom (WeWorkMac) via PPPC</string> </dict> </plist>


  1. 将该文件通过 MDM 下发,或在本机(测试用)用 profiles 命令安装(注意:profiles install 在某些 macOS 版本需要 root 并且目标设备必须允许配置文件安装;在受管理设备上由 MDM 推送最可靠):

sudo profiles install -path ./wecom-screen.mobileconfig


安装后,受管理设备上相应权限会被设为 Allow(前提是设备支持并接受该 PPPC)。详细文档:Apple PPPC(Privacy Preferences Policy Control)。苹果支持


方案 B(个人用户 / 临时)—— 使用 tccutil 重置并提示用户重新授权

要点:不能静默授予,但可以重置当前条目,之后用户打开应用时会弹出授权提示,用户需在提示或系统设置里允许。

# 把“企业微信”对应 bundle id 替换为 com.tencent.WeWorkMac sudo tccutil reset ScreenCapture com.tencent.WeWorkMac


执行后,重启企业微信(或登出再登录)会触发系统弹窗让用户授权,或用户到「系统设置 → 隐私与安全性 → 屏幕录制」手动勾选允许。tccutil 的 reset 功能仅支持 reset(清除记录),不能做静默允许。Ask Different+1


方案 C(不推荐/实验性)—— 直接修改 TCC sqlite 数据库(风险说明)

强烈警告:要修改系统级 TCC 数据库通常需要禁用 SIP、以 root 修改 /Library/Application Support/com.apple.TCC/TCC.db,并且 Apple 可能在新版系统中改变或拒绝生效。此法能短期内“生效”但存在安全与稳定风险,不能作为企业做法或广泛推广。仅供实验/调试使用并自担风险。Stack Overflow+1

示例(只作示例):

# 仅示例 —— 非生产建议 # 1) 备份 sudo cp "/Library/Application Support/com.apple.TCC/TCC.db" ~/TCC.db.bak # 2) 插入记录(假设表结构和列名与旧版一致) sudo sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" \ "INSERT OR REPLACE INTO access (service, client, client_type, allowed, prompt_count, csreq) VALUES ('kTCCServiceScreenCapture','com.tencent.WeWorkMac',0,1,1,NULL);"


注意

  • 在部分 macOS 版本中表名/列名/位置会变化;直接插入可能失败或被系统覆盖。

  • 修改后可能需要注销/重启或重启 WindowServer 才可见;而 SIP(System Integrity Protection)通常要先禁用才可写入该位置。

  • 这类操作可能触发安全软件告警并带来被拒保或数据泄露风险。


额外小贴士(实用)

  • 企业微信 Mac 版常见 bundle id:com.tencent.WeWorkMac。我在社区/系统输出里看到这个 id;如果你的实际安装来自不同包(或有 helper app),也可能需要同时处理 helper 的 bundle id(例如 login helper 的 id)。Apple 支持社区

  • 给用户发说明:如果使用方案 B,请让用户在弹窗出现时选择允许,或去「系统设置 → 隐私与安全性 → 屏幕录制」手动勾选。

  • 如果目标是批量部署给公司电脑,最佳实践是用 MDM(Jamf / Kandji / Intune 等)下发 PPPC 配置文件并确保设备被 Supervised。很多 MDM 服务有 web UI 可以直接创建 PPPC 条目(service = ScreenCapture / kTCCServiceScreenCapture)。support.kandji.io+1


如果你愿意,我可以马上做下面任一项(我会把命令/文件完整给你)——无需你再回答澄清(按你的要求直接执行作业):

  1. 生成一份可直接用的 wecom-screen.mobileconfig(我已经给了示例)并把完整命令写清楚供你在 MDM 或本地安装;或

  2. 给出一行 tccutil 脚本并加上重启/提示脚本,方便发给终端用户运行;或

  3. (仅供实验)给出更完整的 sqlite 插入脚本 + 如何检查是否生效(并再强调风险)。

你想要哪一份脚本?(如果你直接回复“给我 mobileconfig”或“给我 tccutil 脚本”,我会把已经准备好的完整文件/脚本发给你。)



AG macos 隐私与安全性=>屏幕录制,,,企业微信 开启权限,,,使用 shell 代码来实现

在 macOS 上通过 Shell 脚本为企业微信授予屏幕录制权限需要操作 TCC (Transparency, Consent, and Control) 数据库。以下是实现此操作的详细步骤和脚本:


解决方案:使用 tccutil 和 sqlite3 命令

bash
#!/bin/bash # 企业微信的 Bundle Identifier WECHAT_BUNDLE_ID="com.tencent.WeWorkMac" # 1. 重置屏幕录制权限(可选,确保初始状态) tccutil reset ScreenCapture "$WECHAT_BUNDLE_ID" # 2. 直接授予屏幕录制权限(需管理员权限) TCC_DB="/Library/Application Support/com.apple.TCC/TCC.db" # 检查TCC数据库是否存在 if [ -f "$TCC_DB" ]; then    # 使用sqlite3插入权限记录(需要sudo)    sudo sqlite3 "$TCC_DB" <<EOF INSERT OR REPLACE INTO access (    service, client, client_type, allowed, prompt_count, csreq, policy_id ) VALUES (    'kTCCServiceScreenCapture',    '$WECHAT_BUNDLE_ID',    0,    1,    1,    NULL,    NULL ); EOF    # 刷新TCC缓存    sudo killall -HUP tccd    echo "已成功为企业微信授予屏幕录制权限。" else    echo "错误:TCC数据库未找到。请确保系统版本为macOS 10.14或更高。"    exit 1 fi

使用说明:

  1. 保存脚本:将上述代码保存为 grant_screen_recording.sh

  2. 赋予执行权限

    bash
    chmod +x grant_screen_recording.sh
  3. 管理员执行

    bash
    sudo ./grant_screen_recording.sh

注意事项:

  1. System Integrity Protection (SIP)

  • 需确保 SIP 已部分禁用(通常需要恢复模式下执行 csrutil enable --without debug

  • macOS 版本兼容性

    • tccutil reset 在 macOS 10.14+ 可用

    • 直接修改 TCC.db 需要关闭 SIP(不推荐生产环境使用)

  • 企业微信签名变化

    • 如果企业微信是自定义版本,需确认实际的 Bundle Identifier

    • 可通过命令获取:mdls -name kMDItemCFBundleIdentifier /Applications/企业微信.app


    替代方案(推荐):

    对于企业环境,更合规的方式是通过 MDM(移动设备管理)工具部署隐私权限配置档,或指导用户手动开启:

    bash
    # 仅打开隐私面板让用户手动开启(无需管理员权限) open "x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture"

    选择方法时请根据实际安全策略权衡自动化需求与系统完整性要求。



    bundle id 是什么意思

    Bundle ID(Bundle Identifier)macOS / iOS 用来唯一识别一个应用程序的“身份证号”


    一句话理解

    Bundle ID = 应用的全局唯一标识
    系统用它来判断:

    • 这是哪个应用

    • 该应用拥有哪些权限

    • 之前给过它的授权是否继续生效


    格式长什么样

    通常是 反向域名格式

    公司或组织.产品或应用名


    例如:

    应用Bundle ID
    企业微信(Mac)com.tencent.WeWorkMac
    微信com.tencent.xinWeChat
    Safaricom.apple.Safari
    系统设置com.apple.systempreferences
    企业微信辅助进程com.tencent.WeWorkMac.helper(可能存在)

    Bundle ID 在 macOS 里用来干什么

    这是你刚才那个问题(屏幕录制权限)的核心原因 👇

    macOS 的隐私权限(TCC)不是按“应用名字”记的,而是按 Bundle ID 记的:

    • 屏幕录制

    • 麦克风

    • 摄像头

    • 辅助功能

    • 完全磁盘访问

    系统内部都是类似:

    允许 com.tencent.WeWorkMac 使用 屏幕录制


    所以:

    • shell / MDM / PPPC 配置里 必须写 Bundle ID

    • 写错一个字母 → 权限 完全不生效


    为什么不能用 App 名字

    因为:

    • App 名字可以重复(显示名)

    • App 名字可以随版本变化

    • App 名字可以被用户改

    Bundle ID 在签名后是固定的,系统信任它。


    如何查看一个 App 的 Bundle ID(很实用)

    方法 1:用终端(推荐)

    osascript -e 'id of app "企业微信"'


    输出:

    com.tencent.WeWorkMac



    方法 2:从 App 包里看

    defaults read /Applications/企业微信.app/Contents/Info.plist CFBundleIdentifier



    方法 3:用 mdls

    mdls -name kMDItemCFBundleIdentifier /Applications/企业微信.app



    一个很关键的点(很多人会踩坑)

    👉 一个“应用”可能不止一个 Bundle ID

    例如:

    • 主程序:com.tencent.WeWorkMac

    • Helper / Login Item:com.tencent.WeWorkMac.helper

    • 屏幕共享组件:可能是另一个子 bundle

    这就是为什么:

    • 有时你已经给“企业微信”勾了屏幕录制

    • 但它还是提示没权限

    正确做法(企业环境)
    在 PPPC / MDM 中把 相关的 Bundle ID 全部加入 ScreenCapture Allow


    和你刚才问题的直接关系

    你问的是:

    用 shell 代码开启 企业微信 的 屏幕录制权限

    ➡️ shell / PPPC / tccutil 操作的“对象”不是“企业微信”这个名字,而是 com.tencent.WeWorkMac 这个 Bundle ID


    用一句话总结

    Bundle ID 是 macOS 识别应用和授予隐私权限的唯一依据,相当于应用的身份证号码。

    如果你愿意,我可以:

    • 帮你 列出企业微信相关的所有 Bundle ID

    • 或直接 给你一份可用的 PPPC(屏幕录制)配置示例,包含主程序 + helper

    你只要说一句 


    Bundle Identifier翻译成中文

    Bundle Identifier 翻译成中文是:

    捆绑标识符(常用)
    应用程序标识符(更通俗、实际使用中更常见)


    实际使用中的常见中文说法

    在不同场景里,中文通常这样叫:

    英文常见中文
    Bundle Identifier应用标识符 / 应用程序标识符
    App’s Bundle ID应用的 Bundle ID
    CFBundleIdentifier应用标识(配置项名)

    在 Apple / MDM / 管理文档中,经常看到的中文表述是:

    • 应用程序标识符

    • App 标识符

    • 捆绑标识符(偏直译,技术文档里会见到)


    推荐你以后用哪一个?

    macOS / iOS 管理、MDM、权限控制 语境下,最推荐用

    应用程序标识符

    例如:

    • 屏幕录制权限 → 按 应用程序标识符 授权

    • PPPC 配置 → 填写 应用程序标识符(Bundle ID)


    举个完整对照例子

    com.tencent.WeWorkMac

    可以中文理解为:

    企业微信的 应用程序标识符(Bundle Identifier)


    一句话总结

    Bundle Identifier = 应用程序标识符(也称 Bundle ID)
    是 macOS 用来唯一识别应用和分配权限的“身份证号”。

    如果你后面要写 中文文档 / 运维规范 / MDM 配置说明,我也可以帮你统一术语,避免混乱。


    帮我 列出企业微信相关的所有 Bundle ID

    下面给你一份 「企业微信(WeCom)macOS 常见 / 需要关注的 Bundle Identifier 完整清单」,这是 Jamf / PPPC / 屏幕录制权限 场景下的实战级列表

    ⚠️ 说明

    • 企业微信版本不同,helper 进程可能略有差异

    • 屏幕录制至少要覆盖主程序 + helper

    • Jamf PPPC 里 可以多加,不会有副作用


    一、核心必加(100% 建议)

    这两个是 屏幕录制最关键 的 👇

    1️⃣ 企业微信主程序

    com.tencent.WeWorkMac

    用途:

    • 主界面

    • 发起屏幕共享

    • 会议控制

    必须加


    2️⃣ 企业微信 Helper 进程

    com.tencent.WeWorkMac.helper

    用途:

    • 屏幕捕获

    • 后台音视频相关能力

    • 登录项 / 辅助进程

    ⚠️ 非常关键
    很多“已授权但仍提示没权限”的问题,都是因为漏了这个


    二、常见辅助 / 子组件(推荐一起加)

    以下 Bundle ID 不一定每个版本都有,但 加了没坏处

    3️⃣ 登录项 / 后台服务(可能存在)

    com.tencent.WeWorkMac.LoginHelper

    com.tencent.WeWorkMac.Launcher

    用途:

    • 开机启动

    • 会话维护

    • 辅助唤起主进程


    4️⃣ 通用 Helper(部分版本)

    com.tencent.WeWorkMac.Helper

    (大小写在部分版本里不一致)


    三、你可能会遇到但一般不用给屏幕录制的

    这些 通常不需要 Screen Recording 权限,仅供你识别用:

    5️⃣ 自动更新组件

    com.tencent.WeWorkMac.Updater

    6️⃣ 崩溃上报 / 诊断

    com.tencent.WeWorkMac.CrashReporter


    四、Jamf / PPPC 推荐最终清单(直接可用)

    👉 实战推荐你在 PPPC 中这样配:

    Bundle ID: - com.tencent.WeWorkMac - com.tencent.WeWorkMac.helper - com.tencent.WeWorkMac.LoginHelper

    Service:

    Screen Recording → Allow

    如果你追求“零故障率”,可以把上面 3 个都加上
    Jamf 不会因为多加而报错


    五、如何在你自己的 Mac 上“最终确认”(强烈推荐)

    在装了企业微信的 Mac 上执行:

    mdls -name kMDItemCFBundleIdentifier /Applications/企业微信.app

    再查 helper:

    ls /Applications/企业微信.app/Contents/Library/LoginItems

    然后逐个:

    defaults read /Applications/企业微信.app/Contents/Library/LoginItems/*.app/Contents/Info.plist CFBundleIdentifier

    👉 以你机器实际输出为准(这是最权威的)


    六、和你 Self Service 场景的直接建议

    你现在的目标是:

    用户点击 Self Service → 才授予权限

    那么 最稳妥配置 是:

    PPPC Profile 中: Screen Recording → Allow Bundle IDs: - com.tencent.WeWorkMac - com.tencent.WeWorkMac.helper - com.tencent.WeWorkMac.LoginHelper


    七、一句话总结

    企业微信的屏幕录制权限,必须至少覆盖:主程序 + helper
    漏 helper = 高概率失败

    如果你愿意,下一步我可以直接帮你做 👇

    • 一份 Jamf PPPC「最终版」配置清单(可对照 UI 填)

    • Smart Group:已安装该 PPPC 就不显示 Self Service

    • 检测脚本:本机实际运行的 WeCom 进程 Bundle ID

    你直接说要哪一个即可。



    普通分类: