ตรวจสอบนโยบาย selinux ของ android (v30)


12

ฉันกำลังพยายามค้นหานโยบายที่บังคับใช้กับโทรศัพท์ของฉันโดยใช้ selinux คุณคิดว่ามันจะง่าย ท้ายที่สุดเพื่อความปลอดภัยคุณควรตรวจสอบว่านโยบายของคุณตรงกับความคาดหวังหรือไม่ น่าเสียดายที่ฉันพบว่ามันยากที่จะทำอย่างน่าตกใจเพราะ A) android ดูเหมือนว่าจะใช้นโยบายรุ่นที่แยกกัน 30 และ B) นโยบาย toolchain ดูเหมือนจะมีกระบวนการสร้างที่มีคุณภาพต่ำมาก (เส้นทางที่มีรหัสยาก ฯลฯ ) .)

นี่คือสองสิ่งที่ฉันได้ลองซึ่งยังไม่ได้ผล หากฉันพยายามใช้เครื่องมือ setools แบบ off-the-shelf (เช่นมาเป็นชุดสำหรับ fedora หรือสามารถติดตั้งจาก AUR ด้วย arch linux) ได้ฉันจะได้สิ่งต่อไปนี้ (หลังจากดึง/sepolicyจากรูทไดเร็กทอรีหรืออิมเมจจากโรงงาน):

$ sedispol sepolicy 
Reading policy...
libsepol.policydb_read: policydb version 30 does not match my version range 15-29
sedispol:  error(s) encountered while parsing configuration
$ sesearch --all sepolicy 
ERROR: policydb version 30 does not match my version range 15-29
ERROR: Unable to open policy sepolicy.
ERROR: Success
$

โอเคดังนั้นสิ่งที่แนะนำคือฉันต้องสร้างไลบรารี่ selinux เวอร์ชัน Android แผนผังต้นกำเนิด AOSP มาพร้อมกับเครื่องมือบางรุ่นที่คอมไพล์แล้ว แต่ขึ้นอยู่กับไลบรารีเก่าที่ฉันไม่มี (เช่น libpcre3) อย่างไรก็ตามมันค่อนข้างน่าตกตะลึงหากวิธีเดียวที่จะตรวจสอบนโยบายความปลอดภัยของคุณคือการไว้วางใจไลบรารีที่แชร์แบบไบนารีบางส่วนที่คุณได้รับสุทธิ

ดังนั้นนี่คือสิ่งที่ฉันทำเพื่อสร้างห้องสมุด Android selinux ใน arch ฉันต้องติดตั้งustr-selinuxจาก AUR เพราะ ustr ใช้inlineซึ่งจำเป็นต้องใช้ในstatic inlineขณะนี้ โอเคดีมาก น่าเสียดายที่กระบวนการสร้างนั้นค่อนข้างแย่มาก แต่ฉันก็สามารถรวบรวมและติดตั้งได้มากพอดังต่อไปนี้:

git clone https://android.googlesource.com/platform/external/selinux \
    android/external/selinux
export ANDROID_BUILD_TOP=$PWD/android
DESTDIR=$HOME/android_selinux
export LD_LIBRARY_PATH="$DESTDIR/lib:$DESTDIR/usr/lib"
cd android/external/selinux
sed -ie '/^LDLIBS.*(LIBDIR)/s/$/ ..\/lex.yy.o/' checkpolicy/test/Makefile
make install DESTDIR="$DESTDIR" \
     PREFIX='$(DESTDIR)/usr' \
     CFLAGS='-I$(PREFIX)/include' \
     -j20 -k
cp checkpolicy/test/dispol "$DESTDIR/usr/sbin/sedispol"
cp checkpolicy/test/dismod "$DESTDIR/usr/sbin/sedismod"

ณ จุดนี้sedispolทำงานนโยบาย SElinux ปกติ (เช่นรุ่น 29 policy.29จาก fedora) แต่ก็ยังไม่แสดงให้ฉันเห็นว่าเกิดอะไรขึ้นกับ Android:

$ ~/android_selinux/usr/sbin/sedispol sepolicy 
Reading policy...
libsepol.avtab_read_item: more than one specifier
libsepol.avtab_read: failed on entry 457 of 5582
/home/user/android_selinux/usr/sbin/dispol:  error(s) encountered while parsing configuration
$ 

ฉันยังพยายามรวบรวมsetools3เครื่องมือวานิลลากับห้องสมุด Android อีกครั้งไม่ใช่เรื่องง่าย แต่ฉันได้มันไปทำงานกับ:

DESTDIR=$HOME/android_selinux
export LD_LIBRARY_PATH="$DESTDIR/lib:$DESTDIR/usr/lib"
git clone https://github.com/TresysTechnology/setools3.git
cd setools3
./configure --prefix=$DESTDIR/usr --with-sepol-devel=$DESTDIR/usr CPPFLAGS="-I$DESTDIR/usr/include -L$DESTDIR/usr/lib"
make -k -j20

สิ่งนี้ไม่ได้สร้างอย่างเต็มที่ แต่สร้างจากต้นไม้ต้นกำเนิดที่ฉันสามารถใช้งานsecmds/sesearchได้ เรียงลำดับของงานนี้ในpolicy.29ไฟล์วานิลลา(ฉันสามารถค้นหา-Aและ-Tแต่--allให้ฉันoperation not supported) อย่างไรก็ตามมันล้มเหลวโดยสิ้นเชิงกับข้อผิดพลาดที่คล้ายกันเมื่อพยายามตรวจสอบไฟล์ android เวอร์ชัน 30:

$ ./secmds/sesearch -A sepolicy 
ERROR: more than one specifier
ERROR: failed on entry 457 of 5582
ERROR: Unable to open policy sepolicy.
ERROR: Success
$ 

ณ จุดนี้ความคิดของฉันเป็นสิ่งที่เชื่อได้ว่าการใช้เครื่องมือบางอย่างมีความสำคัญอย่างยิ่งเนื่องจากนโยบายความปลอดภัยของระบบเป็นสิ่งที่สร้างขึ้นได้ยาก แน่นอนฉันต้องทำอะไรผิด มีใครจัดการเพื่อตรวจสอบนโยบายความปลอดภัย android โดยไม่ต้องพึ่งพาห้องสมุดสาธารณะที่ใช้ร่วมกันไบนารีภายนอกกระจาย?

