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


20

我想在MaC OS X 10.8 Mountain Lion的安全和隐私设置中从定位服务中删除应用程序。(即使将这些应用程序卸载,这些应用程序仍会列出。)我在Mac OS X 10.7的“安全性和隐私”中找到了从位置服务中删除应用程序一文,这使我朝着正确的方向前进。这是等效的OS X 10.8.2 Mountain Lion。主要区别在于clients.plist文件的位置。我还想提供一个循序渐进的过程。

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

1.启动终端,然后对根shell进行sudo
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.重新定位
killall locationd

如果这些应用程序仍然存在,请按照以下步骤再次执行该过程,但在按如下所示确定PID后,使用kill -9重新启动定位。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就足够了。第二次不是。我不知道为什么。它的位置就像是保留了一个缓存并重建了client.plist。我之所以这样说是因为在运行killall之后,甚至在重新启动后,这些条目都被添加回了client.plist中。无论是什么根本原因,使用kill -9都能为我解决问题。

如果出现问题,请复制回原始文件并重新定位。
cp -p clients.plist.save clients.plist
killall locationd(或kill -9方法)

我希望这有帮助。干杯!


1
kill -HUP可能更可靠;这是旧的kill信号,告诉守护程序刷新其缓存并重新读取其配置文件。我看到定位的killall -HUP将起作用。其他杀死无效的可能原因可能是高速缓存文件留给新产生的进程读取。
内文·威廉姆斯

有趣的事实:我不确定在High Sierra之前是否存在此行为,但是至少在此macOS中,如果取消选中首选项窗格中不再存在的文件,通常该应用程序将不再在列表中显示它。但是,使用这种方法,我发现实际上这些应该删除的应用程序中的几个仍在列表中,只是没有显示。
DonielF '18

我还应注意,基于我的经验:出于某种原因,我尝试使用它从系统偏好设置中删除我的Applescript,并且该消息不断弹出,它希望我进行几次尝试,直到最终关闭。我认为这是因为我一直试图在Applescript中运行该行代码,并且bash一直在后台运行,直到从我的系统偏好设置中将其删除为止,然后继续到bash的下一行。显然,由于我有多个运行在后台,因此我必须在执行此操作时分别取消每个运行。
DonielF

Answers:


5

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

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

因此目录和文件可以被所有用户读取和写入。然后,为方便起见,请输入您的登录ID:

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

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

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

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

一旦删除或禁用了您满意的密钥,请保存文件并退出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隐私选项卡应该确认您的更改。

标准的免责声明,灾难的警示故事,责骂,咯咯叫声和“此行真的有必要吗?” 反射特别适用。


3

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

我认为最快,最安全的方法是通过OS X命令行实用程序tccutil

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

重置位置服务

tccutil reset CoreLocationAgent

重置对联系人/通讯录的访问权限:

tccutil reset AddressBook

重置对提醒的访问权限

tccutil reset Reminders

重置对日历的访问

tccutil reset Calendar

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


不幸的是没有为我工作。我收到无法重置数据库的消息。
奇怪的时候

@strangetimes:我完全忘记了这一点。我没有尝试过此链接中提到的经过修改的tccutil,但在我看来值得一
Andreas

@strangetimes:根据github.com/jacobsalmela/tccutil
Andreas

该命令tccutil reset CoreLocationAgent似乎不再起作用。看到这个问题
nix

它对我来说很有效,可以删除日历,但无法请求新的授权。为此,我必须删除用户/库/日历/日历缓存数据库,然后重新启动计算机
Cristi Băluță 18/11/29

1

这是一个古老的解决方案,我提出的解决方案在技术上与帖子中已经接受的解决方案没有什么不同,但是麻烦却少得多,而且自动化也更容易(对于调试很有用)。做就是了

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

作为根。


为我工作。谢谢!
dbv

0

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

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

然后重新启动计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.