在 Mac OS X 10.8 的“安全和隐私”中从“定位服务”中删除应用程序

在 Mac OS X 10.8 的“安全和隐私”中从“定位服务”中删除应用程序

我想在 Mac OS X 10.8 Mountain Lion 的安全和隐私设置中从定位服务中删除应用程序。(即使卸载了这些应用程序,它们仍然在列表中。)我找到了帖子从 Mac OS X 10.7 的“安全和隐私”中的“定位服务”中删除应用程序,这让我找到了正确的方向。下面是适用于我的 OS X 10.8.2 Mountain Lion 等效版本。主要区别在于 clients.plist 文件的位置。我还想提供一个分步过程。

免责声明:这对我有用。请确保您的系统有良好的备份。此过程包括备份 clients.plist 文件,但安全永远是第一位的。

1. 启动终端,然后使用 sudo 进入 root shell
sudo -s

2. 转到 /var/db/locationd
cd /var/db/locationd

3.备份 clients.plist 文件
cp -p clients.plist clients.plist.save

4.将clients.plist转换为xml(可编辑格式)
plutil -convert xml1 clients.plist

5.使用 vi (vim) 编辑 clients.plist 文件并删除该应用程序。
vi clients.plist

该文件可能包含许多应用程序条目。以下是单个应用程序条目的格式(本例中为 Safari)。需要删除整个条目。

    <key>com.apple.Safari</key>
    <dict>
        <key>Authorized</key>
        <true/>
        <key>BundleId</key>
        <string>com.apple.Safari</string>
        <key>Executable</key>
        <string>/Applications/Safari.app/Contents/MacOS/Safari</string>
        <key>LocationTimeStopped</key>
        <real>376348187.80421197</real>
        <key>Registered</key>
        <string>/Applications/Safari.app/Contents/MacOS/Safari</string>
        <key>RequirementString</key>
        <string>identifier "com.apple.Safari" and anchor apple</string>
        <key>Whitelisted</key>
        <false/>
    </dict>

6. 将 clients.plist 文件转换回二进制文件
plutil -convert binary1 clients.plist

7. 重启 locationd
killall locationd

如果应用程序仍然存在,请再次执行该过程,但在确定 PID 后使用 kill -9 重新启动 locationd,如下所示。PID 是 ps 输出中的第二个字段。

ps -ef | grep locationd | grep -v grep
输出:205 427 1 0 6:31PM ?? 0:00.07 /usr/libexec/locationd
kill -9 427

我运行了两次该过程,每次删除一个应用程序。第一次,killall 就足够了。第二次,不行。我不知道为什么。它表现得好像 locationd 保留了缓存并重建了 clients.plist。我这样说是因为在运行 killall 后,甚至在重新启动后,条目都会被重新添加到 clients.plist 中。无论根本原因是什么,使用 kill -9 为我解决了问题。

如果情况不妙,则复制回原始文件并重新启动 locationd。
cp -p clients.plist.save clients.plist
killall locationd(或 kill -9 方法)

希望这些能帮到你。干杯!

答案1

Xcode 的属性列表编辑器也可以用来删除旧应用程序的条目,但由于该文件很难获取,因此必须暂时打开权限:

mini-nevie:~ root# chmod o+rwx /var/db/locationd/ /var/db/locationd/clients.plist

因此所有用户都可以读取和写入目录和文件。然后,为了方便起见,使用 su 转到您的登录 ID:

mini-nevie:~ root# su - nevinwilliams
mini-nevie:~ nevinwilliams$ open /var/db/locationd/clients.plist 

假设 Xcode 是打开 *.plist 文件的默认应用程序,并且您熟悉属性列表编辑器。在 Root 属性下,有 3 个默认词典条目:

com.appl
com.appl.locationd.executable-/usr/libexec/UserEventAgent
com.appl.aosnotifyd

这些不应该被删除。对于属于早已消失的应用程序的条目,您可以将鼠标悬停在相应应用程序行的“词典”列的左侧,那里会出现一个反向的灰色“-”。单击它将删除该项目及其所有子项。如果您希望先检查条目,请单击关键字符串左侧的灰色三角形(Finder 列表视图用户熟悉的三角形)将展开词典并显示其元素。

删除或禁用键后,保存文件并退出 Xcode。然后,返回终端,执行以下操作:

mini-nevie:~ nevinwilliams$ exit
logout
mini-nevie:~ root# 

按两次向上箭头来调用 chmod 命令,ctrl-A转到行首,cursor-right大约八次,将 '+' 更改为 '-',或者输入以下内容(如下所示)将权限恢复到原来的状态:

mini-nevie:~ root# chmod o-rwx /var/db/locationd /var/db/locationd/clients.plist 

然后 HUP 位置守护进程:

 mini-nevie:~ root# killall -HUP locationd

快速检查 Security.PrefPane 隐私选项卡应该可以确认您的更改。

标准的免责声明、悲惨的警示故事、责骂、咯咯笑以及“这次旅行真的有必要吗?”的反思尤其适用。

答案2

使用 tccutil(OS X 命令行实用程序)

我认为最快、最安全的方法是使用 OS X 命令行实用程序工具

  • 打开一个新终端窗口
  • 关闭所有打开的“安全和隐私”首选项窗口
  • 键入或粘贴以下突出显示的命令

重置定位服务

tccutil reset CoreLocationAgent

重置联系人/地址簿的访问权限:

tccutil reset AddressBook

重置提醒访问权限

tccutil reset Reminders

重置日历访问权限

tccutil reset Calendar

这就是全部了。顺便说一句,不需要 Sudo。

答案3

这是旧的,我提出的解决方案在技术上与帖子和已接受的解决方案没有什么不同,但它麻烦少得多,而且更容易自动化(对调试有用)。只需这样做

/usr/libexec/PlistBuddy -c 'Delete <bundle-id>' /var/db/locationd/clients.plist
killall -HUP locationd

以 root 身份运行。

答案4

除了以前的答案之外,只有在纠正文件所有权后,这个问题才消失:

# chown -R _locationd:_locationd /var/db/locationd/
# chmod 750 /var/db/locationd/
# chmod 644 /var/db/locationd/clients.plist

然后重新启动计算机。

相关内容