ฉันควรเพิ่มว่าฉันได้ลองใช้เทคนิคที่แนะนำสำหรับการสร้างเครื่องมือที่สร้างไว้ล่วงหน้าทั้งหมด ( ndk/build/tools/download-toolchain-sources.shและndk/build/tools/rebuild-all-prebuilt.sh) อีกครั้ง อย่างไรก็ตามdownload-toolchain-sources.shสคริปต์จะใช้งานไม่ได้ในขณะนี้ มันพยายามที่จะตรวจสอบไดเรกทอรีรุ่นเก่าที่ไม่ได้อยู่ในที่เก็บอีกต่อไปและมันก็ไม่ปรากฏว่าจะดาวน์โหลดเครื่องมือที่เกี่ยวข้องกับ selinux แม้ว่าที่จริงแล้วนั้นจะprebuilts/pythonมีรหัสที่เกี่ยวข้องกับ selinux อีกครั้งที่ฉันตกใจที่ความโหดร้ายเหล่านี้สร้างระบบและคิดว่าจะต้องมีวิธีที่ง่ายขึ้น คำถามที่ฉันจะได้รับเครื่องมือที่ช่วยให้ฉันตรวจสอบนโยบาย Android selinux ของฉันได้อย่างไร

คำตอบ:


8

ครั้งแรกของทั้งหมดผมต้องยอมรับว่าผมอย่างเห็นด้วยกับคุณ"ฉันพบนี้น่างงงวยยากที่จะทำ"คำสั่ง Google ได้ออกแบบ Android เป็นหลักจากมุมมองของผู้บริโภคไม่ใช่สำหรับผู้ใช้ระดับสูง ผลก็คือทันทีที่คุณต้องการทำอะไรบางอย่างนอกเหนือจากการใช้แอพ Facebook ล่าสุดหรือเล่นกับ Candy Crush คุณจะพบว่าตัวเองกลับมาอย่างรวดเร็วในช่วงต้นปี 2000 Linux เมื่อจำเป็นต้องเปลี่ยนความรู้เหมือนนักพัฒนา สิ่งที่ควรมีการตั้งค่าที่เรียบง่าย ฉันเชื่อว่าสถานการณ์จะพัฒนาอย่างรวดเร็วเมื่อระบบ Android โตขึ้น แต่ตอนนี้เราต้องทำในสิ่งที่เรามี ...

ดังที่คุณกล่าวมีสองเหตุผลว่าทำไมจึงจำเป็นต้องรวบรวมชุดเครื่องมือ SELinux ของคุณ:

  • ชุดเครื่องมือที่ระบบจัดเตรียมมักเป็นรุ่นที่อยู่ด้านหลัง แม้ว่า SELinux ของ Android จะใช้นโยบาย DB เวอร์ชัน 30 แต่กล่อง Linux ปัจจุบันมักจะรองรับเฉพาะเวอร์ชั่นสูงสุด 29 เท่านั้น
  • แม้ว่ามันจะไม่นานมานี้มันก็ไม่ได้ช่วยในความเป็นจริงการสร้าง SELinux จากรหัสต้นน้ำ (ซึ่งทำได้ง่าย ๆ อย่างน้อยบนเครื่อง Fedora ตามคำแนะนำต้นน้ำ) ช่วยให้ระบบจัดการนโยบาย DB เวอร์ชัน 30 ได้อย่างมีประสิทธิภาพอย่างไรก็ตาม SELinux ของ Android แก้ไขอย่างหนัก ( เอกสารของ Googleเน้นการแก้ไขเล็กน้อย) ดังนั้นการพยายามจัดการ SELinux ของ Android จึงล้มเหลวเนื่องจากข้อผิดพลาดทางไวยากรณ์และการแยกวิเคราะห์

ดังนั้นเพื่อที่จะคงไว้ซึ่งภารกิจการวิเคราะห์ SELinux ของ Android เราจะต้องจัดการกับสิ่งสกปรก ... ด้วยวิธีที่สะอาดที่สุดเท่าที่จะเป็นไปได้:

  • ก่อนอื่นเราจะตั้งค่าสภาพแวดล้อมที่มีสติ
  • เมื่อเสร็จแล้วเราจะรวบรวมไลบรารี SELinux และเครื่องมือแรกของ Android
  • ด้านบนของพวกเราจะสร้างเครื่องมือของ SELinux
  • เราจะดำเนินการให้เสร็จสิ้นโดยการเพิ่มยูทิลิตี้เสริมบางอย่าง

ตั้งค่าสภาพแวดล้อมที่เหมาะสม

คุณสมบัติด้านสิ่งแวดล้อม

คำแนะนำที่สะอาดที่สุดวิธีการที่ใช้งานได้น่าเชื่อถือเพียงอย่างเดียวคือการอุทิศสภาพแวดล้อมในการทำงาน Android ของคุณ:

  • เครื่องเสมือนนั้นใช้ได้อย่างสมบูรณ์แบบ (หากไม่ใช่ตัวเลือกที่ดีที่สุด) ต้องการใช้ VMware เนื่องจากคุณจะต้องเชื่อมต่อโทรศัพท์ของคุณผ่าน USB เข้ากับระบบของแขก Qemu ทางเลือกฟรีดูเหมือนจะไม่สามารถจัดการกับงานดังกล่าวได้เป็นอย่างดี ฉันไม่ได้ลองกับซอฟต์แวร์การทำให้เป็นแบบอื่น

  • จะต้องเป็นระบบ 64 บิตมิฉะนั้นรหัสจะไม่รวบรวมเนื่องจากจำนวนเต็มเป็นขนาดที่ไม่ถูกต้อง

  • มันเป็นอย่างยิ่งที่แนะนำอาจจะบังคับใช้ระบบอูบุนตู รู้สึกฟรีที่จะใช้ Xubuntu แทนถ้าคุณชอบสภาพแวดล้อมเดสก์ทอปที่เบากว่าของ XFCE นี่จะไม่เปลี่ยนแกนหลักของระบบและแพ็คเกจที่มีอยู่และจะไม่มีผลกระทบต่องานที่เกี่ยวข้องกับ Android ของคุณ (สิ่งที่ฉันพูดเกี่ยวกับ Ubuntu ในขั้นตอนนี้จะใช้กับ Xubuntu) คุณอาจพบไฟล์ต้นไม้ ReadMe บางไฟล์ของ ReadMe ที่แนะนำให้ใช้ Fedora แทนต้นไม้เหล่านี้ SELinux ใน Android ไฟล์เหล่านี้สืบทอดมาจากโครงการ SELinux ต้นน้ำของ NSA และเนื้อหาของไฟล์นั้นไม่ตรงกับ Android ของ Google

  • เวอร์ชันที่แน่นอนของ Unbuntu ที่จะใช้ขึ้นอยู่กับรุ่นของ Android ที่คุณต้องการสร้าง สำหรับ Android 6.0 แนะนำให้ใช้ Ubuntu 14.04 (Trusty) ตรวจสอบหน้าข้อกำหนดของ Googleสำหรับข้อมูลเพิ่มเติม

  • คุณจะต้องใช้พื้นที่ดิสก์มากมาย (อย่างน้อย 50GB หากคุณวางแผนเฉพาะการตรวจสอบที่เกี่ยวข้องกับ SELinux อย่างน้อย 100GB หากคุณวางแผนสำหรับการสร้าง Android ที่สมบูรณ์) CPU และหน่วยความจำมีความเกี่ยวข้องน้อยกว่าพวกเขาเพียงส่งผลกระทบต่อเวลาสำหรับการสร้างเต็มรูปแบบและจะไม่มีผลกระทบที่แท้จริงสำหรับงานที่เกี่ยวข้องกับ SELinux

