ฉันสามารถสร้าง * super * super-user เพื่อที่ฉันจะได้มีผู้ใช้ที่สามารถปฏิเสธการรูทได้หรือไม่?


34

ฉันคิดว่าอาจเป็นประโยชน์ที่จะมีผู้ใช้ที่มีสิทธิ์สูงกว่าผู้ใช้รูท

คุณจะเห็นว่าฉันต้องการเก็บกิจกรรมทั้งหมดและสิทธิ์ผู้ใช้รูทที่มีอยู่เกือบทั้งหมดอย่างที่เป็นอยู่ในตอนนี้

อย่างไรก็ตามฉันต้องการความสามารถในการปฏิเสธสิทธิ์ในการรูทกรณีที่แยกได้เป็นกรณี ๆ ไป

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

เนื่องจากการอัปเดต apt-get นั้นดำเนินการโดยรูทหรือด้วยสิทธิ์ sudo apt-get จึงมีความสามารถในการแทนที่ไฟล์ที่ไม่ต้องการในระหว่างการอัพเดต

หากฉันสามารถปฏิเสธสิทธิพิเศษเหล่านี้ให้กับไฟล์เหล่านี้ได้ฉันสามารถกำหนดให้เป็นลิงค์ไปยัง/dev/nullหรืออาจมีไฟล์ตัวยึดตำแหน่งว่างที่อาจมีสิทธิ์ที่จะปฏิเสธไม่ให้แทนที่ไฟล์ในระหว่างการอัปเดต

นอกจากนี้ฉันไม่สามารถช่วยได้ แต่ได้รับการเตือนเกี่ยวกับบรรทัดที่ถูกกล่าวในการสัมภาษณ์กับหนึ่งในผู้สร้างอูบุนตูเมื่อชายคนนั้นพูดบางอย่างเกี่ยวกับวิธีที่ผู้ใช้เชื่อถือ "us" (อ้างอิงจาก Ubuntu devs) "เพราะเรามีราก "ซึ่งเป็นการอ้างอิงถึงวิธีการอัปเดตระบบด้วยการอนุญาตรูท

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

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

โดยทั่วไปดูเหมือนว่าควรมีวิธีที่จะมีผู้ใช้ super super ซึ่งจะได้รับอนุญาตนอกเหนือจากระบบโดยเพียงหนึ่งองศา


หมายเหตุ: แม้ว่าฉันรู้สึกว่าคำตอบที่ยอมรับนั้นตรงกับเกณฑ์มากที่สุด แต่ฉันชอบคำตอบของ @CR ด้วย

ฉันต้องการสร้างผู้ใช้จริงบนต้นไม้ (ฉัน) แต่ฉันเดาว่าฉันจะต้องนั่งลงวันหนึ่งเมื่อฉันมีเวลาคิดออก

นอกจากนี้ฉันไม่ได้พยายามเลือกบน Ubuntu ที่นี่ ฉันจะไม่ใช้มันเป็น distro หลักของฉันถ้าฉันรู้สึกเชิงลบเกี่ยวกับเรื่องนี้


4
คุณกำลังพูดถึงไฟล์ประเภทใดและทำไม? " ป้องกันไฟล์ที่ไม่ต้องการบางไฟล์จากการติดตั้ง _" แนะนำไฟล์ที่ไม่มีอยู่ (ปกติ) และคุณต้องการหยุดการทำงานดังกล่าว แต่ "_hat จะปฏิเสธไม่ให้แทนที่ไฟล์ในระหว่างการอัปเดต " แนะนำไฟล์ที่มีอยู่แล้ว (พร้อมเนื้อหาที่เป็นที่ต้องการ) และคุณไม่ต้องการเวอร์ชันใหม่
TripeHound

6
โปรดระวังว่าวิธีการใด ๆ ที่ป้องกันaptการเขียนทับไฟล์อาจทำให้เกิดข้อผิดพลาดซึ่งเป็นการยกเลิกกระบวนการอัพเดต aptจะปฏิเสธที่จะทำการอัปเดตหรือการติดตั้งใด ๆ จนกว่า "ปัญหา" จะได้รับการแก้ไข
Dubu

