ตำนานหรือความจริง: SELinux สามารถ จำกัด ผู้ใช้รูทได้หรือไม่


20

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

ดูเหมือนว่าจะเป็นตำนานสำหรับฉัน แต่ฉันต้องการตรวจสอบให้แน่ใจว่า: เป็นไปได้ไหมที่จะทำให้กล่อง Linux แข็งขึ้น (อาจมี SELinux) เช่นนี้แม้แต่ผู้ใช้รูทก็ไม่สามารถทำกิจกรรมที่เป็นอันตรายกับมันได้ (ตัวอย่าง: การลบไฟล์ระบบการล้างไฟล์บันทึกการหยุดบริการที่สำคัญ ฯลฯ )

เช่นกล่อง Linux จะเป็นจุดเริ่มต้นที่ดีสำหรับการสร้างhoneypot

แก้ไข: ขึ้นอยู่กับคำตอบ (ตอนนี้ถูกลบ) และ Googling นิดหน่อยฉันมีลิงก์อย่างน้อยสองลิงก์ซึ่งชี้ไปยังเซิร์ฟเวอร์ Linux ที่แข็งตัวดังกล่าว น่าเสียดายที่เซิร์ฟเวอร์ทั้งสองไม่ทำงาน สำหรับบันทึกฉันจะคัดลอกคำอธิบายที่นี่:

1) จากhttp://www.coker.com.au/selinux/play.html :

เข้าถึงรูทฟรีบนเครื่อง SE Linux!

ในการเข้าถึง Debian ของฉันเพื่อเล่นplay.coker.com.auในฐานะรูทรหัสผ่านคือ ...

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

จุดประสงค์ของการนี้คือเพื่อแสดงให้เห็นว่าการรักษาความปลอดภัยที่จำเป็นทั้งหมดนั้นสามารถให้ได้โดย SE Linux โดยไม่ได้รับอนุญาตจาก Unix (อย่างไรก็ตามขอแนะนำให้คุณใช้สิทธิ์ของ Unix เช่นกันสำหรับเซิร์ฟเวอร์จริง) นอกจากนี้ยังเปิดโอกาสให้คุณลงชื่อเข้าใช้เครื่อง SE และดูว่าเป็นอย่างไร

เมื่อคุณลงชื่อเข้าใช้เครื่องเล่น SE Linux ตรวจสอบให้แน่ใจว่าคุณใช้ตัวเลือก-xเพื่อปิดใช้งานการส่งต่อ X11 หรือตั้งค่าForwardX11 no ในไฟล์ / etc / ssh / ssh_config ของคุณก่อนที่คุณจะเข้าสู่ระบบ ตรวจสอบให้แน่ใจด้วยว่าคุณใช้อ็อพชัน -a เพื่อปิดใช้งานการส่งต่อเอเจนต์ ssh หรือตั้งค่าForwardAgent ไม่ในไฟล์ / etc / ssh / ssh_config ของคุณก่อนที่คุณจะเข้าสู่ระบบ หากคุณไม่ได้ปิดการใช้งานการตั้งค่าเหล่านี้อย่างถูกต้องการล็อกอินเข้าสู่เครื่องเล่นจะทำให้คุณเสี่ยงต่อการถูกโจมตีผ่านไคลเอนต์ SSH ของคุณ

มีช่องทาง IRC สำหรับการพูดคุยนี้คือมันเป็น#selinuxบนirc.freenode.net

นี่คือคำถามที่พบบ่อยอย่างรวดเร็ว

2) จากhttp://www.osnews.com/comments/3731

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


2
มันถูกอ้างสิทธิ์ที่นี่เช่นกัน ในขณะที่มันเป็นไปได้ในทางทฤษฎีแน่นอนมันดูยากสำหรับฉัน (ยกเว้นคุณ จำกัด ผู้ใช้รูทมากจนไม่สามารถทำอะไรที่เป็นประโยชน์ได้) การเขียนกฎ SELinux ที่ทำในสิ่งที่คุณตั้งใจทำนั้นเป็นเรื่องยากในกรณีที่ดีที่สุด
Gilles 'หยุดความชั่วร้าย'

4
ด้วยเคอร์เนลล่าสุดผู้ใช้ที่ไม่ใช่รูทสามารถสร้างเนมสเปซที่พวกเขามี UID 0 เนื่องจากพวกเขาไม่ใช่ UID 0 ในเนมสเปซระดับบนสุดพวกเขาไม่สามารถทำอันตรายต่อระบบได้ พวกเขาไม่มีโอกาสได้รับอันตรายจากภายในซึ่งแตกต่างจากแนวทางของ SELinux ที่ซึ่งโอกาสดังกล่าวจะต้องถูกกำจัดไป ดูที่เคอร์เนล: การสนับสนุนเนมสเปซและแยกบัญชีทั้งสองโดยไม่ต้องติดตั้งระบบปฏิบัติการแยกต่างหาก?
Gilles 'หยุดความชั่วร้าย'

ขึ้นอยู่กับไดรเวอร์กราฟฟิกของคุณว่าปลอดภัยหรือไม่
โจชัว

คำตอบ:


17

ความจริง: ใช่ SELinux สามารถ จำกัด ผู้ใช้รูทได้

สิ่งนี้เป็นไปได้เพราะ SELinux ไม่สนใจจริง ๆ เกี่ยวกับผู้ใช้ Unix ปัจจุบัน: ทั้งหมดที่เห็นคือข้อมูลเมตาเพิ่มเติมที่เรียกว่าบริบท (ซึ่งรวมถึงท่ามกลางเขตข้อมูลอื่นเขตข้อมูลโดเมน ) และที่ให้ SELinux ตัดสินใจว่าการดำเนินการที่ร้องขอนั้น ไม่.