การใช้ Ubuntu มีข้อดีสองประการ:

  • โดยการใช้ระบบที่แนะนำคุณกำลังทำงานในสภาพแวดล้อมที่รู้จักกันดีและผ่านการทดสอบอย่างดี: ไลบรารีระบบเครื่องมือและแพ็คเกจต่าง ๆ อยู่ในเวอร์ชันและตำแหน่งที่โครงการคาดหวัง

  • และโดยเฉพาะอย่างยิ่งในกรณีปัจจุบันของเรา: Ubuntu เองอาศัย AppArmor ซึ่งเป็นทางเลือกของ SELinux ไม่ได้ใช้ SELinux ข่าวดีก็คือคุณจะสามารถติดตั้งเครื่องมือ SELinux และระบบไบนารีของ Android ได้โดยไม่ต้องเสี่ยงที่จะเปลี่ยนความน่าเชื่อถือของระบบ

ขั้นตอนการติดตั้งสภาพแวดล้อม

คุณสามารถติดตั้ง Ubuntu แบบดั้งเดิมโดยเริ่มจาก live-DVD แบบเต็มเปี่ยม แต่ทางเลือกที่เร็วกว่าคือการใช้การติดตั้ง netboot (ติดตั้งโหมดข้อความ) และเลือกสภาพแวดล้อมเดสก์ท็อปที่คุณต้องการในตอนท้าย การทำเช่นนั้นจะช่วยให้คุณประหยัดเวลาในการอัพเดทครั้งแรกโดยการติดตั้งเวอร์ชั่นแพคเกจที่เป็นปัจจุบันแทนการติดตั้งโปรแกรมล้าสมัยครั้งแรก

มาตรฐาน ISO สำหรับอูบุนตู / Xubuntu 14.04 (ISO เดียวกัน) ติดตั้ง netboot เป็นอยู่ที่นี่

หากต้องการข้ามของ VMware ลำบาก "ง่ายติดตั้งคุณลักษณะ" มันเป็นนิสัยที่ดีในการเริ่มต้นด้วยการเลือก"ฉันจะติดตั้งระบบปฏิบัติการภายหลัง"ตัวเลือก

อย่าลืมเลือกLinuxจากนั้นUbuntu 64 บิตเป็น guest OS

VM จะต้องการ ressources ต่อไปนี้:

  • จำเป็น: พื้นที่ดิสก์ต้องมีอย่างน้อย 40GB (ค่าเริ่มต้น 20 GB จะไม่เพียงพอรหัสแหล่งเดียวจะใช้พื้นที่มากกว่านั้น) ขอแนะนำให้สูงกว่า บิลด์เต็มต้องใช้ดิสก์อย่างน้อย 100 GB นี่เป็นค่าที่ฉันมักจะใช้ อย่าลืมว่าการตั้งค่านี้เป็นเพียงขีด จำกัด สูงสุด: ขนาดที่แท้จริงของ VM จะเพิ่มขึ้นตามการร้องขอของแขก
  • Facultative: เพิ่ม RAM จาก 1024 เป็นอย่างน้อย 2048 หรือสูงกว่า (ขึ้นอยู่กับความจุโฮสต์ของคุณฉันใช้ 4096)
  • Facultative: เพิ่มจำนวนแกนประมวลผลจาก 1 เป็น 2 หรือสูงกว่า (ขึ้นอยู่กับความจุโฮสต์ของคุณฉันใช้ 3)
  • CD-Rom จะต้องชี้ไปที่ไฟล์ ISO การติดตั้ง
  • คุณอาจต้องการเปลี่ยน USB จากค่าเริ่มต้น 1.1 เป็น 2.0 เหมือนเดิมอาจให้คำเตือนเมื่อคุณเชื่อมต่ออุปกรณ์ของคุณ ทั้งนี้ขึ้นอยู่กับการใช้งานของคุณคุณยังสามารถยกเลิกได้อย่างปลอดภัย"เชื่อมต่อโดยอัตโนมัติอุปกรณ์ USB ใหม่"และ"อุปกรณ์บลูทู ธ แบ่งปันกับเครื่องเสมือน"
  • คุณอาจต้องปรับการตั้งค่าการแสดงผล (ปิดการใช้งาน 3 มิติบังคับใช้ขนาดหน้าจอ) ทั้งนี้ขึ้นอยู่กับสภาพแวดล้อมของคุณ

เรียน

  • หากคุณเลือกที่จะติดตั้ง netboot อย่าลืมเลือกสภาพแวดล้อมเดสก์ท็อปของคุณ ( เดสก์ท็อป UbuntuหรือXubuntu เดสก์ท็อป ) เมื่อมาถึงหน้าจอการเลือกซอฟต์แวร์หรือคุณจะจบลงด้วยสภาพแวดล้อมแบบข้อความอย่างเดียว!
  • เมื่อบู๊ตครั้งแรกปฏิเสธที่จะอัพเกรดเป็นรีลีสล่าสุด: จุดทั้งหมดที่นี่อยู่ที่ 14.04!

เมื่อทำการบูทครั้งแรกสิ่งแรกที่คุณอาจต้องทำคือติดตั้ง Linux guest tools:

sudo apt-get install open-vm-tools

แพ็คเก็ตนี้ใช้ทริกเกอร์เวลาบูตดังนั้นการติดตั้งจะเสร็จสมบูรณ์หลังจากแขกรีสตาร์ท

ดึงรหัสต้นฉบับของ Android

ในขณะที่คล้ายกันรายละเอียดของกระบวนการขึ้นอยู่กับ ROM ที่เลือก:

  • สำหรับ CyanogenMod ให้ค้นหาอุปกรณ์ของคุณ (เลือกผู้ขายก่อน) จากนั้นคลิกที่ลิงก์"วิธีสร้าง CyanogenMod"เพื่อรับคำแนะนำที่ถูกดัดแปลงสำหรับอุปกรณ์ของคุณ
  • สำหรับ AOSP ปฏิบัติตามขั้นตอนที่เริ่มต้นที่นี่