6
"เพียงแค่ปรับเปลี่ยนขั้นตอนการติดตั้งเพื่อแก้ไขปัญหานี้ไม่ใช่สิ่งที่ฉันสนใจที่นี่" อาจเป็นเช่นนั้น แต่โดยทั่วไปเป็นวิธีที่ถูกต้องในการแก้ปัญหาตามที่ระบุไว้ การ จำกัด รูทสามารถทำได้ (อย่างเป็นทางการ root-in-userland ไม่ได้เข้าถึงในระดับเดียวกับโหมดเคอร์เนล) และมีระบบสำหรับการทำให้สำเร็จ แต่มันขัดกับปรัชญา Unix และหลักการรักษาความปลอดภัยขั้นพื้นฐาน โดยทั่วไปแล้วเมื่อใครบางคนมีรูต "บางส่วน" มันเป็นเรื่องยากมากที่จะทำการปิดรายการทุกอย่างที่อาจใช้เพื่อให้ได้รูท "เต็ม" ต้องการให้รูทไปยังโค้ดที่เชื่อถือได้เท่านั้น
Kevin

8
@mchid: root คือการควบคุมเต็มรูปแบบ นั่นคือจุดรวมของมัน เพื่อให้ไม่สามารถควบคุมได้อย่างสมบูรณ์คุณต้องปฏิเสธหลายสิ่งหลายอย่างที่ดูเหมือนว่าจะไม่รูทอีกต่อไป (เช่นไม่มีการติดตั้งโมดูลเคอร์เนลไม่มีการติดตั้งอุปกรณ์โดยพลการเป็นต้น) หากคุณไม่ต้องการเรียกใช้สิ่งต่าง ๆ ในฐานะรูทดังนั้นอย่าเรียกใช้มันในฐานะรูท แต่ควรแจกความสามารถ (ยกเว้นสำหรับทุกคนที่เทียบเท่ากับรูทไม่ต้องกังวลกับสิ่งเหล่านั้น) หรือเรียกใช้ daemon อย่างpolkitdที่ดำเนินการรูทในนามของกระบวนการที่ไม่ใช่รูท
เควิน

4
@mchid: นั่นเป็นปัญหา: มีหลายวิธีที่โปรแกรมจะหลีกเลี่ยงข้อ จำกัด ของคุณ หากคุณไม่ได้ขึ้นบัญชีดำทุกวิธีเหล่านี้โปรแกรมใด ๆ ที่คุณรันในฐานะ "รูทที่ จำกัด " จะยังคงสามารถรูทแบบเต็มเมื่อใดก็ตามที่ต้องการ ดังนั้นโครงการทั้งหมดของคุณไม่มีอะไรมากไปกว่าโรงละครความปลอดภัย
เควิน

คำตอบ:


83

"ผู้ใช้" ที่คุณต้องการเรียกว่าโมดูลความปลอดภัยของ LSM: Linux รู้จักมากที่สุดคือ SELinux และ AppArmor

ด้วยวิธีนี้คุณสามารถป้องกันไบนารีบางอย่าง (และกระบวนการลูกของพวกเขา) จากการทำสิ่งบางอย่าง (แม้ว่า UID ของพวกเขาคือroot) แต่คุณอาจอนุญาตให้การดำเนินการเหล่านี้gettyและกระบวนการลูกของมันเพื่อให้คุณสามารถดำเนินการด้วยตนเอง


2
แต่ถ้า UID ของพวกเขาเป็นรูทพวกเขาไม่สามารถเปลี่ยนการอนุญาต selinux ที่ป้องกันไม่ให้พวกเขาเข้าถึงได้ตั้งแต่แรก?
อยากรู้อยากเห็น _cat

11
@curious_cat: ใช่แน่นอนคุณต้องปฏิเสธ "การ จำกัด ราก" ในการประมวลผลความสามารถในการเปลี่ยน / เพิ่มการอนุญาตของตัวเอง! ผู้คนที่เขียน SELinux คิดถึงสิ่งนั้นอยู่แล้ว ...
Peter Cordes

