2014-11-23 29 views
0

我很好奇爲什麼Vim似乎能夠覆蓋我的文件權限,即使我以非管理員用戶身份登錄。爲什麼Vim能夠打敗我的文件權限? OS X

dq-donahue:perm_prac fartknocker$ login root 
Password: 

dq-donahue:~ root# cd /Users/fartknocker/perm_prac/ 
dq-donahue:perm_prac root# touch derp 
dq-donahue:perm_prac root# ls -l 

-rw-r--r-- 1 root   staff 0 Nov 23 13:39 derp 

dq-donahue:perm_prac root# logout 
dq-donahue:perm_prac fartknocker$ vim derp 

...在這裏,我添加到文件與vim和使用wq!來覆蓋 fartknocker帳戶的只讀權限...

dq-donahue:perm_prac fartknocker$ ls -l 

-rw-r--r-- 1 fartknocker staff 13 Nov 23 13:39 derp 

是怎麼回事?爲什麼Vim能夠實現這一目標? Fartknocker是一個os x「標準」賬戶。另外,對於有趣的帳戶名稱感到抱歉。 :)任何幫助表示讚賞。

回答

-1

它的工作原理是因爲您擁有自己的主目錄並有權對其所有權進行更改,所以vim通過移動文件並在後臺編寫一個新文件來實現有效的「chown」,以便您可以編寫它。這不是指出的實際chown。您還可以看到another answer to this here

IME,* nix上99%的問題都是路徑和權限。在這裏,它是權限。您有權在父目錄上取消鏈接文件並創建另一個文件。

如果您對試圖更改文件的目錄擁有權限,則可以執行此操作。試試這個作爲根:

mkdir foo 
chmod 777 foo 
touch foo/bar.txt 

,你將能夠編輯和強制寫入文件。

但是(如在/ tmp中),粘性位會阻止您取消鏈接文件,正如@Keith Thompson在下面的線程中指出的那樣。因此,要延長上面的例子中,你可以做以下的根:

touch foo/bar2.txt 
chmod a+wt foo # this sets the sticky bit 

現在你就不能強迫寫bar2.txt文件。

+0

謝謝!那讓我瘋狂。 – looch 2014-11-23 19:15:06

+0

Vim不能將文件「chown」放入文件中。 – 2014-11-23 20:22:01

+0

@looch:此答案不正確; 'vim'不能'chown'文件,除非它以root身份運行(並且即使它不會嘗試)。另一個答案是正確的。 vim不會覆蓋文件的權限。 – 2014-11-23 20:25:03

2

在我的測試中,Vim取消了原始文件的鏈接(它需要包含目錄的寫權限,而不是文件本身)。然後它寫入一個新文件。這可以通過使用ls -listat檢查文件的inode來確定。

$ sudo touch foo 
$ ls -li foo 
57457973 -rw-r--r-- 1 root staff 0 Nov 23 13:07 foo 
$ vi foo 
... modify file and write with :wq! ... 
$ ls -li foo 
57457990 -rw-r--r-- 1 ken staff 15 Nov 23 13:07 foo 

inode已經改變。

相關問題