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


20

Я хотел удалить приложения из служб определения местоположения в настройках безопасности и конфиденциальности на 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)

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


1
kill -HUP может быть более надежным; это устаревший сигнал kill, чтобы сказать демону очистить кэш и перечитать его конфигурационный файл. Я вижу, что killall -HUP с указанием местоположения будет работать. Возможная причина, по которой другие убийства не сработали, может заключаться в том, что файлы кэша были оставлены для чтения вновь порожденным процессом.
Невин Уильямс

Интересный факт: я не уверен, существовало ли это поведение до High Sierra, но, по крайней мере, в этом macOS, если вы снимите флажок с файла, которого больше нет на панели настроек, обычно приложение больше не будет отображать его в списке. Однако, используя этот метод, я обнаружил, что некоторые из этих якобы удаленных приложений на самом деле все еще находятся в списке и просто не отображаются.
DonielF

Я должен также отметить, основываясь на моем опыте с этим: я попытался использовать это, чтобы удалить мой Applescript из Системных настроек, по причинам, и он продолжал появляться, что он хотел мое местоположение в течение нескольких попыток, пока это наконец не закрылось. Я предполагаю, что это потому, что я продолжал пытаться запустить эту строку кода в Applescript, и bash продолжал работать в фоновом режиме, пока не был удален из моих Системных настроек ... и, таким образом, он перешел к следующей строке в bash. Поскольку у меня было несколько из них, работающих в фоновом режиме, по-видимому, мне пришлось отменить каждый по отдельности при этом.
DonielF

Ответы:


5

Редактор списка свойств 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

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

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

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

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

tccutil reset CoreLocationAgent

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

tccutil reset AddressBook

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

tccutil reset Reminders

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

tccutil reset Calendar

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


К сожалению, не работает для меня. Я получил сообщение об ошибке сброса базы данных.
странные времена

@strangetimes: я полностью забыл об этом. Я не пробовал модифицированный tccutil, упомянутый в этой ссылке, но мне кажется, что стоит попробовать: github.com/jacobsalmela/tccutil
Andreas

@strangetimes: Я забыл упомянуть, что причина, по которой он не работает, связана с защитой целостности системы, согласно github.com/jacobsalmela/tccutil
Андреас

Команда tccutil reset CoreLocationAgent, похоже, больше не работает. Смотрите эту проблему .
Ник

У меня получилось удалить календари, но не работает запросить новую авторизацию. Для этого мне пришлось удалить базу данных кеша пользователя / библиотеки / календаря / календаря, а затем перезагрузить компьютер
Cristi Băluță

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.