8
@curious_cat คุณสามารถกำหนดค่า LSMs เพื่อให้เป็นไปไม่ได้ที่จะเปลี่ยนการกำหนดค่าในเวลาทำงาน คุณต้องรีบู๊ตและกำหนดพารามิเตอร์ของเคอร์เนลก่อน
Hauke ​​Laging

5
@Joshua หากสำเนา apt-get กำลังใช้ Rowhammer แสดงว่าคุณมีปัญหาใหญ่กว่าที่คุณต้องกังวล
Draconis

3
@corsiKa ขั้นแรกคุณต้องการ จำกัด คนที่สามารถบูตเครื่องให้กับผู้ที่อยู่ในเครื่องได้จริงเพราะระบบมีความเสี่ยงในขณะที่กำลังบู๊ต การเรียกใช้การรีบูตผ่านเน็ตเป็นเรื่องปกติ แต่การอนุญาตให้ควบคุมเนื่องจากไม่ได้บู๊ต ประการที่สองกฎความปลอดภัยของคอมพิวเตอร์คือคุณไม่สามารถทำอะไรได้เลยเมื่อผู้โจมตีมีการเข้าถึงทางกายภาพเพราะแล้วพวกเขาอาจจุ่มทุกอย่างใน LN2 / rewire ฮาร์ดแวร์ / etc ดังนั้นใช่คนที่สามารถเปลี่ยนการบูตของเครื่องได้โดยทั่วไปถือว่ามีการ "ชนะ" เครื่อง
HTNW

51

คุณเข้าใจผิดแนวคิดของrootผู้ใช้

ในภาษาอังกฤษธรรมดาrootอยู่ที่ "ด้านบนของต้นไม้"

ถ้าคุณตัดสินใจวันหนึ่งจะมี "ผู้ใช้ super super" และจากนั้นในเดือนถัดไปเป็น "ผู้ใช้ super super super" (!) ไกลแค่ไหนที่ "ขึ้น" ต้นไม้ที่คุณต้องการจะไป? คุณจะสลับสิทธิ์และลำดับชั้นทั้งหมดเพื่อให้ทำงานได้อย่างไร ใครอยู่ด้านบนเสมอ rootใครบางคนจะต้องมีที่ด้านบนและก็ ตอนจบของเรื่อง.

โซลูชันที่ให้ที่นี่ - รวมถึง AppArmor และ SELinux - อย่าเปลี่ยนแปลงสิ่งนี้จริงๆ พวกเขาเพียงแค่อนุญาตให้ควบคุมธัญพืชrootและกระบวนการอย่างละเอียดยิ่งขึ้น

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

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

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


ฉันจะอยู่ที่จุดสูงสุดไม่ใช่รากท้ายเรื่อง เนื่องจากไม่มีระดับที่สูงขึ้นในลำดับชั้นของผู้ใช้เป็นเหตุผลที่แน่นอนฉันต้องการสร้างผู้ใช้ที่สูงขึ้น
mchid

แม้ว่านั่นเป็นสิ่งที่ฉันต้องการ: ควบคุมสิทธิ์การใช้งานรูทและกระบวนการต่าง ๆ เพื่อให้ฉันสามารถปฏิเสธการอนุญาตให้รูทได้ หากฉันสามารถปฏิเสธการอนุญาตให้รูทได้โดยไม่ต้องสร้างผู้ใช้ใหม่ด้วย SELinux หรือ AppArmor แล้วฉันเดาว่าฉันไม่ต้องการผู้ใช้ใหม่ ฉันต้องการการควบคุมเต็มที่ควบคุมได้ดีกว่ารูท
mchid

