ฉันใช้ Vim เมื่อวันก่อนตามปกติเมื่อฉันสังเกตเห็นบางสิ่งที่แปลก นี่คือสิ่งที่ฉันทำ:
~$ touch testfile
~$ ls -l | grep testfile
-rw-r--r-- 1 username groupname 0 Jul 23 10:00 testfile
~$ vim testfile
:wq
แล้วฉันจะทำการเปลี่ยนแปลงและบันทึกไว้และเลิกกับ ค่อนข้างปกติ อย่างไรก็ตามจากนั้น:
~$ sudo chown root:root testfile
~$ sudo chmod 644 testfile
~$ sudo -k
~$ ls -l | grep testfile
-rw-r--r-- root root 0 Jul 23 10:02 testfile
~$ vim testfile
รูทควรมีการเข้าถึง r / w และทุกคนควรอ่านเท่านั้น แก้ไขไฟล์ลองบันทึก - คุณทำไม่ได้ ยอดเยี่ยมทำงานได้ตามที่ตั้งใจ อย่างไรก็ตามหากคุณบันทึกด้วย:w!
กลุ่มจะเปลี่ยนความเป็นเจ้าของไฟล์กลับเป็นชื่อผู้ใช้: กลุ่มผู้ใช้และไฟล์จะถูกบันทึก แม้ว่าคุณจะทำสิ่งนี้:
~$ sudo chmod 444 testfile
~$ sudo -k
~$ ls -l | grep testfile
-r--r--r-- 1 root root 0 Jul 23 10:06 testfile
~$ vim testfile
คุณยังสามารถเขียนทับด้วย:w!
! เกิดอะไรขึ้น? เสียงเรียกเข้าจะผิดกฎหมายว่าด้วยการเป็นเจ้าของไฟล์และการอนุญาตเช่นนี้ได้อย่างไร ฉันดูหน้าความช่วยเหลือเป็นกลุ่มโดยพูด:help :w
และพบสิ่งนี้:
:w[rite]! [++opt] Like ":write", but forcefully write when 'readonly' is set or there is another reason why writing was refused.
Note: This may change the permission and ownership of the file and break (symbolic) links. Add the 'W' flage to 'cpoptions' to avoid this.
ก่อนหน้านี้ฉันไม่สามารถเขียนไฟล์เป็นกลุ่มเมื่อฉันไม่ควรทำดังนั้นฉันเดาว่าหัวใจที่แท้จริงของคำถามของฉันคือฉันจะทำให้ไฟล์ unedit-can โดย vim ได้อย่างไรและทำไมมันไม่ขึ้นกับไฟล์ สิทธิ์ของระบบอย่างที่ฉันคาดไว้และกลไกใดที่ใช้กลุ่มเพื่อแก้ไขไฟล์ที่ผู้แก้ไขรายอื่น (gedit, nano) ใช้ไม่ได้
แก้ไข: คอมพิวเตอร์ที่ฉันลองนี้ใช้ Linux kernel 3.15.5-2-ARCH หมายเลขเวอร์ชันของ Vim คือ 7.4.373-1 และเป็นหมายเลขที่ติดตั้งโดยpacman
- ฉันไม่ได้รวบรวมตั้งแต่เริ่มต้นด้วยตัวเลือกพิเศษใด ๆ
CAP_CHOWN
chown(2)
โดยวิธีการที่ฉันสามารถทำซ้ำใน Debian กับกลุ่ม 7.4