คู่มือสำหรับผู้เริ่มต้นใช้งาน SELinux

คู่มือสำหรับผู้เริ่มต้นใช้งาน SELinux

แปลบทความที่จัดทำขึ้นสำหรับนักศึกษารายวิชา "ความปลอดภัยของลินุกซ์"

SELinux หรือ Security Enhanced Linux เป็นกลไกการควบคุมการเข้าถึงที่ได้รับการปรับปรุงซึ่งพัฒนาโดย US National Security Agency (NSA) เพื่อป้องกันการบุกรุกที่เป็นอันตราย ใช้รูปแบบการควบคุมการเข้าถึงแบบบังคับ (หรือบังคับ) (การควบคุมการเข้าถึงแบบบังคับภาษาอังกฤษ, MAC) เพิ่มเติมจากรูปแบบการควบคุมการเข้าถึงตามดุลยพินิจ (หรือแบบเลือก) ที่มีอยู่ (การควบคุมการเข้าถึงตามดุลยพินิจภาษาอังกฤษ, DAC) ซึ่งก็คือสิทธิ์ในการอ่าน เขียน และดำเนินการ

SELinux มีสามโหมด:

  1. การบังคับใช้ — การปฏิเสธการเข้าถึงตามกฎนโยบาย
  2. อนุญาต — เก็บบันทึกการกระทำที่ละเมิดนโยบายซึ่งจะถูกห้ามในโหมดบังคับใช้
  3. พิการ — ปิดการใช้งาน SELinux โดยสมบูรณ์

โดยค่าเริ่มต้น การตั้งค่าจะอยู่ในนั้น /etc/selinux/config

การเปลี่ยนโหมด SELinux

หากต้องการค้นหาโหมดปัจจุบัน ให้เรียกใช้

$ getenforce

หากต้องการเปลี่ยนโหมดให้อนุญาตให้รันคำสั่งต่อไปนี้

$ setenforce 0

หรือเปลี่ยนโหมดจาก อนุญาต บน การบังคับใช้ดำเนินการ

$ setenforce 1

หากคุณต้องการปิดการใช้งาน SELinux โดยสมบูรณ์ สามารถทำได้ผ่านไฟล์กำหนดค่าเท่านั้น

$ vi /etc/selinux/config

หากต้องการปิดใช้งาน ให้เปลี่ยนพารามิเตอร์ SELINUX ดังนี้:

SELINUX=disabled

การตั้งค่า SELinux

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

$ vi /etc/selinux/config
SELINUX=permissive

หลังจากตั้งค่าโหมดแล้ว อนุญาตให้สร้างไฟล์ว่างที่ซ่อนอยู่ในรูทด้วยชื่อ autorelabel

$ touch /.autorelabel

และรีสตาร์ทคอมพิวเตอร์

$ init 6

หมายเหตุ: เราใช้โหมด อนุญาต สำหรับการมาร์กเนื่องจากการใช้โหมด การบังคับใช้ อาจทำให้ระบบล่มระหว่างการรีบูต

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

$ setenforce 1

คุณได้เปิดใช้งาน SELinux บนคอมพิวเตอร์ของคุณเรียบร้อยแล้ว

การตรวจสอบบันทึก

คุณอาจพบข้อผิดพลาดบางอย่างในระหว่างการทำเครื่องหมายหรือในขณะที่ระบบกำลังทำงาน หากต้องการตรวจสอบว่า SELinux ของคุณทำงานอย่างถูกต้องหรือไม่ และไม่ได้ปิดกั้นการเข้าถึงพอร์ต แอปพลิเคชัน ฯลฯ หรือไม่ คุณต้องดูบันทึก บันทึก SELinux อยู่ใน /var/log/audit/audit.logแต่คุณไม่จำเป็นต้องอ่านทั้งหมดเพื่อค้นหาข้อผิดพลาด คุณสามารถใช้ยูทิลิตี audit2why เพื่อค้นหาข้อผิดพลาด รันคำสั่งต่อไปนี้:

$ audit2why < /var/log/audit/audit.log

ด้วยเหตุนี้ คุณจะได้รับรายการข้อผิดพลาด หากไม่มีข้อผิดพลาดในบันทึก จะไม่มีข้อความปรากฏขึ้น

การกำหนดค่านโยบาย SELinux

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

1. ค่าตรรกะ (สวิตช์)

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

ตัวอย่าง
สมมติว่าเราต้องการแชร์โฮมไดเร็กตอรี่ของผู้ใช้ผ่านการอ่าน/เขียน FTP และเราได้แชร์ไปแล้ว แต่เมื่อเราพยายามเข้าถึง เราก็ไม่เห็นอะไรเลย เนื่องจากนโยบาย SELinux ป้องกันไม่ให้เซิร์ฟเวอร์ FTP อ่านและเขียนไปยังโฮมไดเร็กตอรี่ของผู้ใช้ เราจำเป็นต้องเปลี่ยนนโยบายเพื่อให้เซิร์ฟเวอร์ FTP สามารถเข้าถึงโฮมไดเร็กตอรี่ได้ เรามาดูกันว่ามีสวิตช์อะไรบ้างโดยทำ

$ semanage boolean -l

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

$ semanage boolean -l | grep ftp