เป็นเรื่องที่น่าสังเกตว่า CyanogeMod รวมอยู่ในแผนผังต้นไม้เป็นเครื่องมือที่ช่วยให้คุณสามารถคลายboot.imgไฟล์ได้ หากต้องการบอกว่าแตกต่าง CyanogenMod มีเครื่องมือที่จะช่วยให้คุณเข้าถึงsepolicyไฟล์ที่เก็บไว้ในอุปกรณ์และที่เก็บ ROM AOSP ของ Google ไม่ได้จัดเตรียมเครื่องมือดังกล่าวดังนั้นหากคุณไม่มีความจำเป็นอื่น ๆ ด้วยการใช้ซอร์สต้นไม้ของ CyanogenMod อาจเป็นทางเลือกที่สะดวกที่สุดมิฉะนั้นคุณจะต้องติดตั้ง appart (ซึ่งรวดเร็วและง่ายต่อการทำ

นี่ฉันกำลังทำตามขั้นตอน CyanogenMod 13.0 (Android 6.0) คำอธิบายเกี่ยวกับคำสั่งที่ใช้มีอยู่ในหน้าต่างๆที่ลิงก์ด้านบน โปรดอ่านพวกเขา typescript ด้านล่างจะได้รับเพียงเพื่อวัตถุประสงค์ในการอ้างอิง

เคล็ดลับ:ในขณะที่ฉันใช้apt-getในโพสต์นี้ติดกับตัวส่วนร่วมที่ต่ำที่สุดและทำให้ทุกคนมีความสุขคุณอาจต้องการใช้aptitudeแทนเนื่องจากจะดูแลการอ้างอิงในวิธีที่ดีกว่า (เมื่อเอาแพคเกจที่ต้องการติดตั้งการอ้างอิงบางอย่าง การพึ่งพาเหล่านี้จะถูกลบออกเช่นกันทำให้ระบบของคุณสะอาดขึ้น) AFAIKaptitudeคำสั่งจะต้องติดตั้งใน Ubuntu แต่จะมีให้ใช้งานตามค่าเริ่มต้นบน Xubuntu

sudo apt-get install bison build-essential curl flex git gnupg gperf \
libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 \
libxml2-utils lzop maven openjdk-7-jdk pngcrush schedtool squashfs-tools \
xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev \
lib32readline-gplv2-dev lib32z1-dev
mkdir -p ~/bin
mkdir -p ~/android/system
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod u+x ~/bin/repo
cd ~/android/system/
git config --global user.name "Your Name"
git config --global user.email "you@example.com
repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0
repo sync
# Coffee time: around 20GB are being downloaded, this may take several hours.
source ./build/envsetup.sh
breakfast

ตอนนี้คุณมีต้นไม้ต้นกำเนิดที่สะอาดและเกือบจะสมบูรณ์ Blob ที่เป็นกรรมสิทธิ์ขาดหายไป แต่คุณไม่ต้องการใช้งานที่เกี่ยวข้องกับ SELinux

คำแนะนำ: การดึงข้อมูลแหล่งที่มานั้นเป็นกระบวนการที่น่าเบื่ออาจเป็นไปได้ที่จะทำสแน็ปช็อตหรือสำรองข้อมูล VM ของคุณในตอนนี้

รวบรวมและติดตั้งชุดเครื่องมือและไลบรารี SELinux ของ Android

ตอนนี้ส่วนที่ตลกของการเดินทางจะเริ่มขึ้น;)!

จนถึงตอนนี้ขั้นตอนควรจะตรงไปตรงมาสวย เป้าหมายส่วนใหญ่คือเพื่อให้แน่ใจว่าคุณมีสภาพแวดล้อมเดียวกันกับฉัน ถ้าคุณทำภาคต่อควรตรงไปตรงมาเช่นกัน

ภายใต้ประทุนของ Google อย่าลังเลที่จะใช้การเปลี่ยนแปลงที่ลึกกับซอร์สโค้ดของ Android ระหว่างรุ่นดังนั้นขั้นตอนการรวบรวมที่แน่นอนจะขึ้นอยู่กับรุ่นแน่นอน (เช่น AOSP ต้นแบบแสดงให้เห็นว่าsepolicy/ไดเรกทอรีจะถูกย้าย )

ฉันจะแชร์ขั้นตอนที่แน่นอนของฉันในการรวบรวมและติดตั้งไลบรารีและชุดเครื่องมือ SElinux ของ Android แต่เพื่อให้ความเกี่ยวข้องของโพสต์นี้เมื่อเวลาผ่านไปฉันจะเพิ่มบันทึกเกี่ยวกับวิธีทั่วไปในการติดตามเพื่อแก้ไขปัญหาการรวบรวมส่วนใหญ่

ขั้นตอนทีละขั้นตอน

ไลบรารี SELinux ของ Android จัดเตรียมเลเยอร์ abstraction ซึ่งจะอนุญาตให้ซอฟต์แวร์เลเยอร์ชั้นบนจัดการกับไฟล์นโยบาย SELinux เฉพาะสำหรับ Android ดังนั้นเราจะต้องรวบรวมและติดตั้งมันก่อน (ซึ่งจริงๆแล้วมันหมายถึงแกนกลางหากเกิดความยากลำบากที่นี่จนกว่าคุณจะพบทางของคุณ)

จากนั้นเราจะสามารถสร้างและติดตั้งเครื่องมือ SELinux ได้ อย่างที่เราจะเห็นว่าโชคดีที่สิ่งเหล่านี้ไม่จำเป็นต้องเป็น Android โดยเฉพาะพวกเขาจำเป็นต้องจับคู่กับเวอร์ชันไลบรารี SELinux เท่านั้น

ขั้นตอนนี้ได้รับการทดสอบทั้งการใช้ต้นไม้รหัส CyanogenMod และ AOSP

รวบรวมและติดตั้งไลบรารี Android SELinux และเครื่องมือแรก

การติดตั้งครั้งแรก:

sudo apt-get install libapol-dev libaudit-dev libdbus-glib-1-dev libgtk2.0-dev \
libustr-dev python-dev python-networkx swig xmlto

ในโพสต์นี้ตัวแปร$ANDROID_BUILD_TOPเก็บตำแหน่งที่มาของคุณ (ไดเรกทอรีที่คุณออกrepo syncคำสั่ง) เปลี่ยนชื่อตามใจชอบ

ANDROID_BUILD_TOP=~/android/system
cd $ANDROID_BUILD_TOP
source ./build/envsetup.sh

