ทำไมchown
คำสั่งรูทเท่านั้น? เหตุใดผู้ใช้ที่ไม่ใช่รูทจึงไม่สามารถใช้ chown เพื่อมอบไฟล์ที่ตนเองเป็นเจ้าของได้
chown
เพื่อมอบไฟล์ที่ตนเองเป็นเจ้าของได้ (ฉันเคยเห็นระบบที่คุณสามารถทำได้โดยขึ้นอยู่กับการกำหนดค่าของระบบไฟล์)
ทำไมchown
คำสั่งรูทเท่านั้น? เหตุใดผู้ใช้ที่ไม่ใช่รูทจึงไม่สามารถใช้ chown เพื่อมอบไฟล์ที่ตนเองเป็นเจ้าของได้
chown
เพื่อมอบไฟล์ที่ตนเองเป็นเจ้าของได้ (ฉันเคยเห็นระบบที่คุณสามารถทำได้โดยขึ้นอยู่กับการกำหนดค่าของระบบไฟล์)
คำตอบ:
ระบบยูนิกซ์ส่วนใหญ่ป้องกันผู้ใช้จากการ "แจกไฟล์" นั่นคือผู้ใช้สามารถทำงานchown
ได้ก็ต่อเมื่อพวกเขามีสิทธิ์ผู้ใช้และกลุ่มเป้าหมาย เนื่องจากการใช้chown
ต้องมีการเป็นเจ้าของไฟล์หรือเป็นรูท (ผู้ใช้ไม่สามารถทำไฟล์ของผู้ใช้รายอื่นได้) รูทเท่านั้นจึงสามารถเรียกใช้chown
เพื่อเปลี่ยนเจ้าของไฟล์เป็นผู้ใช้รายอื่นได้
เหตุผลสำหรับข้อ จำกัด นี้คือการให้ไฟล์แก่ผู้ใช้รายอื่นสามารถอนุญาตให้สิ่งที่ไม่ดีเกิดขึ้นได้ในเรื่องแปลก แต่ก็ยังเป็นสถานการณ์ที่สำคัญ ตัวอย่างเช่น:
chown
เพื่อทำให้ไฟล์นั้นเป็นของผู้ใช้คนอื่น ไฟล์จะนับรวมอยู่ในโควต้าดิสก์ของ Bill ถึงแม้ว่า Alice เท่านั้นที่สามารถใช้ไฟล์ได้/bin/bash
และจากนั้นchown
ให้กับใครก็ได้ที่พวกเขาต้องการ ตอนนี้พวกเขามีสิทธิ์เข้าถึงเชลล์ในฐานะบุคคลนั้น
chown
ล้างบิต setuid และ setgid เสมอ
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
... )?
บน 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
คุณสามารถเรียกใช้คำสั่ง แต่จะไม่ทำงานหากคุณไม่รูท ง่ายมากลองนึกภาพผู้ใช้ที่สามารถเปลี่ยนซอฟต์แวร์เป็นผู้ใช้รูทได้ มันสามารถเพิ่มบิต setuid และ, voilà, คนที่แต่งตัวประหลาดเป็น root! ดังนั้นการใช้สามารถเพิ่มบิตด้วย chmod แต่ไม่มีโอกาสเปลี่ยนเจ้าของไฟล์