Setuid bit ดูเหมือนว่าจะไม่มีผลกับการทุบตี


14

ฉันกำลังทดลองอยู่เล็กน้อยและสังเกตเห็นบางสิ่งที่แปลก: ตั้งค่าบิต setuid บนสำเนาทุบตีที่ตั้งอยู่ที่/usr/bin/bash-testดูเหมือนจะไม่มีผล เมื่อฉันใช้งานอินสแตนซ์ของbash-testไดเรกทอรีบ้านของฉันไม่ได้ถูกตั้งค่าเป็น/rootและเมื่อฉันรันwhoamiคำสั่งจากbash-testชื่อผู้ใช้ของฉันไม่ได้รายงานว่าเป็นการrootแนะนำว่าbash-testไม่ทำงานเป็นราก อย่างไรก็ตามหากฉันตั้งค่า setuid bit whoamiฉันจะรายงานว่าเป็นรูทในเชลล์ใด ๆ ตามที่คาดไว้

ฉันลองตั้งค่า setuid bit /usr/bin/bashเช่นกันและสังเกตพฤติกรรมเดียวกัน

ทำไมทุบตีไม่ทำงานเหมือนรูทเมื่อฉันตั้งค่า setuid bit บนมัน? เซลิลักซ์มีส่วนเกี่ยวข้องกับเรื่องนี้หรือไม่?

linux  bash  setuid 

1
คุณจะพบข้อมูลเพิ่มเติมเกี่ยวกับ setuid ในนี้คำถาม
Anthon

ดูที่Setuid Demystifiedโดย Chen, Dean และ Wagner มันเป็นกระดาษเก่า แต่ก็ยังใช้งานได้อยู่

คำตอบ:


21

คำอธิบายนั้นค่อนข้างน่ารำคาญ: การทุบตีเองนั้นเป็นเหตุผล straceคือเพื่อนของเรา (ต้องเป็นรูท SUID เพื่อให้ทำงานได้):

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bash ตรวจพบว่าเริ่มต้นรูทของ SUID (UID! = EUID) และใช้พลังรากของมันเพื่อโยนพลังงานนี้ทิ้งการรีเซ็ต EUID เป็น UID และต่อมาแม้แต่ FSUID ก็ต้องแน่ใจว่า ... :

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

ในที่สุด: ไม่มีโอกาส คุณต้องเริ่มทุบตีกับรูท UID (เช่น sudo)

แก้ไข 1

หน้าคนบอกว่า:

หากเชลล์เริ่มต้นด้วย id ผู้ใช้ที่มีประสิทธิภาพ (กลุ่ม) ไม่เท่ากับ id ผู้ใช้จริง (กลุ่ม) และไม่ได้ระบุตัวเลือก -p จะไม่มีการอ่านไฟล์เริ่มต้นฟังก์ชันเชลล์ไม่ได้รับสืบทอดจากสภาพแวดล้อม SHELLOPTS ตัวแปร BASHOPTS, CDPATH และ GLOBIGNORE หากปรากฏในสภาพแวดล้อมจะถูกละเว้นและรหัสผู้ใช้ที่มีประสิทธิภาพจะถูกตั้งค่าเป็นรหัสผู้ใช้จริง หากระบุอ็อพชัน -p เมื่อเรียกใช้งานลักษณะการเริ่มต้นจะเหมือนกัน แต่ ID ผู้ใช้ที่มีประสิทธิภาพจะไม่ถูกรีเซ็ต

แต่มันไม่ได้ผลสำหรับฉัน -pไม่ได้กล่าวถึงในตัวเลือกการเริ่มต้น ฉันยังลอง--posix; ไม่ทำงานเช่นกัน


2

ในกรณีใด ๆ โปรแกรมราก SUID ไม่ได้ทำงานกับสภาพแวดล้อมของราก ( $HOMEการกำหนดค่าสำหรับเปลือกอะไรก็ตาม) ก็ทำงานกับรากอำนาจ (คือมันสามารถลบไฟล์ใด ๆ เปลี่ยนสิทธิ์ใด ๆ ฯลฯ )

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