16
คุณไม่สามารถมีผู้ใช้ที่มีสิทธิ์ "มากกว่า" rootกว่า นั่นคือปัญหาทั้งหมด ผู้ใช้ที่คุณต้องการสร้างนั้นเป็นผู้ใช้รูทเป็นหลัก คุณต้องเข้าหาวิธีนี้ในทางอื่นเช่นการสร้างผู้ใช้ที่มีrootสิทธิ์แล้วปฏิเสธบางอย่างที่คุณต้องการการควบคุมที่ดียิ่งขึ้น สิ่งที่คุณถาม ("ควบคุมได้ดีกว่ารูท") เป็นไปไม่ได้หรือแม้แต่บางอย่าง!
แอนดี้

@mchid ดังนั้นสิ่งที่คุณต้องการทำจริงๆคือเปลี่ยนชื่อผู้ใช้รูทปัจจุบันเป็น mchid สร้างผู้ใช้ใหม่ที่เรียกว่ารูทและทำให้ apt-get et al ใช้ผู้ใช้ใหม่ที่ไม่ใช่รูทของคุณ
Odalrick

ในบางระบบrootไม่ได้รับอนุญาตให้เข้าถึงฮาร์ดแวร์โดยตรง หากคุณปิดใช้งานการโหลดโมดูลเคอร์เนลคุณสามารถป้องกันไม่ให้รูทล็อกจากการควบคุมโดยรวมกับฮาร์ดแวร์ ( /dev/memและสิ่งต่างๆเช่นนั้น) ไม่เกี่ยวข้องกับการอนุญาตระบบไฟล์เนื่องจากคุณจะไม่ใช้ apt-get ที่พูดคุยกับคอนโทรลเลอร์ SATA หรือ NVMe ของคุณโดยตรง ... แต่ในทางเทคนิคมีสถานะ "สิทธิ์มากกว่าroot" และเรียกว่าโหมดเคอร์เนล : P
Peter Cordes

26

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

chattr +i <file>

แม้แต่รูทจะสามารถทำสิ่งใด ๆ กับพวกเขาได้ยกเว้นว่าจะลบสถานะออกไป นอกจากนี้ยังเป็นไปได้ที่จะใช้ระบบ container / namespace เพื่อป้องกันการเข้าถึงรูท แต่ดูเหมือนว่า overkill สำหรับสิ่งที่คุณต้องการ


11
แต่รูทสามารถลบการตั้งค่าสถานะได้
sebasth

10
apt เช่นเดียวกับเกือบทุกอย่างจะไม่ใช้ chattr เพื่อลบแฟล็กนั้น
ซีอาร์

13
@sebasth: ถูกต้อง แต่สคริปต์การติดตั้ง Apt, dpkg และต่อแพ็คเกจจะไม่ (ตามปกติ) เปลี่ยนแอตทริบิวต์ของไฟล์ แต่พวกเขาจะล้มเหลวและบ่นเมื่อพวกเขาพยายามที่จะแก้ไขไฟล์ด้วยค่าสถานะไม่เปลี่ยนรูป
David Foerster

4
@TripeHound ดังนั้น OP ต้องการapt-getประสบความสำเร็จในการแทนที่ไฟล์ แต่ยังมีไฟล์นั้นอยู่เหมือนเดิม? มันค่อนข้างขัดแย้งกับที่ฉันกล้าพูด
Dmitry Grigoryev

3
@DmitryGrigoryev ดูเหมือนว่าพวกเขาต้องการที่apt-getจะคิดว่ามันประสบความสำเร็จ แต่ทิ้งไฟล์ไว้หนึ่งไฟล์หรือมากกว่านั้น พวกเขาไม่ได้บอกว่าไฟล์ใดหรือทำไม แต่อย่างที่คุณพูดค่อนข้างขัดแย้ง - และมีแนวโน้มที่จะ "พฤติกรรมแปลก ๆ " ในอนาคต
TripeHound

