การอ่านและเขียนกฎ Selinux

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

การรับ Instance สำหรับการดำเนินการ

ก่อนที่จะเริ่ม คุณต้องรับ instance ของ selinux ก่อน

selinux = d.stub("SelinuxPolicy")

การรับสถานะ Selinux

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตรวจสอบว่ากฎ Selinux ถูกเปิดใช้งานอยู่หรือไม่

selinux.enabled()
>>> selinux.is_enabled( )
True

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตรวจสอบว่าสถานะปัจจุบันเป็น enforce หรือไม่

selinux.get_enforce()
>>> selinux.get_enforce()
1

การตั้งค่าสถานะ Selinux

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตั้งค่า Selinux เป็น enforce หรือ permissive

selinux.set_enforce(enable)

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตั้งค่าเป็น enforce

>>> selinux.set_enforce(True)
1

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตั้งค่าเป็น permissive

>>> selinux.set_enforce( False)
0

การสร้าง Domain ใหม่

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อสร้าง domain ใหม่ใน Selinux

selinux.create_domain(domain_name)
>>> selinux.create_domain("hello_selinux")
True

การตั้งค่า Domain เป็น Permissive

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตั้งค่า Selinux domain เป็นสถานะ permissive

selinux.permissive(domain_name)
>>> selinux.permissive("untrusted_app")
True

การตั้งค่า Domain เป็น Enforce

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตั้งค่า Selinux domain เป็นสถานะ enforce

selinux.enforce(domain_name)
>>> selinux.enforce("untrusted_app")
True

การปรับแต่งกฎการควบคุมอย่างละเอียด

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อเขียนกฎ allow และ disallow ได้อย่างละเอียดมากยิ่งขึ้น

selinux.disallow(source, target, tclass, action)
selinux.allow(source, target, tclass, action)

โดยที่ source และ target หมายถึง context ต้นทางและปลายทางตามลำดับ, tclass หมายถึงคลาสเป้าหมาย (target class), และ action หมายถึงการดำเนินการที่เฉพาะเจาะจง action รองรับเพียง * (หมายถึงทั้งหมด) หรือการกระทำที่ระบุเท่านั้น พารามิเตอร์ทั้งหมดไม่รองรับ context หรือ action หลายค่า เช่น รูปแบบกฎมาตรฐานอย่าง {binder system_app} ในที่นี้คุณสามารถระบุได้เพียงชื่อเดียวเท่านั้น ด้านล่างนี้คือตัวอย่างการดำเนินการ

>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "*")

กฎข้างต้นหมายถึงการอนุญาตให้ hal_camera_default มีสิทธิ์ดำเนินการทั้งหมดกับไดเรกทอรี camera_vendor_data_file (dir) ในทำนองเดียวกัน การเปลี่ยนเป็นเมธอด disallow จะหมายถึงการปฏิเสธสิทธิ์เหล่านี้

>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "search")

คุณยังสามารถระบุ action ที่ละเอียดขึ้นได้เช่น search ดังตัวอย่างข้างต้น