โดยค่าเริ่มต้นการรวบรวมใช้นโยบายหลักล้มเหลวเนื่องจากrestorecondMakefile ไม่สามารถค้นหาบางไลบรารีได้ คุณต้องแก้ไข Makefile นี้เพื่อใช้เส้นทางที่สร้างขึ้นแบบไดนามิกโดยpkg-configแทนที่ฮาร์ดโค้ด (อย่าสับสน backticks ด้วยเครื่องหมายคำพูดเดียว!):

sed -i 's/^CFLAGS ?= -g -Werror -Wall -W$/& `pkg-config --cflags --libs dbus-1 gtk+-2.0`/' \
$ANDROID_BUILD_TOP/external/selinux/policycoreutils/restorecond/Makefile

อย่าลังเลที่จะเปิด Makefile ด้วยโปรแกรมแก้ไขข้อความเพื่อให้แน่ใจว่าการดัดแปลงนั้นได้รับการพิจารณาอย่างถูกต้องแล้ว

ตอนนี้รวบรวมและติดตั้ง:

cd $ANDROID_BUILD_TOP/external/bzip2/
make -f Makefile-libbz2_so
sudo make install
cd $ANDROID_BUILD_TOP/external/libcap-ng/libcap-ng-0.7/
./configure
make
sudo make install
cd $ANDROID_BUILD_TOP/external/selinux/
make -C ./libsepol/
sudo make -C /libsepol/ install
EMFLAGS=-fPIC make -C ./libselinux/
sudo make -C ./libselinux/ install
make -C ./libsemanage/
sudo make -C ./libsemanage/ install
make
sudo make install
make swigify
sudo make install-pywrap
sudo cp ./checkpolicy/test/{dispol,dismod} /usr/bin/

เรียนพลาดไม่ได้กับการตั้งค่าตัวแปรสภาพแวดล้อมเมื่ออาคารEMFLAGS=-fPIC libselinuxมันจะไม่สร้างข้อผิดพลาดใด ๆ แต่ในขั้นตอนถัดไปคุณจะไม่สามารถสร้าง SETools ได้ ในกรณีที่คุณพลาดหรือทำสิ่งใดผิดพลาดเพียงแค่ออกmake cleanและเริ่มต้นการคอมไพล์ใหม่ของคุณ

รวบรวมและติดตั้งเครื่องมือของ SELinux

เครื่องมือของ SELinux มีให้ในรูปแบบที่สร้างไว้ล่วงหน้าซึ่งประกอบด้วย:

  • สคริปต์ Python (และตัวห่อสคริปต์เชลล์) ภายใน$ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/ไดเรกทอรี
  • แพคเกจหลาม (รวมถึง*.oไฟล์ที่รวบรวม) $ANDROID_BUILD_TOP/prebuilts/python/linux-x86/2.7.5/lib/python2.7/site-packages/ด้านล่าง

ฉันคาดว่าจะมีซอร์สโค้ดของเครื่องมือเหล่านี้ให้ใช้งานได้ด้านล่าง$ANDROID_BUILD_TOP/externalแต่ไม่ใช่ ที่จริงแล้วฉันไม่พบสถานที่ใด ๆ ที่ Google แบ่งปันรุ่นที่แน่นอนของ SETools ที่พวกเขาใช้ (FYI GPL สั่งเท่านั้นที่จะแชร์รหัสหากมีการแก้ไข) ดังนั้นเราจะต้องเดาและพยายามทำอย่างดีที่สุดเท่าที่จะทำได้ .

เครื่องมือเหล่านี้คือสคริปต์ Python นี่เป็นวิวัฒนาการใหม่จาก SETools 4 (ใน SETools 3 คำสั่งเช่นsesearchนั้นเป็นรหัสปฏิบัติการไบนารีใน C) อย่างไรก็ตามเครื่องมือเองยังคงแสดงรุ่น 3.3.8:

$ $ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/sesearch --version
3.3.8

ดังนั้นฉันเดาว่า Google เอาภาพรวมการพัฒนาจาก SETools 4 ไปก่อนจนถึง 4.0.0 beta SETools อาศัยlibsepolเวอร์ชัน 2.4 โดยมีการเปิดตัว 4.0.0 พวกเขาเริ่มพึ่งพาไลบรารีเวอร์ชัน 2.5 ซึ่งไม่เข้ากันกับเวอร์ชันของ SELinux ที่รวมอยู่ใน Android 6.0 (คุณสามารถลองรวบรวมได้มันจะล้มเหลว)

ตัวเลือกที่ฉลาดที่สุดน่าจะเป็นไปได้กับ SETools 4.0.0 Beta

ติดตั้งการพึ่งพาเพิ่มเติม:

sudo apt-get install python-setuptools

ดาวน์โหลดและแตกซอร์สโค้ด:

cd ~/android/
wget https://github.com/TresysTechnology/setools/archive/4.0.0-beta.tar.gz
tar xzf 4.0.0-beta.tar.gz
cd ./setools-4.0.0-beta/

เนื่องจากข้อผิดพลาดที่มีผลต่อ Flex 2.5 เราจำเป็นต้องลบออก-Wredundant-declsจากแฟล็กของคอมไพเลอร์:

sed -i '/-Wredundant-decls/d' ./setup.py

และในที่สุดก็รวบรวมและติดตั้ง:

python ./setup.py build
sudo python ./setup.py install

ขั้นตอนทั่วไป (หรือ "วิธีถอดตัวเอง")

ในกรณีที่ขั้นตอนข้างต้นไม่ได้ผลในกรณีของคุณนี่คือมุมมองระดับที่สูงขึ้นเกี่ยวกับวิธีการพยายามดำเนินการ

