สิทธิ์บน macOS (TCC)¶
- การอนุญาตสิทธิ์ของ macOS มีความเปราะบาง การให้สิทธิ์บน macOS มีความเปราะบาง TCC จะผูกการให้สิทธิ์กับลายเซ็นโค้ดของแอป bundle identifier และพาธบนดิสก์ หากอย่างใดอย่างหนึ่งเปลี่ยนไป macOS จะถือว่าแอปเป็นตัวใหม่ และอาจลบหรือซ่อนพรอมต์การขอสิทธิ์ 29. หากสิ่งใดสิ่งหนึ่งเปลี่ยนไป macOS จะมองว่าแอปเป็นแอปใหม่ และอาจยกเลิกหรือซ่อนพรอมต์
ข้อกำหนดเพื่อให้สิทธิ์มีความเสถียร¶
- พาธเดียวกัน: รันแอปจากตำแหน่งคงที่ (สำหรับ OpenClaw คือ
dist/OpenClaw.app). - bundle identifier เดิม: การเปลี่ยน bundle ID จะสร้างอัตลักษณ์สิทธิ์ใหม่
- แอปที่เซ็นลายเซ็น: บิลด์ที่ไม่เซ็นหรือเซ็นแบบ ad-hoc จะไม่คงสิทธิ์
- ลายเซ็นสม่ำเสมอ: ใช้ใบรับรอง Apple Development หรือ Developer ID จริง เพื่อให้ลายเซ็นคงที่ข้ามการรีบิลด์
- ลายเซ็นแบบ ad-hoc จะสร้างตัวตนใหม่ทุกครั้งที่บิลด์ ลายเซ็นแบบ ad-hoc จะสร้างอัตลักษณ์ใหม่ทุกครั้งที่บิลด์ macOS จะลืมสิทธิ์ที่ให้ไว้ก่อนหน้า และพรอมต์อาจหายไปทั้งหมดจนกว่าจะล้างรายการค้างเก่า
เช็กลิสต์การกู้คืนเมื่อพรอมต์หายไป¶
- ปิดแอป
- ลบรายการแอปใน System Settings -> Privacy & Security
- เปิดแอปอีกครั้งจากพาธเดิมและให้สิทธิ์ใหม่
- หากพรอมต์ยังไม่ขึ้น ให้รีเซ็ตรายการ TCC ด้วย
tccutilแล้วลองอีกครั้ง - บางสิทธิ์จะกลับมาเฉพาะหลังรีสตาร์ต macOS ทั้งระบบ
ตัวอย่างการรีเซ็ต (เปลี่ยน bundle ID ตามต้องการ):
sudo tccutil reset Accessibility bot.molt.mac
sudo tccutil reset ScreenCapture bot.molt.mac
sudo tccutil reset AppleEvents
สิทธิ์ไฟล์และโฟลเดอร์ (Desktop/Documents/Downloads)¶
- macOS อาจจำกัดการเข้าถึง Desktop, Documents และ Downloads สำหรับโปรเซสแบบเทอร์มินัล/เบื้องหลังด้วย macOS อาจควบคุมการเข้าถึง Desktop, Documents และ Downloads สำหรับโปรเซสแบบเทอร์มินัลหรือเบื้องหลังด้วย หากการอ่านไฟล์หรือการแสดงรายการไดเรกทอรีค้าง ให้ให้สิทธิ์กับบริบทโปรเซสเดียวกันที่ทำงานไฟล์ (เช่น Terminal/iTerm, แอปที่เปิดด้วย LaunchAgent หรือโปรเซส SSH)
ทางแก้ชั่วคราว: ย้ายไฟล์ไปยังเวิร์กสเปซของ OpenClaw (~/.openclaw/workspace) หากต้องการหลีกเลี่ยงการให้สิทธิ์รายโฟลเดอร์
หากคุณกำลังทดสอบสิทธิ์ ควรเซ็นด้วยใบรับรองจริงเสมอ บิลด์แบบ ad-hoc เหมาะเฉพาะการรันภายในเครื่องอย่างรวดเร็วที่สิทธิ์ไม่สำคัญ 32. บิลด์แบบ ad-hoc เหมาะสมเฉพาะสำหรับการรันภายในเครื่องแบบรวดเร็วที่ไม่สนใจเรื่องสิทธิ์