สิ่งหนึ่งที่มักเกิดขึ้นในขณะที่ผู้ใช้รูทจะถูกแมปใน SELinux ในฐานะผู้ใช้รูท Unix ที่รันทั้งโดเมนunconfined_tหรือsysadm_tSELinux มันเป็นผู้ใช้รูตแบบดั้งเดิมที่มีพลังเต็มรูปแบบ

อย่างไรก็ตามหนึ่งสามารถติดตั้งระบบของเขาที่จะวางไข่เปลือกหอย (ฉันหมายถึงราก Unix ผู้ใช้เปลือกหอย) เรียกใช้user_tโดเมน SELinux ผู้ใช้ที่ จำกัด ตามนโยบายของ SELinux เชลล์ดังกล่าวจะไม่แตกต่างจากเชลล์ผู้ใช้ที่ จำกัด อื่น ๆ และจะไม่มีสิทธิ์พิเศษในระบบจึง จำกัด ผู้ใช้รูทอย่างมีประสิทธิภาพ

Appart จากมุมมองของการทดลองการทำสิ่งต่าง ๆ อย่างแท้จริงนั้นไร้ประโยชน์ ตัวอย่างคลาสสิกจะเป็นผู้ดูแลระบบฐานข้อมูลที่ต้องสามารถหยุด / เริ่ม daemons ฐานข้อมูลแก้ไขไฟล์การกำหนดค่า ฯลฯ หากไม่มี SELinux การกระทำเหล่านี้จะทำให้ผู้ใช้เลื่อนระดับไปสู่สิทธิ์ของรูทsudoตัวอย่างเช่นบรรทัดคำสั่งผ่านเครื่องมืออย่างไรก็ตามแม้อาจมีแนวโน้มที่จะรั่วไหล)

ขอบคุณ SELinux เราสามารถให้รูทเชลล์ของแท้แก่ผู้ใช้รายนี้ได้ แต่แทนที่จะใช้unconfined_tหรือsysadm_tโดเมนก็จะรันdbadm_tโดเมน ซึ่งหมายความว่าเขาจะมีสิทธิ์มากกว่าผู้ใช้ที่ถูก จำกัด แต่สิทธิ์ใหม่เหล่านี้จะถูก จำกัด เฉพาะสิ่งที่จำเป็นในการดูแลเซิร์ฟเวอร์ฐานข้อมูล: ผู้ใช้นี้จะไม่สามารถยุ่งเกี่ยวกับบริการอื่น ๆ ไฟล์หรือเรียกใช้คำสั่งการบริหารอื่น ๆ จำเป็นอย่างเคร่งครัดในการทำงานของเขา

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


1

ใช่มันเป็นไปได้ แต่ไม่ค่อยมีประโยชน์

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


ก่อนอื่นฉันเป็นคนมองโลกในแง่ร้ายอย่างที่คุณเป็น แต่เมื่อได้รับความรู้มากขึ้นดูเหมือนว่าไม่จำเป็นที่จะ "ไม่อนุญาตให้ผู้ใช้รูททำการดำเนินการใด ๆ เลย" ตรวจสอบคำตอบที่แก้ไขแล้วของฉันซึ่งมีลิงค์และข้อมูลเพื่อพิสูจน์แนวคิด น่าเสียดายที่มันไม่มีให้บริการแล้ว แต่ดูเหมือนว่าการใช้งานไม่ได้ จำกัด อย่างรุนแรง
MS Dousti

-5

เป็นไปได้ไหมที่จะทำให้กล่อง Linux แข็งตัวขึ้น (อาจมี SELinux) เช่นนั้นแม้แต่ผู้ใช้รูทไม่สามารถทำกิจกรรมที่เป็นอันตรายในกล่องนั้นได้

สิ่งนี้อาจฟังดูไม่ถูก แต่เป็นเรื่องง่าย: เปลี่ยน uid ของรูทผู้ใช้เป็นไม่ใช่ศูนย์ เพียงไปที่ / etc / passwd และ / etc / shadow, แก้ไข uid = 0 รายการที่มีอยู่จาก "root" เป็นอย่างอื่นแล้วเพิ่มบัญชีที่ชื่อว่า "root" ซึ่ง uid ไม่เป็นศูนย์และไม่ได้ใช้

มันบรรลุวัตถุประสงค์โดยไม่ต้อง นอกจากนี้ยังเป็นวิธีที่จะอ้างว่าใครก็ตามอาจมี "การเข้าถึงรูท" โดยไม่ต้องให้สิทธิ์พิเศษที่เพิ่มขึ้น


3
ใช่แล้ว แต่rootผู้ใช้ไม่ใช่ผู้ใช้รูทจริง ๆ คำถามกำลังถามว่าผู้ใช้ขั้นสูงจริง ๆ สามารถถูก จำกัด ได้ไหม
terdon

ฟังดูอันตราย - ยกเว้นว่าคุณสร้างบัญชีอื่นด้วย uid 0 แน่นอน แต่นั่นจะเหมือนกับการเปลี่ยนชื่อรูทและใช้ชื่อ "รูท" ซ้ำ
Volker Siegel

คำถามหมายถึง "root" เท่านั้นซึ่งไม่จำเป็นต้องเทียบเท่ากับผู้ใช้ระดับสูงเช่น uid = 0 ในโอกาสที่หายากนี่คือความแตกต่างที่มีประโยชน์
Otheus

2
อย่างไรก็ตามบริบททำให้เห็นได้ชัดว่า OP กำลังถามว่าผู้ใช้ขั้นสูงหรือไม่และมีผู้ใช้ที่สุ่มซึ่งมีชื่อผู้ใช้rootสามารถถูก จำกัด ด้วยวิธีดังกล่าว
terdon

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