ไม่มีเวทมนตร์ที่น่าเศร้า (และไม่มีผู้ช่วย :() ที่นี่: วิธีเดียวที่จะได้รหัสนี้เพื่อคอมไพล์คือวิธี "ลองแล้วดู" แบบคลาสสิคที่น่าสะพรึงกลัว

ลองรวบรวมครั้งแรกมันอาจจะล้มเหลวมากที่สุดเนื่องจาก*.hไม่พบไฟล์บางไฟล์:

  1. ค้นหาในexternal/ไดเรกทอรีของ Android :

    find $ANDROID_BUILD_TOP/external -name filename.h
    

    หากคุณพบไฟล์ที่ร้องขอหมายความว่ามีการรวมไลบรารีหรือเครื่องมือรุ่นที่ระบุไว้ในซอร์สโค้ด Android ดังนั้นคุณไม่ควรลองติดตั้งจากระบบแพ็คเกจของ Ubuntu แต่ให้คอมไพล์และติดตั้งเวอร์ชั่นที่รวมอยู่ในซอร์สโค้ด Android แทน

    โปรดทราบว่าสิ่งนี้ขัดกับคำแนะนำทั่วไปที่คุณอาจพบในฟอรัม: "การรวบรวมของคุณล้มเหลวเนื่องจากห้องสมุดนี้หายไปหรือไม่ติดตั้งแพคเกจนี้แล้วมันจะไม่เป็นไร!" โดยการทำเช่นนี้คุณอาจจะพบปัญหาที่แย่กว่านี้: หากมีการรวมรุ่นที่เฉพาะเจาะจงอาจเป็นเพราะต้องการรุ่นที่เฉพาะเจาะจง (เนื่องจากปัญหาความเข้ากันได้หรือเนื่องจากรุ่นนี้มีการเปลี่ยนแปลงเฉพาะจาก Google)

    BTW หากคุณสงสัย: แน่นอนว่าไลบรารีหรือเครื่องมือนี้อาจมีการอ้างอิงเพิ่มข้อผิดพลาดเนื่องจาก*.hไม่พบไฟล์บางไฟล์และใช่คุณควรใช้วิธีการ "ลองและดู" แบบวนรอบเดียวกันนี้

  2. ค้นหา systemwide:

    find / -name filename.h 2>/dev/null
    

    หากคุณพบว่า "หายไป" ไฟล์ที่จะมีอยู่ในระบบของคุณในบางตำแหน่งของไลบรารีแบบแบ่งใช้มาตรฐานหมายความว่าการพึ่งพานี้อาจพบได้ในสภาพแวดล้อมของคุณแล้ว แต่ Makefile ที่ยกข้อผิดพลาดนั้นเป็นใบ้เกินไป

    หากคุณเรียกใช้ Makefile โดยตรงด้วยตนเองอาจเป็นไปได้ที่คุณจะตั้งค่าตัวแปรสภาพแวดล้อมบางตัวเพื่อแก้ไขปัญหานี้ ( LIBDIR=/usr/lib makeเช่น) มิฉะนั้นคุณอาจต้องแก้ไข Makefile เอง ( pkg-configคำสั่งอาจเป็นประโยชน์อย่างมากในการสร้างพารามิเตอร์บิลด์ที่หายไปโดยอัตโนมัติ) .

  3. ค้นหาในระบบบรรจุภัณฑ์:

    apt-cache search filename-dev
    

    โดยfilename-devที่ชื่อของไฟล์ที่หายไปเป็นตัวพิมพ์เล็กที่มี.hนามสกุลถูกแทนที่ด้วย-devคำต่อท้าย (ตัวอย่างเช่นหากPython.hไม่พบให้ค้นหาpython-dev) อาจต้องมีการปรับแต่งชื่อที่แน่นอนเพื่อค้นหาแพ็คเกจที่เหมาะสม

  4. หากคุณยังคงติดอยู่และแม้แต่การค้นหาอย่างรวดเร็วบนอินเทอร์เน็ตไม่ได้ให้คำตอบที่ชัดเจนใด ๆ แล้วapt-fileจะเป็นเพื่อนที่ดีที่สุดของคุณ apt-fileไม่ได้ติดตั้งตามค่าเริ่มต้นคุณต้องติดตั้งและสร้างฐานข้อมูล:

    sudo apt-get apt-file
    sudo apt-file update
    

    apt-fileช่วยให้คุณสามารถค้นหาแพ็คเกจ (แม้จะถูกถอนการติดตั้ง) ให้ไฟล์เฉพาะ เพื่อหลีกเลี่ยงผลลัพธ์ที่มากเกินไปฉันแนะนำให้เชื่อมโยงกับgrepด้านล่าง:

    apt-file search filename.h | grep -w filename.h
    

    หากมีแพ็คเกจในที่เก็บของ Ubuntu ที่ให้ไฟล์นี้apt-fileควรจะสามารถค้นหาได้

    เมื่อคุณได้พบแพคเกจที่เหมาะสมติดตั้งโดยใช้apt-get install packagenameที่packagenameเป็นชื่อแพคเกจของคุณ

เคล็ดลับ:apt-get reinstall pkg_nameหากคุณเมาบางสิ่งบางอย่างในระบบของคุณคำสั่งเพื่อติดตั้งแพคเกจนี้เป็นหนึ่ง: มันจะทำงานได้แม้ว่าจะไม่สามารถลบและติดตั้งแบบคลาสสิกได้เนื่องจากการทำลายการพึ่งพา (ซึ่งเป็นไปได้มากที่สุดสำหรับไลบรารีของระบบ)

เครื่องมือเสริม

ในขั้นตอนนี้คุณควรมีสภาพแวดล้อมที่สะอาดช่วยให้คุณสามารถตรวจสอบกฎ SELinux ของ Android ทั้งในรูปแบบที่คอมไพล์และแหล่งที่มา

อย่างไรก็ตามโอกาสส่วนใหญ่คือเมื่อสิ้นสุดการสอบสวนคุณจะต้องดำเนินการบางอย่าง ในรูปร่างปัจจุบันสภาพแวดล้อมของคุณจะไม่อนุญาตให้คุณแก้ไขsepolicyไฟล์ของอุปกรณ์ อันที่จริงแล้วไฟล์นี้ไม่สามารถแทนที่ได้ง่าย: มันเป็นส่วนหนึ่งของไดเรกทอรีรากของอุปกรณ์และเนื้อหาของไดเรกทอรีรากนั้นเป็นตัวแยกไฟล์ในเวลาบูตจากไฟล์ดิสก์ RAM ซึ่งจะถูกเก็บไว้ในอิมเมจสำหรับบูตของอุปกรณ์

ดังนั้นคุณยังคงพลาดสองสิ่งก่อนที่สภาพแวดล้อมของคุณจะเสร็จสมบูรณ์:

  • วิธีเข้าถึงและแก้ไขอิมเมจสำหรับบูตของอุปกรณ์
  • วิธีแก้ไขsepolicyไฟล์

โชคดีที่สิ่งเหล่านี้เป็นหัวข้อสองส่วนสุดท้ายของโพสต์นี้อย่างแม่นยำ! :)

ดึงและอัปเดตอิมเมจสำหรับบูตของอุปกรณ์

เครื่องมือในการดึงและอัปเดตอิมเมจสำหรับบูตของอุปกรณ์สามารถนำไปใช้กับสิ่งต่าง ๆ ได้หลากหลายนอกเหนือจากกฎของ SELinux ที่ดัดแปลง ฉันได้สร้างคำตอบเฉพาะโปรดอ้างอิง

แก้ไขกฎ SELinux ของอุปกรณ์

