ฉันสามารถอนุญาตให้ผู้ใช้ chmod ไฟล์ที่ไม่ได้เป็นของพวกเขา?


17

ฉันต้องการอนุญาตให้ผู้ใช้ chmod ไฟล์ที่เป็นของ root หรือผู้ใช้บางคนที่ไม่ใช่ตัวเอง ฉันได้แก้ไขไฟล์เป็น 777 และฉันได้รับ "การดำเนินการไม่ได้รับอนุญาต" ฉันได้เพิ่มผู้ใช้ไปยังกลุ่มของไฟล์และได้รับเหมือนกัน ทำไมผู้ใช้ไม่สามารถ chmod ไฟล์ที่พวกเขามีการเข้าถึงการเขียน?


1
ด้วยตรรกะนี้ทำไมไม่เพียง แต่เรียกใช้ทุกอย่างในฐานะรูท หากผู้ใช้ใด ๆ สามารถเปลี่ยนโหมดใด ๆ คุณจะทำลายรูปแบบการอนุญาตยูนิกซ์ทั้งหมด ... โดยทั่วไป
Chris Down

1
เธออยากทำอะไรล่ะ? บางทีคุณควรดูsudo: linux.die.net/man/8/sudo & linux.die.net/man/5/sudoers
xx4h

ไฟล์มีสิทธิ์ 777 ผู้ใช้สามารถไปที่ "ไฟล์ mv file.old; cat file.old> file" และตอนนี้พวกเขาจะเป็นเจ้าของไฟล์และสามารถ chmod ได้ ทำไมพวกเขาไม่สามารถ "chmod 777 file" ได้?
ashleysmithgpu

5
ไม่พวกเขาสามารถทำได้หากพวกเขามีสิทธิ์เขียนไปยังไดเรกทอรี หากผู้ใช้มีสิทธิ์ในการเปลี่ยนแปลงการอนุญาตของไฟล์ที่เขาไม่ได้เป็นเจ้าของโดยการตั้งค่าโหมด 04777 และการคัดลอก / usr / bin / env ลงในนั้นเขาสามารถเรียกใช้คำสั่งใดก็ได้ในฐานะผู้ใช้นั้น
Stéphane Chazelas

@StephaneChazelas นั่นเป็นข้อโต้แย้งที่แปลกเพราะเคอร์เนลสามารถตัดสินใจได้อย่างง่ายดาย (และไม่!) เพื่อให้ผู้ที่ไม่ใช่เจ้าของการเปลี่ยนแปลงดังกล่าวโดยไม่ถูกผูกไว้กับการตัดสินใจที่จะอนุญาตให้พวกเขาเปลี่ยนแปลงทุกชนิด หลังจาก SUID ทั้งหมดถูกรีเซ็ตแม้เมื่อไม่มีเจ้าของเขียนไฟล์
Hauke ​​Laging

คำตอบ:


8

ทำไมผู้ใช้ไม่สามารถ chmod ไฟล์ที่พวกเขามีการเข้าถึงการเขียน?

สำหรับสิทธิ์การเข้าถึงแบบปกตินี่เป็นการตัดสินใจออกแบบ คุณต้องrichacls : และอาจWRITE_ACLWRITE_OWNER


1
และคุณควรเตือนว่า richacls ไม่สามารถใช้ได้โดยทั่วไป
sendmoreinfo

@sendmoreinfo บทความ Wikipedia กล่าวว่าและต้องอ่านอย่างชัดเจนเนื่องจากคำตอบของฉันไม่ได้อธิบายว่า richacls คืออะไรและใช้อย่างไร มันไร้สาระที่จะพิจารณาคำตอบที่ถูกต้อง "ไม่มีประโยชน์" เนื่องจากสิ่งนี้ โดยเฉพาะอย่างยิ่งเนื่องจากไม่มีทางเลือกเทียบเท่า ครั้งต่อไปทำการแก้ไขหากคุณคิดว่าจำเป็นต้องใช้ข้อมูลดังกล่าว
Hauke ​​Laging

ฉันเห็นมันคือการตัดสินใจออกแบบขอขอบคุณ
ashleysmithgpu

2
คุณใช้คุณสมบัตินี้อย่างชัดเจนดังนั้นอธิบายด้วยตัวคุณเองด้วยคำพูดของคุณเอง
sendmoreinfo

10

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

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

ในทางกลับกันการอนุญาตให้ผู้ใช้ให้สิทธิ์ที่ไม่ได้ทำลายระบบการอนุญาตอย่างสมบูรณ์: ผู้ใช้สามารถให้สิทธิ์ทั้งหมดกับตัวเอง

ค่อนข้างยากที่จะต้องเปลี่ยนการอนุญาตของไฟล์ที่คุณไม่ได้เป็นเจ้าของ โดยปกติคุณควรจัดเรียงไฟล์ให้มีสิทธิ์ที่ถูกต้องทันทีที่มีการสร้าง หากคุณต้องการสิ่งนั้นจริงๆคุณอาจให้sudo chmodสิทธิ์ผู้ใช้สำหรับโหมดเฉพาะและไฟล์เฉพาะ (เช่นjoe: ALL = (ALL) chmod g+r /path/to/file)

¹ ยกเว้นเวลาในการเข้าถึงและการปรับเปลี่ยนซึ่งมีความเฉพาะเนื่องจากการอ่านหรือเขียนไปยังไฟล์ยังตั้งค่าไว้


ในกรณีการใช้งานของฉันมีทั้งกระบวนการทางเว็บ (โดย www-data) และกระบวนการ cli (ด้วยตัวเอง) ที่ต้องการตั้งค่าการอนุญาตในไฟล์ ฉันเพิ่มตัวเองลงในกลุ่ม www-data แต่ไม่เพียงพอ
donquixote

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