ในขณะที่เข้าสู่ระบบฉันสามารถทำสิ่งต่อไปนี้:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
จากนั้นฉันสามารถเปิดเป็นกลุ่ม (ไม่เป็นroot) แก้ไขbarบังคับให้เขียนด้วยw!และไฟล์จะถูกแก้ไข
ฉันจะทำให้ระบบปฏิบัติการไม่อนุญาตให้แก้ไขไฟล์ได้อย่างไร?
อัพเดท 02 มี.ค. 2560
chmod 500 fooเป็นปลาเฮอริ่งแดง: สิทธิ์ในการเขียนในไดเรกทอรีไม่มีส่วนเกี่ยวข้องกับความสามารถในการปรับเปลี่ยนเนื้อหาของไฟล์ - เฉพาะความสามารถในการสร้างและลบไฟล์chmod 400 foo/barในความเป็นจริงจะป้องกันเนื้อหาของไฟล์จากการเปลี่ยนแปลง แต่ไม่ได้ป้องกันการอนุญาตของไฟล์จากการเปลี่ยนแปลง - เจ้าของไฟล์สามารถเปลี่ยนแปลงการอนุญาตของไฟล์ได้ตลอดเวลา (สมมติว่าพวกเขาสามารถเข้าถึงไฟล์ได้เช่นเรียกใช้งานการอนุญาตในไดเรกทอรีบรรพบุรุษทั้งหมด) ในความเป็นจริง strace (1) แสดงให้เห็นว่านี่คือสิ่งที่กลุ่ม (7.4.576 Debian Jessie) กำลังทำอยู่ - vim เรียก chmod (2) เพื่อเพิ่มสิทธิ์การเขียนสำหรับเจ้าของไฟล์ชั่วคราวแก้ไขไฟล์แล้วเรียก chmod ( 2) อีกครั้งเพื่อลบสิทธิ์การเขียน นั่นคือเหตุผลที่ใช้chattr +iงาน - เฉพาะ root เท่านั้นที่สามารถโทรchattr -iได้ ในทางทฤษฎีเป็นกลุ่ม (หรือโปรแกรมใด ๆ ) สามารถทำสิ่งเดียวกันกับ chattr เช่นเดียวกับ chmod ในไฟล์ที่ไม่เปลี่ยนรูปถ้าเรียกใช้เป็นราก
root?
vimคือการเปลี่ยนการอนุญาตจากนั้นนำกลับคืนมา