คุณมีความเป็นไปได้หลักสองประการที่นี่:

  • สร้างsepolicyไฟล์ใหม่จากกฎในแผนผังแหล่งที่มาของคุณ (ค้นหา.teไฟล์เพื่อค้นหา: ไฟล์เหล่านั้นfind $ANDROID_BUILD_TOP -name \*.teจะถูกกระจายไปยังหลายไดเรกทอรี)
  • แก้ไขsepolicyไฟล์ที่อุปกรณ์ใช้ในปัจจุบัน

เว้นแต่คุณจะต้องสร้างกฎตั้งแต่เริ่มต้นซึ่งเป็นงานที่เกี่ยวข้องกับการพัฒนามากกว่าและอยู่นอกขอบเขตที่นี่ตัวเลือกที่สองดูเหมือนจะไกลที่สุดเท่าที่ปลอดภัยที่สุดเนื่องจากคุณแน่ใจว่าการเปลี่ยนแปลงเพียงอย่างเดียวจะเป็นของคุณ ทำอย่างชัดเจน

มีโครงการที่สร้างเครื่องมือที่ช่วยให้คุณสามารถถอดรหัสsepolicyไฟล์เป็นรูปแบบที่สามารถคอมไพล์ได้อีกครั้งซึ่งช่วยให้สามารถแก้ไขกฎได้อย่างอิสระ อย่างไรก็ตามโครงการนี้ถูกละทิ้งในสถานะการพิสูจน์แนวคิด คุณจะพบข้อมูลทั้งหมดที่ส่วนท้ายของโพสต์บล็อกส่วนที่เหลือของบทความนี้มีรายละเอียดเพียงพอที่จะอนุญาตให้ใครก็ตามที่สนใจเข้ามาครอบครอง

วิธีที่แนะนำในการเปลี่ยนsepolicyกฎไปในเส้นทางอื่น: โดยการแก้ไขsepolicyไบนารีไฟล์โดยตรง เครื่องมือsepolicy-injectอนุญาตเพียงแค่นั้นและได้รับการบำรุงรักษาอย่างแข็งขัน

เพื่อความสมบูรณ์โปรดทราบว่ามีส้อมของเครื่องมือนี้อยู่ มันเพิ่มคุณสมบัติบางอย่างบางอย่างอยู่ในรายการที่ต้องทำของผู้เขียนดั้งเดิม (เช่นความเป็นไปได้ที่จะลบกฎ) อย่าถามฉันว่าทำไมพวกเขาเลือกที่จะแยกแทนการบริจาค ...

ในการรวบรวมและติดตั้งsepolicy-injectเพียงดำเนินการดังนี้:

cd ~/android/
git clone https://bitbucket.org/joshua_brindle/sepolicy-inject.git
cd ./sepolicy-inject/
LIBDIR=/usr/lib make
sudo cp ./sepolicy-inject /usr/bin/

ตัวอย่างการใช้งาน

สมมติว่าคุณต้องการเพิ่มการเติมข้อความอัตโนมัติที่ตรงกับข้อความแสดงข้อผิดพลาดต่อไปนี้:

avc: denied { read } for pid=128 comm="file-storage"
path="/data/media/0/path/to/some/file"
dev="mmcblk0p28" ino=811035 scontext=u:r:kernel:s0
tcontext=u:object_r:media_rw_data_file:s0 tclass=file permissive=0

คุณจะต้องดึงข้อมูลอิมเมจสำหรับบูตของอุปกรณ์แล้วแกะมันเพื่อเข้าถึงsepolicyไฟล์

การตรวจสอบอย่างรวดเร็วโดยใช้sesearchแสดงให้เห็นว่าไม่มีกฎอนุญาต (ยัง!):

$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
$

คำสั่งไม่มีเอาต์พุต

จากนั้นใช้คำสั่งด้านล่างเพื่อเพิ่มกฎที่ต้องการ (สังเกตความคล้ายคลึงกันระหว่างsesearchและsepolicy-injectพารามิเตอร์):

sepolicy-inject -s kernel -t media_rw_data_file -c file -p read -P ./sepolicy

ตอนนี้เราสามารถโทรกลับsesearchคำสั่งของเรา:

$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
allow kernel media_rw_data_file:file read;
$

sesearch ผลลัพธ์แสดงให้เห็นว่านโยบายได้รับการปรับปรุงอย่างถูกต้อง

ตอนนี้คุณสามารถหีบห่อboot.imgไฟล์ของอุปกรณ์และย้อนกลับไปยังอุปกรณ์ การตรวจสอบเวลาแก้ไขล่าสุดของ/sepolicyไฟล์เป็นวิธีที่ง่ายเพื่อให้แน่ใจว่าอุปกรณ์ของคุณกำลังเรียกใช้sepolicyไฟล์ที่อัพเดตใหม่

ข้อสรุป

ตอนนี้คุณควรมีสภาพแวดล้อมที่สมบูรณ์ช่วยให้คุณสามารถตรวจสอบและปรับเปลี่ยนอุปกรณ์ Android SELinux ได้อย่างอิสระ สนุก! :)

ตามบันทึกข้างนอกจากนี้ยังมีเครื่องมือที่ช่วยให้การวิเคราะห์และปรับเปลี่ยนนโยบาย SELinux จากเครื่องได้โดยตรง


1
เพียงบันทึกเดียว - อย่าทำ "ซิงค์ repo" ยกเว้นว่าคุณมีกาแฟให้ดื่มมากมาย) ใช้ "repo sync -q -f --force-sync -c" แทน - จะช่วยประหยัดเวลาและพื้นที่ฮาร์ดไดรฟ์ของคุณ . -q เงียบ, -f และ --force-sync จะช่วยให้คุณดำเนินการในกรณีที่เกิดข้อผิดพลาดเครือข่ายชั่วคราว -c จะดึงสาขาปัจจุบันเท่านั้น ป.ล. ฉันยังใช้แฟล็ก "-d --prune" ในระหว่างการพัฒนาเมื่อฉันต้องการลบการเปลี่ยนแปลงใด ๆ ในพื้นที่และสลับไปที่เวอร์ชันรายการ
Oleksandr

