ทำไมผู้ใช้ที่ไม่มีสิทธิพิเศษไม่สามารถเปลี่ยนความเป็นเจ้าของไฟล์ได้


15

จาก chown (2):

เฉพาะกระบวนการที่ได้รับสิทธิพิเศษ (Linux: หนึ่งที่มีความสามารถ CAP_CHOWN) อาจเปลี่ยนเจ้าของไฟล์ เจ้าของไฟล์อาจเปลี่ยนกลุ่มของไฟล์เป็นกลุ่มใดก็ได้ที่เจ้าของนั้นเป็นสมาชิก กระบวนการพิเศษ (Linux: with CAP_CHOWN) อาจเปลี่ยนกลุ่มโดยไม่ได้ตั้งใจ

อะไรคือเหตุผลของข้อ จำกัด นี้? ทำไมผู้ใช้ที่ไม่มีสิทธิพิเศษไม่สามารถเปลี่ยนความเป็นเจ้าของไฟล์ของไฟล์ที่เป็นเจ้าของ (เช่น no / etc / shadow)

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted

คำตอบ:


27

ด้วยการอนุญาตให้ผู้ใช้ "แจกไฟล์" ให้คุณใช้งานฟีเจอร์ต่าง ๆ ของระบบปฏิบัติการ เช่น:

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...

8

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

ฉันคิดว่าการทำงานนี้เกิดขึ้นได้หรือไม่พฤติกรรมของยูนิกซ์ของคุณตาม 'System-V' (AT&T) หรือ Berkeley's unix (BSD) ...

สำหรับปัญหาด้านความปลอดภัยอื่น ๆ ที่กล่าวถึง:

  • การแอบอ้างเป็นผู้ใช้รายอื่น (หรือแม้กระทั่งรูท) ผ่าน setuid

    ไม่ใช่ปัญหา: การเปลี่ยน 'เจ้าของ' ล้างบิต 'setXid' ใด ๆ (U / G)

  • มีสิทธิ์ไม่เพียงพอที่จะยกเลิกการ chown ที่ผิดพลาด

    ไม่ใช่ 'ความเสี่ยงด้านความปลอดภัย' แต่อาจเป็นระบบที่อนุญาตให้ผู้ใช้เปลี่ยนคุณสามารถเปลี่ยนกลับหากอยู่ในไดเรกทอรีที่คุณเป็นเจ้าของและอื่น ๆ ที่ชาญฉลาด: 'ระวัง'!

  • ทำให้ปรากฏว่ามีคนอื่นสร้างไฟล์ที่กำหนด

    มันจะยังคงอยู่ในไดเรกทอรีที่คุณเขียนได้ นั่นคือคุณไม่สามารถย้ายมันไปที่ homedir ของพวกเขาได้เว้นแต่จะมีการเปิดให้เขียนถึงกลุ่มของคุณหรือทั้งหมด (หรือคุณโดยเฉพาะถ้ามี ACL อยู่)

  • การตั้งค่างาน cron เพื่อให้ทำงานในบัญชีของผู้ใช้รายอื่น

    อีกครั้งจะไม่ทำงาน - เนื่องจาก crondirs เป็นเจ้าของโดยผู้ใช้และไม่ได้กำหนดให้ผู้ใช้รายอื่นสามารถอ่านได้

  • หากใครก็ตามสามารถเปลี่ยนความเป็นเจ้าของได้ทุกคนสามารถเปลี่ยนสิทธิ์ในการเข้าถึงไฟล์ใด ๆ ในระบบ

    ไม่: เฉพาะเมื่อผู้ใช้ 'เป็นเจ้าของ' ไดเรกทอรีที่มีไฟล์นั้น นั่นคือฉันสามารถให้ไฟล์ชื่อ 'passwd' เพื่อรูท แต่ฉันไม่สามารถย้ายไปไว้ใน / etc / เว้นแต่ว่าฉันได้รับอนุญาตให้เขียน / etc /

  • โควต้า

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

ฉันดูเหมือนจะจำได้ว่ามีบางอย่าง 'แลกเปลี่ยน' เพื่อให้ 'แจกไฟล์' ... เช่น - ในระบบที่อนุญาตสิ่งนั้นไม่ได้รับอนุญาตอย่างอื่นที่ linux อนุญาต แต่ไม่สามารถจำสิ่งที่ถูกปิดได้ มือ...

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

อาจมีปัญหาด้านความปลอดภัยที่ไม่ได้กล่าวถึงข้างต้นซึ่งอาจเป็นข้อกังวลที่ถูกต้อง แต่ประเด็นด้านบนไม่ถูกต้อง

IMO ควรเป็น 'ค่า' ที่สามารถตั้งค่าระบบได้ใน "/ proc" แต่โดยทั่วไปฉันคิดว่าคนส่วนใหญ่ไม่สนใจสิ่งนั้นมากนัก

หากมีความต้องการที่แข็งแกร่งสำหรับมัน 'chown' สามารถปรับปรุงความปลอดภัยและแก้ไขเพื่ออนุญาตแล้วตั้งค่า w / setuid 'root' เพื่อให้สามารถใช้นโยบายดังกล่าวได้


โควต้าจะขึ้นอยู่กับการเป็นเจ้าของไฟล์ไม่ใช่ตำแหน่งตั้งไม่เช่นนั้นบางคนก็สามารถเก็บทุกอย่างไว้/tmpได้
user1686

+1 คุณดูน่ากลัวแล้ว :) บนระบบ OpenSolaris (ซึ่งแน่นอนว่าเป็นตัวสืบทอดของ System V) คุณสามารถตั้งค่านี้ผ่านmountตัวเลือก (การตั้งค่านี้สามารถ จำกัด เฉพาะจุดเมานท์เดียวแทนที่จะเป็นทั้งระบบตามคำแนะนำค่าที่ระบบกำหนดได้ของคุณ): rstchown(ค่าเริ่มต้น ) เพื่อ จำกัด การเปลี่ยนแปลงเจ้าของไฟล์ให้กับผู้ใช้รูทnorstchownเพื่อให้ผู้ใช้ที่ไม่มีสิทธิ์ถูกเปลี่ยนแปลงเป็นเจ้าของไฟล์ของตนเอง (ไม่สามารถเปลี่ยนกลับได้)
WhiteWinterWolf

6

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


2
ขวา. ฉันแก้ไขคำถามเพื่อให้ชัดเจนว่าฉันอ้างถึงไฟล์ที่ผู้ใช้เป็นเจ้าของและไม่ใช่ไฟล์ใด ๆ
Alexandru

1
@Alexandru: คิดว่าผู้ใช้ที่ประสงค์ร้ายเปลี่ยนmyTrojan.shเป็น root และเป็นเจ้าของ SUID
Benjamin Bannier

@honk: เหมาะสมแล้ว
Alexandru

5

เพราะผู้ใช้สามารถหลบเลี่ยงโควต้าระบบไฟล์ หากฉันมีโควต้า 100MB และคุณมีโควต้า 100MB ฉันสามารถอัปโหลด 100MB chmod a + r ปลุกคุณแล้วอัปโหลดอีก 100MB

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