Удаление приложений из служб определения местоположения в разделе Безопасность и конфиденциальность в Mac OS X 10.8

9461
Scot S

Я хотел удалить приложения из служб определения местоположения в настройках безопасности и конфиденциальности на MaC OS X 10.8 Mountain Lion. (Приложения все еще были в списке, несмотря на то, что они были удалены.) Я обнаружил сообщение « Удалить приложение из Location Services» в разделе « Безопасность и конфиденциальность» в Mac OS X 10.7, и это заставило меня двигаться в правильном направлении. Вот OS X 10.8.2 Mountain Lion эквивалент, который работал для меня. Основным отличием является расположение файла clients.plist. Я также хотел предоставить пошаговый процесс.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это сработало для меня. Убедитесь, что у вас есть хорошая резервная копия вашей системы. Этот процесс включает в себя создание резервной копии файла clients.plist, но никогда нельзя быть слишком безопасным.

1. Запустите терминал и затем 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

Если приложения все еще там, повторите процесс, за исключением перезапуска locationd с использованием kill -9 после определения PID следующим образом. 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 хранил кеш и перестраивал client.plist. Я говорю об этом, потому что записи были добавлены обратно в clients.plist после запуска killall - и даже после перезагрузки. Независимо от первопричины, использование kill -9 решило проблему для меня.

Если что-то пойдет не так, скопируйте исходный файл и перезапустите его.
cp -p clients.plist.save clients.plist
killall locationd(или метод kill -9)

Надеюсь, это поможет. Ура!

20
kill -HUP может быть более надежным; это устаревший сигнал уничтожения, который сообщает демону о необходимости очистить кэш и перечитать файл конфигурации. Я вижу, что killall -HUP с указанием местоположения будет работать. Возможная причина, по которой другие убийства не сработали, может заключаться в том, что файлы кэша были оставлены для чтения вновь порожденным процессом. Nevin Williams 11 лет назад 0
Интересный факт: я не уверен, существовало ли это поведение до High Sierra, но, по крайней мере, в этом macOS, если вы снимите флажок с файла, которого больше нет на панели настроек, * обычно * приложение больше не будет отображать его в списке. Однако, используя этот метод, я обнаружил, что некоторые из этих якобы удаленных приложений на самом деле все еще находятся в списке и просто не отображаются. DonielF 6 лет назад 0
Я должен также отметить, основываясь на моем опыте с этим: я попытался использовать это, чтобы удалить мой Applescript из Системных настроек, по причинам, и он продолжал появляться, что он хотел мое местоположение в течение нескольких попыток, пока это наконец не закрылось. Я предполагаю, что это потому, что я продолжал пытаться запустить эту строку кода в Applescript, и bash продолжал работать в фоновом режиме, пока не был удален из моих Системных настроек ... и, таким образом, он перешел к следующей строке в bash. Поскольку у меня было несколько из них, работающих в фоновом режиме, по-видимому, мне пришлось отменить каждый по отдельности при этом. DonielF 6 лет назад 0

4 ответа на вопрос

5
Nevin Williams

Редактор списка свойств XCode также можно использовать для удаления записей старых приложений, но, поскольку к файлу трудно получить доступ, необходимо временно открыть разрешения:

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

поэтому каталог и файл могут быть прочитаны и записаны всеми пользователями. Тогда, для удобства, введите ваш логин:

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 Privacy должна подтвердить ваши изменения.

Стандартные заявления об отказе от ответственности, предостерегающие истории о горе, ругательствах, хлопотах и ​​"Действительно ли эта поездка необходима?" отражения особенно применимы.

3
Andreas

Использование tccutil (утилита командной строки OS X)

Я думаю, что самый быстрый и безопасный способ сделать это, с помощью утилиты командной строки OS X tccutil

  • Откройте новое окно терминала
  • Закройте все открытые окна «Безопасность и конфиденциальность»
  • Введите или вставьте из следующих выделенных команд

Сбросить службы определения местоположения

tccutil reset CoreLocationAgent 

Сбросить доступ к контактам / адресной книге:

tccutil reset AddressBook 

Сбросить доступ к напоминаниям

tccutil reset Reminders 

Сбросить доступ к календарям

tccutil reset Calendar 

И это все, что нужно сделать. Кстати, судо не нужно.

К сожалению, не работает для меня. Я получил сообщение об ошибке сброса базы данных. strangetimes 6 лет назад 0
@strangetimes: я полностью забыл об этом. Я не пробовал модифицированный tccutil, упомянутый в этой ссылке, но мне кажется, что стоит попробовать: https://github.com/jacobsalmela/tccutil Andreas 6 лет назад 0
@strangetimes: Я забыл упомянуть, что причина, по которой он не работает, связана с защитой целостности системы, согласно github.com/jacobsalmela/tccutil Andreas 6 лет назад 0
Команда `tccutil reset CoreLocationAgent`, похоже, больше не работает. См. [Эту проблему] (https://github.com/jacobsalmela/tccutil/issues/26). nix 6 лет назад 0
У меня получилось удалить календари, но не работает запросить новую авторизацию. Для этого мне пришлось удалить базу данных кеша user / library / calendar / calendar и перезагрузить компьютер Cristi Băluță 5 лет назад 0
0
T. Gil

В дополнение к предыдущим ответам эта проблема исчезла после исправления владения файлами:

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

Затем перезагрузите компьютер.

0
Michael Krelin - hacker

Это старое, и решение, которое я предлагаю, технически не отличается от решения, описанного в посте, и принятого, но оно намного меньше хлопот и гораздо проще автоматизировать (полезно для отладки). Просто делать

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

как корень.