9
  • แทนที่จะมีผู้ใช้ระดับสูงพิเศษคุณสามารถ จำกัด การรูทได้ ดู อะไรคือวิธีที่แตกต่างในการตั้งค่าการอนุญาตไฟล์ ฯลฯ ใน gnu / linux

  • นอกจากนี้ยังมี AppArmor และ SELinux

  • และ / หรือกำหนดค่าsudoเพื่อที่คุณจะไม่ให้สิทธิ์แบบเต็มแก่ผู้ใช้ คุณสามารถตั้งค่าเพื่อให้ผู้ใช้สามารถเรียกใช้คำสั่งที่ตกลงไว้ล่วงหน้าเท่านั้นโดยมีอาร์กิวเมนต์ที่ตกลงล่วงหน้า

  • คุณยังสามารถใช้การจำลองเสมือนเพื่อ จำกัด การรูท:

    • cgroups, namespaces, chroot ฯลฯ (นักเทียบท่าทำสิ่งนี้)
    • Xen
    • Virtualbox
  • ดูเพิ่มเติมที่etckeeper: การแก้ไขเครื่องมือนี้จะควบคุม/etcไดเรกทอรีและซิงโครไนซ์กับ apt ตามค่าเริ่มต้นจะไม่ปลอดภัยการติดตั้งที่เป็นอันตรายอาจก่อวินาศกรรมได้ แต่คุณสามารถทำให้มันผลักดันการเปลี่ยนแปลงไปยังแหล่งเก็บข้อมูลสำรองที่มีไฟ

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


ที่เก็บข้อมูลสำรองแบบไฟร์วอลล์อาจอยู่บนเครื่องอื่นบนอินเทอร์เน็ตหรือเครื่องเสมือนอื่น (หรือโฮสต์ของเครื่องเสมือน)


8

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

ขึ้นอยู่กับว่าคุณจะวางข้อ จำกัด มากน้อยเพียงใดสคริปต์การติดตั้งอาจถูกคาดหวังให้หยุดการทำงาน

สำหรับวิธี จำกัด แอปพลิเคชันและผู้ใช้คุณสามารถเขียนนโยบาย AppArmor หรือนโยบาย SELinux นโยบายดังกล่าวซึ่งจะได้รับการสนับสนุนมากขึ้นนั้นขึ้นอยู่กับการกระจายของคุณ: Debian based มีการรองรับ AppArmor ที่ดีขึ้นในขณะที่การแจกจ่ายแบบอิง Fedora / RHEL เปิดใช้งาน SELinux ตามค่าเริ่มต้น

ทั้ง AppArmor และ SELinux ทำงานกับนโยบายบัญชีขาวซึ่งมีกฎที่อนุญาต (หรือปฏิเสธ) การกระทำที่เฉพาะเจาะจง นโยบายจะถูกนำไปใช้กับกระบวนการที่ผู้บริหารในทำนองเดียวกันผู้ใช้สามารถถูก จำกัด เมื่อนโยบายถูกนำไปใช้กับกระบวนการของพวกเขาเมื่อเข้าสู่ระบบ นโยบายความคิดที่ดีไม่สามารถหลีกเลี่ยงได้ (หากไม่พิจารณาข้อบกพร่องเคอร์เนล) กระบวนการที่ จำกัด ซึ่งทำงานในฐานะรูท (uid 0) ถูก จำกัด โดยนโยบายที่ตั้งค่าไว้และไม่สามารถเปลี่ยนแปลงได้เว้นแต่จะได้รับอนุญาตอย่างชัดเจนในนโยบาย

นโยบายภาษา AppArmor กำหนดกฎการปฏิเสธซึ่งสามารถนำมาใช้ในการสร้างนโยบายบัญชีดำ เป็นสถานที่ที่ดีที่จะเริ่มต้นด้วยการเป็น AppArmor AppArmor หน้าคน , วิกิพีเดีย/etc/apparmor.d/และกำลังมองหาการกำหนดค่าที่มีอยู่ในการกระจายของคุณใน

มากมาย SELinux การบริหารและการพัฒนาวัสดุที่มีอยู่ในSELinux วิกิพีเดีย นโยบายการอ้างอิงของ SELinux นั้นโฮสต์บน github


7

ฉันไม่อยากเชื่อเลยว่าจะไม่มีใครพูดถึงการปักหมุด ...

