แม้ว่าคำถามจะเก่า แต่ก็ยังคงปรากฏอยู่ด้านบนของคำถามที่ยังไม่ได้ตอบ (แท็กของฉัน) ดังนั้นฉันคิดว่าฉันควรตอบคำถามนี้ :)
การสนับสนุนของ 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 เป็นอย่างมากไม่ใช่คุณสมบัติที่ใช้เพียงเล็กน้อย
ที่เกี่ยวข้อง: