วิธีสร้างฉลาก SELinux ที่กำหนดเอง


11

ฉันเขียนบริการ / แอพไบนารีตัวเดียวที่ฉันพยายามเรียกใช้บน Fedora 24 มันทำงานโดยใช้ systemd ไบนารีถูกปรับใช้ /srv/bot

บริการ / แอพนี้ที่ฉันเขียนต้องสร้าง / เปิด / อ่านและเปลี่ยนชื่อไฟล์ในไดเรกทอรีนี้

ฉันเริ่มสร้างนโยบายใหม่โดยใช้SELinux: อนุญาตให้กระบวนการสร้างไฟล์ใด ๆ ในไดเรกทอรีหนึ่ง

แต่เมื่อแอพของฉันจำเป็นต้องเปลี่ยนชื่อเอาต์พุตมีคำเตือน:

#!!!! WARNING: 'var_t' is a base type.
allow init_t var_t:file rename;

ฉันไปรอบ ๆ และพบว่าฉันควรใช้ป้ายกำกับ SELinux ที่เฉพาะเจาะจงมากกว่าประเภทฐาน แต่ตัวอย่างทั้งหมดออนไลน์แสดงฉลากที่มีอยู่จาก httpd / nginx / etc ให้คุณเห็น

มีวิธีที่ฉันสามารถสร้างป้ายกำกับที่กำหนดเองสำหรับแอปของฉันเองได้หรือไม่

ความคิดของฉันคือการสร้างบางสิ่งบางอย่างเช่น myapp_var_t ใช้

semanage fcontext -a -t my_app_var_t '/srv/bot(/.*)?'
restorecon -R -v /srv/bot

และ.ppไฟล์ที่กำหนดเองที่จะใช้ประเภทที่กำหนดเองนี้

หากมีวิธีที่ดีกว่าในการแก้ไขมันก็ใช้ได้เช่นกัน

ขอบคุณ

ปรับปรุง

หลังจากค้นหาเพิ่มเติมฉันคิดว่าคำที่เหมาะสมสำหรับสิ่งที่ฉันต้องการทำคือการสร้างใหม่typesซึ่งทำให้ฉันไปที่ https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916

ซึ่งโดยทั่วไปบอกว่าวิ่ง

sepolgen /path/to/binary

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

ถ้าฉันทำให้มันใช้งานได้ฉันจะอัพเดทโพสต์นี้

คำตอบ:


11

ด้วยจุดเริ่มต้นของการทำงาน

sepolgen /path/to/binary

ซึ่งให้คุณ:

app.fc
app.sh
app.if
app.spec
app.te

ในการสร้างใหม่SELinux file contextเพื่อนำไปใช้กับไดเรกทอรีหลักที่เก็บไฟล์โปรแกรม / daemon ของคุณจะแก้ไขคุณแก้ไขไฟล์ app.te และเพิ่ม:

type app_var_t;
files_type(app_var_t)

บรรทัดแรกประกาศชนิดใหม่และบรรทัดที่สองเรียกแมโครที่ทำเวทมนตร์และทำให้เป็นไฟล์ประเภท (ปรากฎว่าคุณไม่สามารถใช้บริบทบริบทของกระบวนการ app_exec_t ในไฟล์หรือไดเรกทอรี) ดู"SELinux Types Revisited"สำหรับข้อมูลเพิ่มเติม ข้อมูลเกี่ยวกับประเภทที่แตกต่างกัน

เมื่อคุณมีประกาศประเภทคุณจะต้องบอก SELinux ว่าแอปของคุณได้รับอนุญาตให้ใช้ในกรณีของฉันฉันเพิ่ม

allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };

โดยทั่วไปแล้วทั้งสองบรรทัดบอกว่าอนุญาตให้ใช้ประเภท app_t ซึ่งเป็นโดเมนของแอพของฉันเพื่อเขียน / ค้นหา / ฯลฯ ไดเรกทอรีด้วยบริบทapp_var_tและอนุญาตให้สร้าง / เปิด / ลบ / ไฟล์ ฯลฯ ด้วยบริบท app_var_t

ส่วนสุดท้ายของตัวต่อคือบอก SELinux ว่าโฟลเดอร์ใดและไฟล์ใดควรได้รับแต่ละประเภทคุณทำได้โดยแก้ไขapp.fcไฟล์ (fc => บริบทไฟล์)

ไฟล์นี้มีสองบรรทัดในกรณีของฉัน:

/srv/bot/app        --  gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)?          gen_context(system_u:object_r:app_var_t,s0)

บรรทัดแรกชี้ตรงไปยังไบนารีตามที่ปรับใช้บนเซิร์ฟเวอร์ของฉันดังนั้นอันนี้จะได้รับบริบท app_exec_t

บรรทัดที่สองหมายถึง:

ใช้ app_var_t กับไดเรกทอรี / srv / bot และรวมถึงไฟล์ทั้งหมดใน dir / srv / bot

สังเกตว่าบรรทัดแรกมี--ระหว่างพา ธ และการเรียกไปยังgen_contextอย่างไร --หมายถึงใช้สิ่งนี้กับไฟล์เท่านั้น ในกรณีที่สองเราไม่มีสิ่งใด (แค่เว้นวรรค) ซึ่งหมายถึงนำไปใช้กับไดเรกทอรีและไฟล์ที่ตรงกันทั้งหมดซึ่งเป็นสิ่งที่ฉันต้องการตัวเลือกอื่นคือต้อง-dใช้เพียงไดเรกทอรี

ตอนนี้ฉันมีนโยบายที่ใช้งานได้ฉันสามารถปรับใช้แอพของฉันด้วยนโยบายที่กำหนดเองและใช้งานได้ทั้งหมด (นโยบายของฉันมีรายการใน.teไฟล์จำนวนมากแต่อยู่นอกขอบเขตของคำถามนี้)

วัสดุการอ่านพิเศษที่ช่วยให้ฉันได้รับการแก้ไขนี้:

ทำสิ่งต่าง ๆ ได้ง่ายขึ้นด้วย sepolgen

คิดก่อนที่คุณจะเพียงแค่ตรวจสอบ blind2allow -M mydomain

SELinux สำหรับผู้พัฒนาหมวกแดง (PDF ยาว)

โมดูล SElinux (1): ประเภทและกฎ

นโยบายตัวอย่าง (โดยเฉพาะ postgresql)

ทำความเข้าใจกับไฟล์บริบทไฟล์


หรือใช้CIL
Jakuje

sepolgen /path/to/binaryคายข้อผิดพลาดทางไวยากรณ์สำหรับฉัน ฉันใช้ RHEL 7.6 ฉันคิดว่าsepolgen --application /path/to/binaryเป็นไวยากรณ์ที่เหมาะสมหากเป้าหมายของคุณคือการเขียนนโยบายสำหรับแอปพลิเคชันเฉพาะ
jayhendren

คุณไฟล์ยังพ่นไวยากรณ์ผิดพลาดสำหรับฉันเมื่อรวบรวมโมดูล:.te app.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5:และถ้าฉันเพิ่มrequireหัวข้อฉันจะได้รับ:ERROR 'syntax error' at token 'files_type' on line 13:
jayhendren

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