สองสามปีที่ผ่านมาไมโครซอฟท์เปิดตัวแพทช์ที่ทำลายเครื่อง Windows 10 จากการพูดคุยกับ Samba NT4 Domain Controllers เก่าของเรา เมื่อพบปัญหาเราตรึงแพ็คเกจ Samba เพื่อให้อยู่ในเวอร์ชันปัจจุบันและaptยังทำงานได้อย่างถูกต้อง

Debian Walkthroughเต็มอธิบายถึงกระบวนการได้ดี:

ใน/etc/apt/preferences(หรือภายใต้แฟ้มใหม่/etc/apt/preferences.d/), เพิ่มข้อความบางส่วนระบุว่าแพคเกจและรุ่น:

Package: samba
Pin: release v=3.6.6-6+deb7u7
Pin-Priority: 900

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

หมายเหตุ: คำตอบนี้สมมติว่าคุณมีปัญหา XY


ฉันได้ตอบปัญหา XY จำนวนมากด้วยตัวเองที่ Askubuntu อย่างไรก็ตาม apt เป็นเพียงตัวอย่างและสิ่งที่นำฉันไปสู่ความคิด ฉันสนใจในส่วนของ "พลังความเป็นไปได้และแบบสัมบูรณ์พลังงาน - อย่างแน่นอน" ของสิ่งทั้งหมด พลังที่สมบูรณ์และสมบูรณ์แบบเหนือระบบของฉันคือสิ่งที่ทำให้ฉันเข้าสู่ linux ตั้งแต่แรก การตระหนักว่าพลังของฉันไม่ได้หยั่งรากอย่างแน่นอนเสมอไปเป็นสิ่งที่ไม่มั่นคง ความคิดเกี่ยวกับพลังสัมบูรณ์นั้นล่อลวง
mchid

นอกจากนี้ฉันคิดว่ามันเป็นปัญหานิดหน่อย แต่ Y นี่คือ "ฉันจะปฏิเสธการอนุญาตให้รูตได้อย่างไรเมื่อรูทเป็น superuser?"
mchid

1
@mchid ไม่เกี่ยวกับการปฏิเสธการอนุญาตให้รูท แต่การปฏิเสธบางสิ่งให้กับโปรแกรมที่รันในฐานะรูท
John Keates

6

จริงๆแล้วมันค่อนข้างง่าย

รูทคือ "ผู้ใช้ super super" ของคุณ

สร้างบัญชีที่เรียกว่า "ผู้ดูแลระบบ" และให้สิทธิ์การใช้งานรูททั้งหมดแก่เขายกเว้นบัญชีที่คุณไม่ต้องการ

จากนั้นสร้างผู้ใช้ชื่อ bob และให้เขาเป็นผู้ดูแลระบบ โดยใช้ su หรือแม้แต่ sudo

ตอนนี้คุณมีผู้ใช้ปกติ (bob) ผู้ใช้ระดับสูงที่สามารถทำสิ่งต่าง ๆ ของผู้ดูแลระบบ (ผู้ดูแลระบบ) และผู้ใช้ระดับสูงพิเศษ (รูท)

หากคุณต้องการเปลี่ยนชื่อ "รูท" เป็นอย่างอื่นคุณสามารถทำได้ ในทางเทคนิคเฉพาะ id ผู้ใช้ (0) มีความสำคัญ


หากฉันมีผู้ใช้ปกติ (bob) ผู้ใช้ขั้นสูงที่สามารถทำสิ่งต่าง ๆ ของผู้ดูแลระบบ (ผู้ดูแลระบบ) และผู้ใช้ระดับสูงพิเศษ (รูท) จะไม่รูทยังคงทำสิ่งผู้ดูแลทั้งหมดด้วยกระบวนการพื้นหลัง cronjobs และ สิ่งอื่น ๆ ที่เป็นรหัสผู้ใช้ (0)?
mchid

