ลบแอปพลิเคชันออกจากบริการตำแหน่งในความปลอดภัยและความเป็นส่วนตัวบน 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. เริ่มเทอร์มินัลจากนั้น 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. รีสตาร์ท locationd
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 ที่เก็บแคชและสร้าง clients.plist ใหม่ ฉันพูดแบบนี้เพราะรายการที่ถูกเพิ่มกลับไปยังไคลเอนต์กรุณาหลังจากรัน killall - และแม้ในการรีบูต ไม่ว่าจะเกิดจากสาเหตุใดการใช้ kill -9 แก้ปัญหาให้ฉัน

หากสิ่งต่าง ๆ ไม่ดีให้คัดลอกไฟล์ต้นฉบับและเริ่มตำแหน่งใหม่
cp -p clients.plist.save clients.plist
killall locationd(หรือวิธีฆ่า -9)

ฉันหวังว่านี่จะช่วยได้. ไชโย!


1
kill -HUP อาจเชื่อถือได้มากกว่า มันเป็นสัญญาณการทำลายมรดกที่บอก daemon ให้ล้างแคชและอ่านไฟล์ปรับแต่งอีกครั้ง ฉันเห็นว่า killall -HUP locationd จะทำงานได้ สาเหตุที่เป็นไปได้ที่การสังหารอื่นไม่ทำงานอาจเป็นเพราะไฟล์แคชถูกปล่อยให้อ่านโดยกระบวนการที่เพิ่งเกิดใหม่
Nevin Williams

สนุกจริง: ฉันไม่แน่ใจว่าพฤติกรรมนี้มีอยู่ก่อน High Sierra หรือไม่ แต่อย่างน้อยใน macOS นี้หากคุณยกเลิกการเลือกไฟล์ที่ไม่มีอยู่ในบานหน้าต่างการตั้งค่าอีกต่อไปโดยปกติแล้วแอปจะไม่แสดงในรายการอีกต่อไป อย่างไรก็ตามด้วยวิธีนี้ฉันค้นพบว่าแอพที่ถูกลบที่คาดคะเนเหล่านี้หลายอันที่จริงแล้วยังอยู่ในรายการ แต่ไม่ปรากฏขึ้น
DonielF

ฉันควรทราบด้วยจากประสบการณ์ของฉัน: ฉันลองใช้สิ่งนี้เพื่อลบ Applescript ของฉันออกจาก System Preferences ด้วยเหตุผลและมันก็โผล่ขึ้นมาเรื่อย ๆ จนมันต้องการตำแหน่งของฉันมาหลายครั้งจนกระทั่งในที่สุดมันก็ปิด ฉันถือว่านี่เป็นเพราะฉันพยายามเรียกใช้บรรทัดของรหัสนั้นใน Applescript และ bash นั้นยังคงทำงานในพื้นหลังจนกว่าจะถูกลบออกจากการตั้งค่าระบบของฉัน ... และดังนั้นจึงไปที่บรรทัดถัดไปใน bash เนื่องจากฉันมีการทำงานเหล่านี้หลายครั้งในเบื้องหลังจึงต้องยกเลิกแต่ละรายการในขณะที่ทำสิ่งนี้
DonielF

คำตอบ:


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 และคุณคุ้นเคยกับตัวแก้ไขรายการอสังหาริมทรัพย์ ภายใต้คุณสมบัติรูทมีรายการพจนานุกรมเริ่มต้น 3 รายการ:

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

สิ่งเหล่านั้นไม่ควรถูกลบออก สำหรับรายการที่เป็นของแอพที่มีมานานคุณสามารถเลื่อนไปทางซ้ายของคอลัมน์พจนานุกรมของแถวของแอพที่เกี่ยวข้องโดยที่สีเทาผกผัน '-' จะปรากฏขึ้น การคลิกที่รายการนั้นจะเป็นการลบรายการและรายการย่อยทั้งหมด หากคุณต้องการตรวจสอบรายการก่อนให้คลิกที่สามเหลี่ยมสีเทา (ผู้ใช้ที่คุ้นเคยกับ Finder list-view) ทางด้านซ้ายของสตริงคีย์จะขยายพจนานุกรมและแสดงองค์ประกอบ

เมื่อคุณลบหรือปิดใช้งานคีย์เพื่อความพึงพอใจของคุณให้บันทึกไฟล์และออกจาก Xcode จากนั้นย้อนกลับไปที่ Terminal ให้ทำ:

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 the location daemon:

 mini-nevie:~ root# killall -HUP locationd

ตรวจสอบอย่างรวดเร็วของแท็บ Security.PrefPane ควรยืนยันการเปลี่ยนแปลงของคุณ

ข้อจำกัดความรับผิดชอบมาตรฐานเรื่องเตือนของความฉิบหายการดุด่าและ "การเดินทางครั้งนี้จำเป็นจริงๆหรือ?" การสะท้อนมีผลบังคับใช้โดยเฉพาะอย่างยิ่ง


3

การใช้ tccutil (ยูทิลิตี้ OS X Command Line)

ฉันคิดว่าวิธีที่เร็วและปลอดภัยที่สุดคือการใช้ยูทิลิตี้บรรทัดคำสั่ง OS X tccutil

  • เปิดหน้าต่างเทอร์มินัลใหม่
  • ปิดหน้าต่าง prefpane "ความปลอดภัยและความเป็นส่วนตัว" ที่เปิดอยู่
  • พิมพ์หรือวางจากคำสั่งที่ไฮไลต์ต่อไปนี้

รีเซ็ตบริการตำแหน่ง

tccutil reset CoreLocationAgent

รีเซ็ตการเข้าถึงสมุดติดต่อ / สมุดที่อยู่:

tccutil reset AddressBook

รีเซ็ตการเข้าถึงการเตือนความจำ

tccutil reset Reminders

รีเซ็ตการเข้าถึงปฏิทิน

tccutil reset Calendar

และนั่นคือทั้งหมดที่มีให้ ไม่จำเป็นต้องใช้ Sudo


ไม่ได้ผลสำหรับฉันอย่างน่าเสียดาย ฉันได้รับข้อความล้มเหลวในการรีเซ็ตฐานข้อมูล
strangetimes

@strangetimes: ฉันลืมเรื่องนี้ไปหมดแล้ว ฉันยังไม่ได้ลอง tccutil ที่กล่าวถึงในลิงค์นี้ แต่ฉันคิดว่ามันคุ้มค่ากับการยิง: github.com/jacobsalmela/tccutil
Andreas

@ strangetimes: ฉันลืมที่จะพูดถึงว่าเหตุผลที่มันไม่ทำงานเป็นเพราะการป้องกันความสมบูรณ์ของระบบตาม github.com/jacobsalmela/tccutil
Andreas

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

จากนั้นรีสตาร์ทคอมพิวเตอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.