2012-11-05 33 views
1

我試圖在vim中禁用'r'和'o'命令,所以使用它的人無法從vim內打開其他文件。 我試圖使用cmap r <Nop>cmap o <Nop>,這些工作但有不良副作用......這兩個字母不能用於vim命令行,也不能用於搜索某些內容... 如果您嘗試搜索單詞,「單詞」搜索行顯示:/wd如何禁用vimrc中的vim命令來保護vim

那麼是否有另一種方法來禁用使用vimrc打開文件?

+2

即使有了這些cmaps,你也可以用' r'輸入'r'。 – ZyX

回答

2

你可以用一個標誌推出的Vim:

$ vim -R (readonly) 
$ vim -Z (restricted) 
$ vim -m (no writing) 
$ vim -M (no text modification) 

但這些都不將阻止:e:r或任何類似的命令無數的。並且... ~/.vimrc可能可以編輯nano或任何刪除任何最終命令。

如何完全沙盒Vim或其用戶?

怎麼樣解釋你爲什麼要這樣做?

+0

那麼,我想要做的是允許在vim中使用sudo(root權限)編輯特定文件,但不允許任何人從vim內打開另一個文件,也不能執行命令(儘管對於我已經使用rvim的命令)。 vim通過另一個腳本打開,vim是編輯器的選擇,因爲每個將要使用該腳本的人都知道vim。想不到任何其他的東西.. –

+3

如果你給用戶的根,那麼你已經註定了。 vim映射無處不在爲您節省成本。 – d11wtq

3

如果你真的要保護的Vim(不只是提供一定不允許的特徵表象),你必須從源代碼中刪除這些功能和編譯(和測試!)的Vim的有限版本。 (或者也許你可以使用沙箱Vim進程的操作系統包裝器並過濾某些系統調用,但我不知道任何這樣的事情。)

任何Vimscript阻塞都可以被繞過:您的重新映射可以通過:cunmap,在正確的時間按<C-c>即可停止Vimscript中的任何更精細的保護。

+0

謝謝,我已經考慮過了,我正試圖避免編譯我自己的vim版本。當你說「沙盒vim過程」時,你是什麼意思? –

+0

我想看看你將如何停止'while 1 | echo getchar()| endwhile'。雖然你有一個觀點:使用vim從一些黑客手段中避免執行停止,而不是在getchar()調用(也許只是用python或其他語言編寫所有代碼,並最終調用vim)將停止執行,另一堆黑客讓它工作(使用自動命令,映射和所有其他的東西)以及第三類黑客讓它看起來至少有點接近可用,而不是說強制執行限制的條件是超出大多數技能的vim黑客。 – ZyX

+0

@GiannisNohj搜索「linux sandboxing」。 [這](http://stackoverflow.com/questions/4249063/how-can-i-run-an-untrusted-c-program-in-a-sandbox-in-linux)是一個頂級的結果,它似乎有一個足夠好的概述,但沒有任何細節。希望Ingo Karkat知道更多。 – ZyX

0

如果你想允許使用root權限的特定文件的編輯,而不允許命令或其他文件編輯(如你現在在一個單獨的評論表示),你爲什麼不這樣做,因爲在man 8 sudoedit概述:

  1. 臨時複印後的文件將被設置爲調用用戶的所有者編輯 。

  2. 運行該策略指定的編輯器以編輯 臨時文件。 sudoers策略使用SUDO_EDITOR,VISUAL和EDITOR環境變量 (按此順序)。如果沒有設置SUDO_EDITOR,VISUAL或EDITOR,則使用編輯器 sudoers(5)選項中列出的第一個程序。

  3. 如果它們已被修改,臨時文件是 複製回原來的位置和 臨時版本將被刪除。

它是更安全,推出在用戶的上下文編輯器,而不是根上下文。 (另外,用戶得到了他的Vim設置,而不是來自root帳戶的未保留的設置!)編輯過的臨時文件的同步後面必須以root權限完成;在sudo的幫助下,所有這些都可以在幾行shell腳本中實現。