เหตุใดผู้ใช้ปกติไม่สามารถเรียกไฟล์ได้


75

ทำไมchownคำสั่งรูทเท่านั้น? เหตุใดผู้ใช้ที่ไม่ใช่รูทจึงไม่สามารถใช้ chown เพื่อมอบไฟล์ที่ตนเองเป็นเจ้าของได้


ไม่สามารถเข้าใจคำถามคำสั่ง chown ของคุณได้โดยผู้ใช้ที่ไม่ใช่รูทด้วย
harish.venkat

บางทีฉันอาจคิดผิด ดีคำถามที่แน่นอนของ proffesor ของฉันคือ: "ทำไมย้ายสิทธิจากผู้ใช้ปกติไม่ได้รับอนุญาตในระบบ UNIX?" ...
phleg

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

คำตอบ:


96

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

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

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

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

2
อีกปัญหาที่สำคัญยิ่งกว่าคือผู้ใช้สามารถคัดลอกกำหนด/bin/bashและจากนั้นchownให้กับใครก็ได้ที่พวกเขาต้องการ ตอนนี้พวกเขามีสิทธิ์เข้าถึงเชลล์ในฐานะบุคคลนั้น
Patrick

18
@Patrick chownล้างบิต setuid และ setgid เสมอ
Gilles

1
@Gilles และสำหรับเหตุผลที่ดี ... หากคุณสามารถคัดลอกไบนารีเชลล์คุณสามารถเข้าถึงมันได้ให้ตั้งค่า setuid / gid บิตบนมันและ chown ให้มันเป็นรูท / กรรมสิทธิ์) คุณสามารถรับรูทบนระบบนั้นได้ โอ้คิดถึงความคิดเห็นของ Patrick อย่างแน่นอน
hanetzer

ok แต่ถ้าผมเป็นเจ้าของ dir ( drwxr-xr-x ring0 ring0 .) ซึ่งมีรากแฟ้มปกติ ( -rw-r--r-- root root file) ทำไมฉันไม่สามารถทำchown ring0 fileเพราะมันจะได้รับอนุญาตต่อไปเพื่อทำตามที่ring0, cp file x ; rm file ; mv x file(และบางตัวเลือกtouch sometime file... )?
แหวนØ

15

บน Linux คุณต้องมีความสามารถ CAP_CHOWN ในการ chown รากจะได้รับเช่นนี้ อ้างถึง: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html สำหรับคำอธิบาย หากคุณตั้งใจจะให้ความสามารถในการ CAP_CHOWN ให้สร้างรหัสของคุณด้วย libcap-ng หรือ libcap ดังที่แสดงโดย: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html ที่คุณต้องแทนที่ CAP_AUDIT_WITE กับ CAP_CHOWN


1
+1 สำหรับคุณไม่จำเป็นต้องรูท เพราะคุณไม่จำเป็นต้องรูตอีกต่อไป
ctrl-alt-delor

1
บางครั้งคุณไม่จำเป็นต้องมี CAP_CHOWN: unix.stackexchange.com/questions/399975/ ......จากการอ่านเคอร์เนลของฉันการใช้ระบบไฟล์แต่ละครั้งจะได้รับมอบหมายด้วยการตรวจสอบสิทธิ์สำหรับ chown และปรากฏว่าด้วย NFS การอนุญาตจะถูกตรวจสอบทางฝั่งเซิร์ฟเวอร์ และถ้าเซิร์ฟเวอร์นั้นแปลก ... ก็เป็นไปได้
Mike S

0

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


12
คุณไม่สามารถเพิ่มบิต setuid ลงในไฟล์ที่คุณไม่ได้เป็นเจ้าของและการนำไปใช้งานที่อนุญาตการแจกไฟล์ให้ล้างบิต setuid
Gilles

ฉันคิดว่าคำตอบของ Dom คือ: ลองนึกภาพถ้าคุณทำได้ จากนั้นจะมีปัญหา ประเด็นที่คุณทำไม่ได้ถูกต้อง แต่ OP ถามว่า "ทำไม" การล้าง setuid bit เป็นคุณสมบัติความปลอดภัยอีกประการหนึ่งที่ทำให้เกิดคำถามว่า "ทำไม" ซึ่งฉันจะอ้างถึงคำตอบของ Dom: หากผู้ใช้สามารถ chown และถ้าผู้ใช้สามารถ setuid แล้วคำสั่งผสมนั้นจะหายนะ ฉันคิดว่าเขาทำคะแนนได้ดีแม้ว่าเขาจะหายไปเล็กน้อย
Mike S
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.