chown ลบ setuid bit: bug หรือคุณสมบัติ?


14

ขั้นตอนในการทำซ้ำ:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

ทดสอบกับ Debian squeeze และ Ubuntu 12.04


ทำเช่นนั้นกับ Fedora 17 ด้วย
BenjiWiebe

คำตอบ:


17

ไม่ใช่ข้อผิดพลาดตามเอกสาร chown:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.

ขอบคุณ jlliagre ฉันไม่เคยรู้จักinfo coreutilsมาก่อน ฉันแค่อ่าน man-page และค้นหาเว็บ
Germar

12

นี่คือการออกแบบและมันเป็นพฤติกรรมมาตรฐาน การอ้างอิงมาตรฐาน POSIX :

ยกเว้นว่า chown ถูกเรียกใช้โดยกระบวนการที่มีสิทธิ์ที่เหมาะสมบิต set-user-ID และ set-group-ID ของไฟล์ปกติจะถูกล้างเมื่อสำเร็จแล้ว บิต set-user-ID และ set-group-ID ของไฟล์ประเภทอื่นอาจถูกล้าง

( sคือ setuid (หรือ setgid ในคอลัมน์กลุ่ม) ไม่เหนียวเหนอะ)

พฤติกรรมนี้ตามหลังการเรียกระบบพื้นฐาน (ยกเว้นว่าในบางระบบบิต setxid จะถูกล้างสำหรับไฟล์ที่ปฏิบัติการได้เท่านั้น)

เหตุผลในการลบ setuid บิตคือการเปลี่ยนเจ้าของยังเปลี่ยนว่าผู้ใช้รายใดจะเป็นรหัสผู้ใช้ที่มีประสิทธิภาพของกระบวนการ โดยเฉพาะอย่างยิ่งในระบบที่ผู้ใช้สามารถแจกจ่ายไฟล์ได้cp /bin/sh foo; chmod u+s foo; chown joe fooจะสร้างไฟล์ปฏิบัติการที่เป็นของ joe ซึ่งเป็นช่องโหว่ความปลอดภัยขนาดใหญ่


การ upvoting สำหรับ nitpick! SUID / SGID ไม่ใช่บิต "เหนียว"!
จิมเดนนิส

จุดที่ดีเกี่ยวกับผลกระทบด้านความปลอดภัยในการรักษา SUID / SGID ฉันใส่ใจพฤติกรรมจนกระทั่งอ่านประโยคนั้น ฉันจะเพิ่ม แต่ฉันไม่เคยเห็น chown ไม่ได้ล้างบิตแม้เมื่อทำงานเป็นราก ฉันสงสัยว่า "สิทธิพิเศษที่เหมาะสม" จะหมายถึงอะไร
vastlysuperiorman

1
@vastlysuperiorman บนแพลตฟอร์ม Unix แบบคลาสสิค“ สิทธิ์ที่เหมาะสม” หมายถึง ID ผู้ใช้ 0 แต่ POSIX อนุญาตให้ระบบกำหนดนโยบายความปลอดภัยของตนเอง ตัวอย่างเช่นสำหรับการดำเนินการหลายอย่างบน Linux จะมีการใช้“ สิทธิ์ที่เหมาะสม” เป็นความสามารถ (ซึ่งรูทจะได้รับโดยปริยาย) ในกรณีนี้ห้ามระงับบิต setxid ที่ chown โดยไม่คำนึงถึงสิทธิพิเศษเช่นส่วนใหญ่หากไม่ใช่ตัวแปร Unix ทั้งหมด แต่เลเยอร์ POSIX บน Windows อาจทำงานแตกต่างกัน
Gilles 'หยุดความชั่วร้าย' ใน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.