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