แม้ว่าคำถามจะเก่า แต่ก็ยังคงปรากฏอยู่ด้านบนของคำถามที่ยังไม่ได้ตอบ (แท็กของฉัน) ดังนั้นฉันคิดว่าฉันควรตอบคำถามนี้ :)
การสนับสนุนของ AOSP สำหรับความสามารถ:
คำถามเกี่ยวกับอุปกรณ์ Google โดยเฉพาะฉันไม่เคยใช้อุปกรณ์ Google อย่างไรก็ตามสิ่งที่ฉันสามารถพูดได้อย่างแน่นอนคือความสามารถของลินุกซ์ (กระบวนการ) ต้องเปิดใช้งานในอุปกรณ์ส่วนใหญ่ พบการอ้างอิงในinitและsystem_serverทั้งองค์ประกอบหลักของ AOSP ยกตัวอย่างเช่นใน Android 4.2 ซึ่งเป็นinstalldส่วนประกอบหลักอีกตัวหนึ่งถูกสร้างขึ้นมาเพื่อให้ทำงานได้ด้วยขีดความสามารถที่ลดลง
ความสามารถของระบบไฟล์เป็นหนึ่งในการปรับปรุงความปลอดภัยที่สำคัญใน Android 4.3ซึ่งลบset-uid/ ออกset-gidจากไบนารีเช่นrun-asการตั้งค่าความสามารถของไฟล์ในพวกเขา สิ่งนี้ทำให้เกิดการเปลี่ยนแปลงในการปฏิวัติการเดินทางของ Android
รองรับความสามารถรอบข้างใน Android 8 ซึ่งไม่สนับสนุนการใช้ความสามารถของไฟล์:
ในทางกลับกันความสามารถของไฟล์นำเสนอความเสี่ยงด้านความปลอดภัยเนื่องจากกระบวนการใด ๆ ที่ดำเนินการกับไฟล์ที่มีความสามารถของไฟล์จะสามารถรับความสามารถเหล่านั้นได้
initบริการหลายอย่างขึ้นอยู่กับพวกเขาเช่นstoragedรวมถึงของตัวเองsshdและdnscrypt-proxyบริการ
การสนับสนุนของ KERNEL สำหรับความสามารถ:
การมาถึงส่วนของเคอร์เนลการสร้างเคอร์เนลที่ไม่มีความสามารถไม่ใช่ทางเลือก:
จากเคอร์เนล 2.5.27 ถึงเคอร์เนล 2.6.26 ความสามารถเป็นองค์ประกอบเคอร์เนลเผื่อเลือกและสามารถเปิด / ปิดการใช้งานผ่านทางตัวเลือกการกำหนดค่าเคอร์เนลCONFIG_SECURITY_CAPABILITIES
และ:
ในเคอร์เนลก่อน Linux 2.6.33 ความสามารถของไฟล์เป็นคุณสมบัติเสริมที่สามารถกำหนดค่าได้ผ่านตัวเลือกCONFIG_SECURITY_FILE_CAPABILITIES ตั้งแต่ Linux 2.6.33 ตัวเลือกการกำหนดค่าจะถูกลบและความสามารถของไฟล์จะเป็นส่วนหนึ่งของเคอร์เนลเสมอ
เคอร์เนลรุ่นที่เก่าแก่ที่สุดบน Android ที่เก็บคือ 2.6.39 ซึ่งรวมถึงการรองรับความสามารถของไฟล์ด้วย
การสนับสนุนความสามารถของระบบไฟล์ในฝั่งเคอร์เนลจะต้องล่าช้าจาก OEM บางตัว แต่ต้องเปลี่ยนเพราะฟังก์ชั่นจะแตก ตัวอย่างเช่นsurfaceflinger( ผู้แต่งพื้นผิวของ Android ) จะไม่ทำงานหากไม่มีความสามารถของไฟล์ตั้งแต่ Android 7.1
เคอร์เนล Mainline Linux 4.3 ได้รับการติดตั้งในกันยายน 15 สำหรับความสามารถของ Ambient (โปรเซส), backportedเป็น Android kernel 3.18 และ 4.1 ในปี 2559 ดังนั้นจึงจำเป็นต้องเป็นส่วนหนึ่งของเคอร์เนล
สรุป:
บน Linux distros มีโปรแกรมเพียงไม่กี่โปรแกรมที่ใช้ประโยชน์จากความสามารถของ Linux แม้ว่าจะมีpam_capส่วนใหญ่ (หรือทั้งหมด?) distros ยังคงใช้set-uidในsu, sudo, ping, mount, passwdและอื่น ๆ แต่ความสามารถของ Android นั้นรวมอยู่ในกรอบและบริการหลักอย่างลึกซึ้ง การลบออกจะต้องแก้ไขหลายร้อยหรืออาจเป็นหลายพันบรรทัดใน AOSP และเคอร์เนลซอร์ส มันทำให้รู้สึกไม่ว่า OEM (โดยเฉพาะ Google ผู้พัฒนา AOSP และแก้ไขเคอร์เนลลินุกซ์สำหรับ Android) ไม่ได้ทำให้การใช้งานนี้ฟรีค่าใช้จ่ายคุณลักษณะด้านความปลอดภัยเมื่อพร้อมใช้งานใน Android เคอร์เนล มันเป็นคุณสมบัติที่เกี่ยวข้องกับระบบปฏิบัติการบริสุทธิ์ไม่ต้องการการสนับสนุนฮาร์ดแวร์เพิ่มเติมใด ๆ ดังนั้นโทรศัพท์จากผู้ผลิตใด ๆ จะต้องมีความสามารถรองรับ
คำถาม:
ฉันจะสามารถตั้งค่าความสามารถในการปฏิบัติการได้โดยไม่ต้องเปลี่ยนเคอร์เนลไบนารีเดิมหรือไม่
ใช่คุณต้องเป็น
สิ่งที่ต้องการเป็นเครื่องมือสำหรับการตั้งค่าตัวพิมพ์ใหญ่ ...
ฉันได้ใช้capsh, getcap, setcap, getpcapsจากlibcapและnetcap, pscapจากlibcap-ngไม่มีปัญหาใด ๆ แต่ฉันชอบความสามารถของ Ambient ซึ่งง่ายต่อการกำหนดค่าและไม่ขึ้นอยู่กับคุณสมบัติของระบบไฟล์ใด ๆ เช่นExtended Attributesเหมือนกับในกรณีของความสามารถของไฟล์ นอกจากนี้คุณยังสามารถใช้listxattr, getxattr, setxattrและremovexattrเครื่องมือที่ได้จากxattr_syscall_wrapperการจัดการsecurity.capabilityหรือ XATTR อื่น ๆ โดยตรง
จากความคิดเห็นของคุณ:
ฉันเพิ่งสังเกตเห็น/system/bin/pingคำสั่งไม่ได้setuidอยู่ในอุปกรณ์ Samsung ที่แท้จริงของฉันCAP_NET_RAW
ของ Android ปิงไม่ได้มีมิได้set-uid CAP_NET_RAWมันสร้างซ็อกเก็ตที่ไม่ใช่ RAWพิเศษIPPROTO_ICMPซึ่งแตกต่างจากIPPROTO_RAW- ไม่ต้องใช้สิทธิ์ใด ๆ
ข้อมูลอ้างอิงเพิ่มเติม:
นอกเหนือจากการอ้างอิงมากกว่า 10 รายการแล้วนี่คือส่วนอื่น ๆ ของรหัส AOSP ที่รองรับและใช้ประโยชน์จากความสามารถของ Linux:
- องค์ประกอบหลัก:ไบโอนิค
libc, init, trusty(OS)
- ส่วนประกอบภายนอก:
libcap ,libcap-ng
- ภูต / บริการ:
zygote (คดเคี้ยวและแอพพลิเคsystem_server) hostapd, wpa_supplicant, dnsmasq, logd, netd( NetLinkผู้จัดการ DNS เอกชน) debuggerd(ทดสอบ) sdcardภูต, performanced, incidentd, mtpd, traced_probes(Perfetto) racoon(IPSec) wificondจำนวนภูต HAL rildรวมทั้ง
- executables:
reboot (init) dumpstate, tcpdump, strace, iputils( ping, tracerouteฯลฯ )
- Minijail:เครื่องมือและห้องสมุด sandboxing เฉพาะซึ่งหมุนรอบความสามารถ
adbdใช้ประโยชน์จากห้องสมุดนี้เพื่อยกเลิกสิทธิ์
- SELinuxใช้
capabilityคลาสเพื่อให้ / ปฏิเสธความสามารถในโดเมน
สรุปได้ว่า Android ขึ้นอยู่กับความสามารถของ Linux เป็นอย่างมากไม่ใช่คุณสมบัติที่ใช้เพียงเล็กน้อย
ที่เกี่ยวข้อง: