ID ผู้ใช้ที่แท้จริงและมีประสิทธิภาพทำงานอย่างไร


13

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

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

เมื่อคุณรันโปรแกรมด้วย setuid หมายความว่าจริง ๆ แล้วเมื่อผู้ใช้ที่มีประสิทธิภาพคือรูท แต่ id ผู้ใช้จริงยังคงเป็นชื่อของคุณ

คำตอบ:


13

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

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


ดังนั้นในกรณีที่ฉันเปิดเชลล์การตั้งค่า uid เป็น 0 (ใช้ setreuid) เพื่อให้ uid ที่มีประสิทธิภาพจะเป็นรูท แต่ uid ที่แท้จริงยังคงเป็นฉันอยู่ เนื่องจากฉันไม่คิดว่าเชลล์มีบางสิ่งบางอย่างที่สร้างขึ้นซึ่งป้องกันไม่ให้ฉันหมายความว่าฉันได้เข้าถึงทั้งระบบแล้วหรือไม่
starcorn

ฉันสงสัยว่าในบริบทของเทคนิคการโจมตีแบบกองซ้อน จุดที่แฮ็กเกอร์ประสงค์ร้ายเปิดเชลล์ด้วยระดับผู้ใช้ระดับสูง
starcorn

@starcron: ใช่ ในความเป็นจริงการโจมตีอาจแสดงให้เห็นโดยการแสดงวิธีใช้การโจมตีนั้นเพื่อสร้างเชลล์รูท setuid
David Schwartz

2

คุณได้รับอนุญาตให้เปลี่ยนเฉพาะรหัสผ่านของคุณที่ตรวจสอบว่ามี ID ผู้ใช้ที่มีประสิทธิภาพของรูทเพราะในเวลาที่เปลี่ยนรหัสผ่าน ID ผู้ใช้จริงจะถูกตรวจสอบไม่ใช่รหัสผู้ใช้ที่มีประสิทธิภาพ คุณสามารถเปลี่ยนรหัสผู้ใช้ที่มีประสิทธิภาพเท่านั้นและไม่ใช่รหัสผู้ใช้จริง
ผู้ใช้ root เท่านั้นที่สามารถเปลี่ยน id ผู้ใช้จริงเพื่อรันโปรแกรมในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษ ID ผู้ใช้จริงไม่สามารถเปลี่ยนแปลงได้เนื่องจากมีการตั้งค่าเมื่อเริ่มเซสชัน
นั่นเป็นเหตุผลที่สามารถเปลี่ยนรหัสผ่านของคุณได้เท่านั้นเนื่องจากรหัสผู้ใช้จริงจะไม่เปลี่ยนแปลง (เนื่องจากยังไม่ใช่รหัสของคุณ)


0

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

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

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

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


0

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

เนื่องจากคุณไม่สามารถเปลี่ยนรหัสผู้ใช้จริงของคุณได้แม้จะเรียกใช้โปรแกรม set-uid โปรแกรมจึงสามารถใช้เพื่อรักษาความปลอดภัยได้ ระบบปฏิบัติการปล่อยการรักษาความปลอดภัยให้กับโปรแกรมรูทการตั้งค่า uid

หมายเหตุ: โปรแกรม set uid root สามารถเปลี่ยน id ผู้ใช้จริง (แต่นี่ไม่ได้ใช้ในกรณีใช้งานนี้)

คำเตือน: รูท uid ที่ตั้งไว้ถือว่าเป็นอันตราย (ดีน้อยกว่าอุดมคติ) วันนี้เราควรใช้ความสามารถ (ดูอะไรคือวิธีที่แตกต่างกันในการตั้งค่าการอนุญาตไฟล์ ฯลฯ ใน gnu / linuxและhttp://man7.org/linux/man-pages/man7/capabilities.7.html )

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