Vim强制写入引发的问题,我也是醉了

By Zing - 2014-11-01

整个醉了的过程:

系统kali Linux,Vim版本7.3

1.创建一个普通用户bai,以root权限在/home/bai目录创建了一个test文件,文件owner为root,权限644

2.然后切换到普通用户bai,用vim向test文件写入内容,wq!命令强制写入成功并退出

3.test文件owner变为bai

为毛Vim这么牛逼呢,想啊想啊,猜是vim替换了原来的文件,不过既然有源码就看一下具体怎么实现的吧,

于是从官网Down了一份Vim7.4源码,想编译下断点弄清楚代码实现。

清理掉系统自带的vim的方法

sudo apt-get remove vim      
sudo apt-get remove vim-runtime      
sudo apt-get remove gvim      
sudo apt-get remove vim-tiny      
sudo apt-get remove vim-common      
sudo apt-get remove vim-gui-common

然后在源码压缩包解压出的vim74目录下,以root用户身份编译,这里把vim安装到了/usr目录下

./configure --with-features=huge --enable-rubyinterp --enable-pythoninterp --with-python-config-dir=/usr/lib/python2.7/config-i386-linux-gnu/ --enable-perlinterp --enable-gui=gtk2 --enable-cscope --enable-luainterp --enable-perlinterp --enable-multibyte --prefix=/usr

sudo make VIMRUNTIMEDIR=/usr/share/vim/vim74
sudo make install

编译好的vim的权限

对比系统自带的vim权限,可以看到权限是一样的

由于编译过程没出啥bug还有些小激动,我也是醉了,没测试一下自己编译的vim还能不能以普通用户身份向root创建的文件强制写入内容就开始调试了,首先会进入这个区域

按之前的流程走了一遍,在输入wq!之后将进程attach到了edb上,就开始下断点调啊调,对着ida代码看啊看,然后就悲剧了

现在没权限写入了,猜想是下载的vim版本太新关于权限设置的代码有所调整?于是下了一个vim73,又装了一遍,由于只是测试,configure的时候一些插件就不装了,编译的过程如下

./configure --with-features=huge --enable-rubyinterp --enable-multibyte --prefix=/usr 
sudo make VIMRUNTIMEDIR=/usr/share/vim/vim73
sudo make install

但是装好之后发现依然不能强行写入文件,
好吧到这里我卡住了,猜想:

1.源码中有一些关于权限的的设置,在编译时可选,我编译的姿势不对导致无法强制写入。

2.系统做了特殊的配置。

问题先留这里做个标记,希望有大牛能够解惑。

From Z1ng'Blog