ในขณะที่เข้าสู่ระบบฉันสามารถทำสิ่งต่อไปนี้:
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
คือการเปลี่ยนการอนุญาตจากนั้นนำกลับคืนมา