ไม่ถ้าคุณไม่ต้องการให้พวกเขา บริการส่วนใหญ่ให้คุณเลือกสิ่งที่ผู้ใช้ทำงาน คุณสามารถตั้งค่าเพื่อให้ผู้ดูแลระบบเป็นหนึ่งในกระบวนการที่กำลังทำงานอยู่ มีข้อยกเว้นเล็กน้อย แต่ไม่มาก
coteyr

ฉันจะไม่ต้องผ่านกระบวนการเหล่านั้นทั้งหมดหรือไม่?
mchid

3
นั่นคือสิ่งที่เกิดขึ้นเมื่อคุณพยายามที่จะทำลายอนุสัญญามาตรฐาน ฉันคิดว่าคุณต้องเข้าใจความชำนาญและระบบการอนุญาตให้ดีขึ้นในสภาพแวดล้อม * nix
Shauna

2
ฉันเห็นด้วยกับ Shauna คุณดูเหมือนจะไม่มีความเข้าใจพื้นฐานเกี่ยวกับระบบการอนุญาต * nix มันทรงพลังมาก แต่มันไม่มีอะไรเหมือนหน้าต่าง
coteyr

3

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

คำถามจริงที่คุณต้องการถามคือ:

มีวิธีป้องกัน APT จากการติดตั้งไฟล์เฉพาะหรือไม่?

นั่นคือสิ่งที่แตกต่างอย่างสิ้นเชิงจากสิ่งที่คุณถามในหลายระดับ

ตอนนี้สำหรับคำถามนั้นฉันไม่แน่ใจ 100% แต่ฉันรู้ว่าตัวจัดการแพ็กเกจอื่น ๆ มีตัวเลือกในการป้องกันการติดตั้งไฟล์เฉพาะ (ตัวอย่างเช่นระบบ Portage ของ Gentoo มีตัวเลือกINSTALL_MASK=ซึ่งยอมรับเชลล์จริงๆ รูปแบบการจับคู่สไตล์ของสิ่งที่ไม่ได้ติดตั้ง) ฉันยินดีมากกว่าที่จะเดิมพันว่ามีตัวเลือกดังกล่าวสำหรับ APT (หรืออาจเป็น dpkg เอง)


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

dpkg-divert ทำสิ่งนี้: unix.stackexchange.com/a/157896/70847
mchid

1

วางสำเนาสำรองไว้ในที่ปลอดภัย หลังจากติดตั้ง / อัปเดตใด ๆ ให้แทนที่ไฟล์เฉพาะจากการสำรองข้อมูลนั้นทันที ดังนั้นจึงไม่มีข้อผิดพลาดในการขันการติดตั้ง แต่คุณยังคงกลับไฟล์ที่คุณต้องการเก็บไว้


1

ทำงานจากไดรฟ์ที่ติดตั้ง

โปรดทราบว่านี่เป็นคำตอบเชิงแนวคิดส่วนใหญ่ แต่ฉันคิดว่ามันควรจะทำงานและมีจิตวิญญาณกับสิ่งที่คุณต้องการบรรลุ

ให้ system X เป็นระบบการทำงานของคุณและ system Y เป็นระบบอื่นที่คุณควบคุม

  1. เมานต์ไดเร็กทอรีจาก Y เป็นไดรฟ์ใน X
  2. ตั้งค่าสิทธิ์ในลักษณะที่ผู้ใช้รูท X มีสิทธิ์ในทุกสิ่งในไดรฟ์ที่ติดตั้งนี้โดยมีข้อยกเว้นเล็กน้อย

ตอนนี้คุณมี 'รากการทำงาน' ซึ่งสามารถทำเกือบทุกอย่างและคุณมี 'รากสุดยอด' ของคุณซึ่งเป็นบัญชีรูทจริงของระบบ Y ซึ่งสามารถทำทุกอย่างได้อย่างแท้จริง


ฉันชอบความคิดนี้แม้ว่าฉันจะต้องการทำสิ่งนี้บนระบบที่ใช้งานอยู่
mchid

1