และคุณจะพบสิ่งต่อไปนี้

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

สวิตช์นี้ถูกปิดใช้งาน ดังนั้นเราจะเปิดใช้งานด้วย setsebool $ setsebool ftp_home_dir on

ตอนนี้ ftp daemon ของเราจะสามารถเข้าถึงโฮมไดเร็กตอรี่ของผู้ใช้ได้
หมายเหตุ: คุณยังสามารถรับรายการสวิตช์ที่มีอยู่โดยไม่มีคำอธิบายได้ด้วยการดำเนินการ getsebool -a

2. ป้ายกำกับและบริบท

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

  • สำหรับไฟล์และโฟลเดอร์ ป้ายกำกับจะถูกจัดเก็บเป็นคุณลักษณะเพิ่มเติมบนระบบไฟล์และสามารถดูได้ด้วยคำสั่งต่อไปนี้:
    $ ls -Z /etc/httpd
  • สำหรับกระบวนการและพอร์ต การติดป้ายกำกับจะได้รับการจัดการโดยเคอร์เนล และคุณสามารถดูป้ายกำกับเหล่านี้ได้ดังต่อไปนี้:

กระบวนการ

$ ps –auxZ | grep httpd

ท่าเรือ

$ netstat -anpZ | grep httpd

ตัวอย่าง
ตอนนี้เรามาดูตัวอย่างเพื่อทำความเข้าใจป้ายกำกับและบริบทกันดีกว่า สมมติว่าเรามีเว็บเซิร์ฟเวอร์ แทนที่จะเป็นไดเร็กทอรี /var/www/html/ использует /home/dan/html/. SELinux จะถือว่านี่เป็นการละเมิดนโยบาย และคุณจะไม่สามารถดูหน้าเว็บของคุณได้ เนื่องจากเราไม่ได้ตั้งค่าบริบทด้านความปลอดภัยที่เกี่ยวข้องกับไฟล์ HTML หากต้องการดูบริบทความปลอดภัยเริ่มต้น ให้ใช้คำสั่งต่อไปนี้:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

ที่นี่เราได้รับ httpd_sys_content_t เป็นบริบทสำหรับไฟล์ html เราจำเป็นต้องตั้งค่าบริบทความปลอดภัยนี้สำหรับไดเร็กทอรีปัจจุบันของเรา ซึ่งปัจจุบันมีบริบทดังต่อไปนี้:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

คำสั่งทางเลือกในการตรวจสอบบริบทความปลอดภัยของไฟล์หรือไดเร็กทอรี:

$ semanage fcontext -l | grep '/var/www'

นอกจากนี้เรายังจะใช้ semanage เพื่อเปลี่ยนบริบทเมื่อเราพบบริบทด้านความปลอดภัยที่ถูกต้องแล้ว หากต้องการเปลี่ยนบริบทของ /home/dan/html ให้รันคำสั่งต่อไปนี้:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

หลังจากที่บริบทถูกเปลี่ยนแปลงโดยใช้ semanage คำสั่ง Restorecon จะโหลดบริบทเริ่มต้นสำหรับไฟล์และไดเร็กทอรี เว็บเซิร์ฟเวอร์ของเราจะสามารถอ่านไฟล์จากโฟลเดอร์ได้แล้ว /home/dan/htmlเนื่องจากบริบทด้านความปลอดภัยสำหรับโฟลเดอร์นี้มีการเปลี่ยนแปลงเป็น httpd_sys_content_t.

3. สร้างนโยบายท้องถิ่น

อาจมีสถานการณ์ที่วิธีการข้างต้นไม่มีประโยชน์สำหรับคุณ และคุณได้รับข้อผิดพลาด (avc/denial) ใน audit.log เมื่อเกิดเหตุการณ์นี้ คุณจะต้องสร้างนโยบายท้องถิ่น คุณสามารถค้นหาข้อผิดพลาดทั้งหมดได้โดยใช้ audit2why ตามที่อธิบายไว้ข้างต้น

คุณสามารถสร้างนโยบายท้องถิ่นเพื่อแก้ไขข้อผิดพลาดได้ ตัวอย่างเช่น เราได้รับข้อผิดพลาดที่เกี่ยวข้องกับ httpd (apache) หรือ smbd (samba) เรารวบรวมข้อผิดพลาดและสร้างนโยบายสำหรับข้อผิดพลาดเหล่านั้น:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

ที่นี่ http_policy и smb_policy เป็นชื่อของนโยบายท้องถิ่นที่เราสร้างขึ้น ตอนนี้เราจำเป็นต้องโหลดนโยบายท้องถิ่นที่สร้างขึ้นเหล่านี้ลงในนโยบาย SELinux ปัจจุบัน ซึ่งสามารถทำได้ดังนี้:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

ดาวน์โหลดนโยบายท้องถิ่นของเราแล้ว และเราไม่ควรได้รับ avc หรือ denail ใน audit.log อีกต่อไป

นี่เป็นความพยายามของฉันที่จะช่วยให้คุณเข้าใจ SELinux ฉันหวังว่าหลังจากอ่านบทความนี้แล้ว คุณจะรู้สึกสบายใจกับ SELinux มากขึ้น

ที่มา: will.com

เพิ่มความคิดเห็น