@Oleksandr: ขอบคุณสำหรับข้อมูลของคุณมันมีประโยชน์ที่จะรู้ ฉันทดสอบด้วยการ-cตั้งค่าสถานะ แต่ไม่ได้สังเกตเห็นความแตกต่างที่ยิ่งใหญ่ใด ๆ : ยังคงมีข้อมูลมากพอที่คอมพิวเตอร์จะดาวน์โหลด (25 GB) ยังคงมีคาเฟอีนมากพอที่จะดื่ม;) ฉันค่อนข้างระวัง-fธงตามความเข้าใจของฉันสิ่งนี้จะบังคับrepoให้เพิกเฉยเมื่อไม่สามารถดาวน์โหลดบางส่วนของซอร์สโค้ดและยังถือว่าผลลัพธ์สุดท้ายเป็นความสำเร็จ ฉันชอบที่จะจองสถานะ "สำเร็จ" เพื่อการดึงข้อมูลที่สมบูรณ์และหลีกเลี่ยงการค้นหาตัวเองในสถานการณ์ที่ไม่รู้จักซึ่งไฟล์อาจหายไปแบบสุ่ม
WhiteWinterWolf

2

คุณควรสร้าง libsepol เวอร์ชันเก่าจากรหัส AOSP (เช่นเดียวกับรุ่น 6.0 ที่สอดคล้องกัน) จากนั้นเชื่อมโยง sepolicy-inject, dispol และอื่น ๆ สูตรนี้ใช้ได้กับฉันใน debian jessie:

cd /to/the/aosp/dir 
[repo init, etc]
repo sync external/selinux
cd external/selinux
git checkout android-6.0.0_r1^
cd libsepol
make
libsepol=`pwd`
cd /to/the/selinux-inject-source-dir
make LIBDIR=$libsepol

ไม่เหมือน sepolicy-inject ที่เชื่อมโยงกับ libsepol ของระบบอันนี้ทำงานได้ดีกับ / sepolicy จากอิมเมจ 6.0 ที่รวมอยู่ใน android sdk:

$ sepolicy-inject -Z shell -P /tmp/sepolicy -o /tmp/sepolicy 
libsepol.policydb_read: policydb version 30 does not match my version range 15-29
error(s) encountered while parsing configuration
Could not load policy
$ ./sepolicy-inject -Z shell -P /tmp/sepolicy -o /tmp/sepolicy 
libsepol.policydb_index_others: security:  1 users, 2 roles, 525 types, 0 bools
libsepol.policydb_index_others: security: 1 sens, 1024 cats
libsepol.policydb_index_others: security:  87 classes, 4767 rules, 0 cond rules

สำหรับเครื่องมือที่รวมอยู่ในการกระจาย selinux เคล็ดลับคือสร้างด้วย DESTDIR เดียวกัน:

cd libsepol
make DESTDIR=/some/dir install
cd ../checkpolicy
make DESTDIR=/some/dir
# here you have a working 'dispol' in the 'test' subdir

ขอบคุณ สิ่งนี้ให้รุ่นของ Sedispol ที่ดูเหมือนว่าจะใช้งานได้ แต่ฉันก็ยังไม่สามารถรวบรวมข้อมูลการค้นหาได้ Sesearch มองหาไฟล์รวม<apol/policy.h>(จากภายในpolicy.hไฟล์อื่น) คุณรู้โมดูลที่มีapol?
user3188445

@ user3188445: ไฟล์apol/policy.hจัดทำโดยแพคเกจlibapol-dev(อย่างน้อยก็เป็นไฟล์นี้ในระบบ Ubuntu) โปรดอ้างอิงคำตอบของฉันสำหรับข้อมูลรายละเอียดเพิ่มเติม
WhiteWinterWolf

1

ถึงคนที่เผชิญปัญหาด้วย:

policydb version 30 does not match my version range 15-29

ในขณะที่ทำงานกับรหัส AOSP

สมมติว่ารหัส AOSP ของคุณได้รับการตรวจสอบกับ~ / android / source dir:

cd ~/android/source
source build/envsetup.sh
export ANDROID_BUILD_TOP=$(pwd)

และตอนนี้คุณมีอิสระที่จะใช้ยูทิลิตี้audit2allowแบบรวม:

./external/selinux/prebuilts/bin/audit2allow

PSนอกจากนี้ฉันต้องการที่อยู่ความคิดเห็นตรวจสอบนโยบาย Android selinux (v30)

Sesearch มองหาไฟล์ include (จากภายในไฟล์ policy.h อื่น) คุณรู้หรือไม่ว่าโมดูลใดมี apol

การสร้างชุดเครื่องมือ selinux จากแหล่งที่มาhttps://github.com/SELinuxProject/selinuxนั้นไม่สำคัญมากนัก (เว้นแต่คุณจะใช้ Fedora) บน Ubuntu คุณต้องติดตั้ง (สมมติว่าคุณติดตั้งเครื่องมือ dev พื้นฐานแล้วเช่นกระทิงและคอมไพเลอร์ C) libglib2.0-dev, libcap-ng-dev, xmlto, libsemanage1-dev, libustr-dev, libaudit-dev, libsepol1 -DEV

แต่ท้ายที่สุดฉันก็ยังไม่สามารถคอมไพล์มันได้เพราะhttps://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/793155และไม่รู้ว่าจะแก้ไขอย่างไร


1
ฉันยังพบglibconfig.hข้อผิดพลาดที่คุณกำลังเชื่อมโยงในตอนท้ายของโพสต์ของคุณมันถูกยกโดยrestorecondMakefile ของเพราะเส้นทางที่ไม่ถูกต้องอยู่ในฮาร์ดโค้ด pkg-configคุณต้องปรับเปลี่ยนให้มันแบบไดนามิกเส้นทางการแก้ปัญหาโดยใช้ ดูคำตอบของฉันสำหรับรายละเอียดเพิ่มเติม
WhiteWinterWolf

1

คุณควรพยายามที่จะนำpatch นี้ไปใช้กับแหล่งที่มาของ libsepol แล้วค่อยเพิ่มสิ่งเหล่านั้นใหม่ทั้งหมด มันใช้งานได้สำหรับฉันในเรื่องแซม

คุณสามารถลองใช้ libsepol clone กับ patch ที่ใช้จาก repo นี้https: //metizik@bitbucket.org/metizik/selinux_tools.git ฉันใช้มันเพื่อสร้าง dispol ภายใต้ Windows และทำงานได้ดี (ยังคงสังเกตเห็นว่าฉัน ใช้ cygwin สำหรับสิ่งนี้)


0

audit2allow, audit2why และ sesearch ถูกใช้งานไม่ได้ทั้งหมดด้วยการอัปเดตนโยบาย AOSP อัปสตรีมเป็น v.30

คุณต้องใช้แพตช์ด้านล่างและสร้างแผนผัง Android ของคุณใหม่เพื่ออัปเดตนโยบาย db สิ่งเหล่านี้ได้รับการผสานแล้วไปยังสาขาหลักและเริ่มต้นจาก Android N

https://android-review.googlesource.com/187140 https://android-review.googlesource.com/187111

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