คุณสามารถเรียกใช้ไฮเปอร์ไวเซอร์ชนิดที่ 1 เช่นXen hypervisor และมีการโฮสต์ระบบปฏิบัติการปกติของคุณในฐานะแขกเสมือนจริง ไฮเปอร์ไวเซอร์ควบคุมเสมือนเกสต์ OS ที่ระดับ "ลึก" กว่ารูทเนื่องจากมีการควบคุมฮาร์ดแวร์ (เสมือน) ที่เกสต์เรียกใช้

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

ความรู้สึกของฉันว่าวิธีนี้อาจจะเกินความจริง


ไฮเปอร์ไวเซอร์ป้องกันผู้ใช้ที่มีสิทธิ์รูทจากการทำสิ่งที่พวกเขาต้องการทำอย่างไรในเกสต์วีอาร์
fpmurphy

คำตอบนี้เริ่มต้นได้ แต่หลังจากนั้นทางไวยากรณ์ก็จะหลงทาง (จากนั้นก็อ่านผิดทางหรืออย่างน้อยก็คลุมเครือ) ฉันแก้ไข
ctrl-alt-delor

1
@ fpmurphy1 ไฮเปอร์ไวเซอร์สามารถขอสายระบบใช้นโยบาย ฯลฯ เพื่อบังคับใช้ข้อ จำกัด โดยพลการบนผู้ใช้รูทหรือส่วนอื่น ๆ ของระบบปฏิบัติการเกสต์ บางทีคำตอบของฉันอาจไม่ดีเพราะนี่เป็นวิธีการทำงานที่มากเกินไปเว้นแต่คุณจะได้รับกรณีใช้งานจริงขององค์กรหรือบางสิ่งบางอย่าง ...
Nathan Smith

@ ctrl-alt-delor ขอบคุณสำหรับการแก้ไขของคุณ แต่ฉันไม่คิดว่าไวยากรณ์เป็นปัญหา ฉันชี้แจงสิ่งที่ฉันตั้งใจจะพูดแม้ว่า & ฉันขอขอบคุณข้อเสนอแนะที่ความคิดของฉันไม่ชัดเจนในตอนแรก
นาธานสมิ ธ

1
@ fpmurphy1 ภายในแขกที่คุณมีรูตแบบเต็ม อย่างไรก็ตามมันไม่เหมือนกับรูทบนโฮสต์ ดังนั้นมันจึงเป็นรูทที่น้อยกว่ารูทโฮสต์ นักเทียบท่าจะอนุญาตให้สิ่งต่าง ๆ มีการบูรณาการมากขึ้น แต่ก็ยังคงมีข้อ จำกัด ในการรูท
ctrl-alt-delor

1

ลองดูที่cgroupsและnamespaces ลินุกซ์เป็นวิธีทางเลือกของการบรรลุเป้าหมายประเภทนี้เช่นเดียวกับเครื่องมือขึ้นอยู่กับพวกเขาเช่นหางและLXD

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


0

ถอนการติดตั้ง sudo

วิธีการถอนการติดตั้งsudoและ symlink /bin/suไป/bin/false? เชื่อมโยงกับการทำให้แน่ใจว่าrootไม่สามารถเข้าสู่ระบบผ่านsshและคุณได้ล็อคระบบ

นั่นทำให้rootผู้ใช้ Super * Super และคนอื่น ๆ ด้อยกว่า

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


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

. . . คุณย่ากับคุณปู่นั้นเป็นทั้งพ่อและแม่ของพ่อและแม่ ผมอยากจะขอให้คุณปู่จะมาอาศัยอยู่ในระบบของฉันเพราะตอนนี้รากเป็นพ่อของบ้านและคุณปู่สามารถบอกพ่อว่าจะทำอย่างไรเพราะคุณปู่เป็นพ่อของพ่อ :)
mchid

ดูเหมือนว่าคุณได้เพิ่มผู้คนจำนวนมากด้วยพลัง sudo ปรับsudoersไฟล์เพื่อให้ผู้ใช้ที่เลือกเท่านั้นที่สามารถ sudo เพื่อคำสั่งที่เลือกไว้ล่วงหน้า
user176717

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

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