Akawa

ETY001的博客

这两天我才发现我这次备案自己的博客,停站半个月的损失是什么。最初以为也就是少了点百度收录而已,但是事实却是,我的百度收录现在仅剩一条了,并且最痛心的是Google的PR值没有了,我的pr值原来为3阿,这是多么不容易积攒起来的阿。。。唉,看来一切又要从头再来了,既然现在是假期了,每天就要坚持发发博文了。希望能尽快回升回去。

转自:http://2ndx.tk/?post=18

0x00  前言

什么是webshell?我相信如果看官能有兴趣看这篇文章,一定对webshell有个了解。不
过不了解也没关系,那就请先搜索下相关资料[1]。当然,本着“know it then hack it”
的原则,建议你还是搭个环境,熟悉下先,毕竟纸上谈兵是要不得的。

随着网络的发展,Web站点的增加,webshell这种脚本后门技术也发展起来了,多少黑
客故事都是从一个小小的webshell开始的。所以对于网站,特别是站点和应用众多的互联网
企业,能够在出现webshell的阶段及时发现和响应就显得尤为重要。

本文以笔者多年从事相关工作的经验来探讨下webshell的检测手段。

0x01  Webshell检测模型

记得当年第一个ASP木马出来的时候号称“永不被杀的ASP木马”(请大家虔诚地起立,
我们一起来膜拜一下海洋顶端ASP木马之父LCX大叔),因为它使用正常端口,且脚本容易变
形,使得查杀它变得困难。但是,Webshell这种特殊的Web应用程序也有两个命门:文件和
HTTP请求。

我们先来看下Webshell的运行流程:hacker -> HTTP Protocol -> Web Server -> CGI。
简单来看就是这样一个顺序:黑客通过浏览器以HTTP协议访问Web Server上的一个CGI文件。
棘手的是,webshell就是一个合法的TCP连接,在TCP/IP的应用层之下没有任何特征(当然
不是绝对的),只有在应用层进行检测。

黑客入侵服务器,使用webshell,不管是传文件还是改文件,必然有一个文件会包含
webshell代码,很容易想到从文件代码入手,这是静态特征检测;webshell运行后,B/S数
据通过HTTP交互,HTTP请求/响应中可以找到蛛丝马迹,这是动态特征检测。

0x02  静态特征检测

静态特征检测是指不执行而通过围观的方式来发现webshell,即先建立一个恶意字符串
特征库,然后通过在各类脚本文件中检查是否匹配。这是一种最简单也是最常见的技术,高
级一些的,可能还涉及到语义分析。笔者06年开发的“雷客图ASP站长安全助手”[2]即是通
过此类办法查找ASP类型的webshell的。

静态特征检测面临的一个问题是误报。因为一些特征字符串正常程序本身也需要用到。
比如PHP里面的eval、system等,ASP里面的FileSystemObject、include等。所以雷客图在
设计之初就是一个辅助工具,最终还需要有相关安全经验的人来判定。

对于少量站点可以用这样人肉去检查,如果是一个成千上万站点的大型企业呢,这个时
候再人肉那工作量可就大了。所以用这样一种思路:强弱特征。即把特征码分为强弱两种特
征,强特征命中则必是webshell;弱特征由人工去判断。加入一种强特征,即把流行webshell
用到的特征作为强特征重点监控,一旦出现这样的特征即可确认为webshell立即进行响应。
比如PHPSpy里面会出现phpspywofeiwoeval($_POST[xxx]) 等,
ASP里面出现Shell.Application等。

当然,黑客完全可以变形躲过,没关系,还有人工检查的弱特征。

另一个问题是漏报。程序的关键是特征字符串,它直接关系着结果,如果你的特征库里
面没有记录的甚至是一种新的webshell代码,就可能束手无策了。雷客图第一版出来后,我
自以为所有的ASP webshell都可以查了,但是我错了,因为不断会有新的方式出来绕过,最
终结果就是特征被动的跟着webshell升级而升级,同时还面临未知的webshell——这个情况
和特征码杀毒软件何其相似。

要解决误报和漏报,就不能拘泥于代码级别了。可以换个角度考虑问题:文件系统。我
们可以结合文件的属性来判断,比如apache是noboy启动的,webshell的属主必然也是nobody,
如果我的Web目录无缘无故多了个nobody的文件,这里就有问题了。最理想的办法是需要制度
和流程来建设一个Web目录唯一发布入口,控制住这个入口,非法进来的Web文件自然可以发
现。

0x03  动态特征检测

webshell传到服务器了,黑客总要去执行它吧,webshell执行时刻表现出来的特征,我
们称为动态特征。

先前我们说到过webshell通信是HTTP协议。只要我们把webshell特有的HTTP请求/响应
做成特征库,加到IDS里面去检测所有的HTTP请求就好了。

这个方案有个问题就是漏报。首先你得把网上有的webshell都搜集起来抓特征,这是个
体力活,新的webshell出来还要去更新这个库,总是很被动,被动就算了,但是一些不曾公
开的webshell通信就会漏掉。那么这个方案有没有效果,只能说效果有限吧,对付拿来主义
的菜鸟可以,遇到高级一些的黑客就无效了。杀毒软件都搞主动防御了,webshell也不能老
搞特征码是吧。

webshell起来如果执行系统命令的话,会有进程。Linux下就是nobody用户起了bash,
Win下就是IIS User启动cmd,这些都是动态特征,不过需要看黑客是否执行命令(多半会这
样),还有就是你的服务器上要有一个功能强大的Agent。要是黑客高兴,再反连回去,这
下就更好了,一个TCP连接(也可能是UDP),Agent和IDS都可以抓现行。这里还涉及到主机
后门的一些检测策略,以后有机会再另文叙述。

回到网络层来,之前我们探讨过,Webshell总有一个HTTP请求,如果我在网络层监控HTTP
请求(我没有监控Apache/IIS日志),有一天突然出现一个新的PHP文件请求或者一个平时
是GET请求的文件突然有了POST请求,还返回的200,这里就有问题了。这种基于区别于正常
请求的异常模型,姑且称之为HTTP异常请求模型检测。一旦有了这样的模型,除了Webshell,
还可以发现很多问题的。

还有一个思路来自《浅谈javascript函数劫持》[3]和某款代码审计软件。回忆一下,
我们调试网马的时候,怎么还原它各种稀奇古怪的加密算法呢,简单,把eval改成alert就
好了!类似的,所以我们可以在CGI全局重载一些函数(比如ASP.Net的global.asax文件),
当有webshell调用的时候就可以发现异常。例如以下ASP代码就实现了对ASP的execute函数
的重载:

1
2
3
4
5
6
7
<%
Function execute(stra)
Response.Write("get the arg : "+stra)
End Function
a="response.write(""hello,world"")"
execute(a)
%>

这个方法在应用层还是有些问题,所以如果在CGI引擎内核里面改可能会好些。根据小
道消息,这期ph4nt0m的webzine会有一篇文章涉及PHP内核中防webshell的,有兴趣的同学
可以关注。

0x04  结语

本文只探讨了检测Webshell的一些思路,希望对你有些帮助,如果你有更好的方案,也
可以和我探讨。至于一些工具和特征,由于这样那样的原因就不公开了,我始终认为,相比
于工具,思路永远是最重要的。

文章作者:lake2 - 这个ID不用我解释,某组织的牛淫

从2012年1月4日开始准备资料,到1月5号开始提交资料,再到今天1月16号备案号批下来,貌似一路很顺利,就是中间等待的时候,比较让人心急啊。。。。

由于这次备案是闭站备案,所以说这段时间,我的这个网站是一直无法访问的,不过我还是给自己预留了一个通道可以访问到的~

有了备案号就可以去百度申请广告了吼吼

虽然我的这个站的流量实在是可怜,但是我相信,这只是现状。

处理Nginx出现的413 Request Entity Too Large错误
这个错误一般在上传文件的时候出现,打开nginx主配置文件nginx.conf,找到http{}段,添加

client_max_body_size 8m;

要是跑php的话这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。

post_max_size = 8M upload_max_filesize = 2M

问题

通过php重启apache可以把apache的控制放到web页面上。
但是由于php本身的运行模式,一般而言,除非apache具备root权限,否则php连/etc都访问不了,更不用说反过来控制apache了。
因此,我们需要找到别的方法。

思路

通过system,exec等方法,PHP可以呼出一些权限之内的命令,或者执行一些可执行的程序。
因此我们可以事先编译一个重启apache的可执行程序,并赋予其root权限,然后让php调用该程序来实现apache的重启动。

具体方法

首先我们建立sample.c文件,并进行编译:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(int argc, char **argv)
{
pid_t pid;
uid_t uid,euid;
uid=getuid();
euid=geteuid();
setreuid(euid,uid); //交换uid和euid,临时转让文件本身的root权限给PHP(apache)。

if ((pid = fork()) == 0) //生成子进程
{
if ((pid = fork()) > 0) //子进程下继续生成孙进程
{
exit(0); //杀掉子进程
}
else if (pid == 0)
{
sleep(2);
//由于子进程已死,因此孙进程成为孤儿进程,并自动由init进程领养。
//此时孙进程发送消息给apache,请求其重启。
system("apachectl -k restart");
exit(0);
}
}
else if (pid > 0)
 //程序最初的父进程在这里回收子进程。
waitpid(pid, NULL, 0);
return 0;
}

编译完该文件之后,我们需要对执行文件的权限进行一下处理

chmod u+s sample

sample是由root建立,root编译,因此原本也只能由root执行调用。
但通过上面这个命令,其他用户也可以调用这个文件了。
然后我们在PHP中调用这个文件就可以重启apache了。

一些关键点的解说

1:
重启Apache的系统命令很多,比起代码中的调用,更有名的应该是/etc/init.d/httpd restart,但是很遗憾,在本应用中这个系统命令是不能调用的,如果使用这个命令,那么Apache会在中止掉自己进程的瞬间,终止这个程序的继续运行,也就无法对自身进行重启动,因此我们需要通过发送信号给Apache,在不中止进程的情况下重启Apache,这一点非常重要。
关于apachectl -k restart的详细信息,可以参照下面的网址
http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/stopping.html

2: 双重fork。 如果只是重启apache,而不在乎程序本身的动作,那么我们可以直接在代码中执行system(“apachectl -k restart”)而不必产生新的进程。
但是,考虑一下整个流程,如果我们这样做了,那么当我们访问PHP页面的时候,PHP(Apache)调用文件,瞬间重启自身,那么很自然,结果就是页面崩溃。
当然,Apache依然可以重启成功,但是,这一点也不优雅。
因此,使用双重fork可以让我们避免当前页面崩溃而对Apache进行重启动。

3: 更进一步的安全措施:
编译完sample后,计算其MD5值,并把该值固化到PHP中,然后在PHP中加入校验代码,以防止sample被恶意替换。

  大家买了vps之后是不是都迫不及待的想让朋友们帮忙测试下下载速度,很多vps商或者独立服务器都提供100mb.bin 或者1000mb.bin的文件下载,当然这些文件都不是上传上去的,用服务器自动生成即可。
  进入你的网站目录,指向命令:

dd if=/dev/zero of=100mb.bin bs=100M count=1

其中的文件大小和数量,你自己决定吧!

生成之后可以直接在浏览器输入文件的网址,测试单线程的下载速度,如果想测试极限速度可以找几家国外的vps或者服务器,下载你的文件试试。

转自:http://blog.163.com/shangshujie_1005/blog/static/186713514201171511835578/

更换了注释插件NER_commenter,函数出错找不到解决办法,于是更换为插件EnhancedCommentify


折腾了四天终于把 vim差不多搞定了 实现了目录,函数跳转,注释和php自动缩进,自动补全。有待日后完后
vimrc代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
" 设置leader为,
let mapleader=","
let g:mapleader=","
set nocompatible            " 关闭 vi 兼容模式
syntax on                   " 自动语法高亮


set mouse=a                 " 开启鼠标模式
filetype plugin indent on   " 开启插件
set number                  " 显示行号
set nocursorline            " 不突出显示当前行
set shiftwidth=4            " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4           " 使得按退格键时可以一次删掉 4 个空格
set tabstop=4               " 设定 tab 长度为 4
set nobackup                " 覆盖文件时不备份
set autochdir               " 自动切换当前目录为当前文件所在的目录
set backupcopy=yes          " 设置备份时的行为为覆盖
set ignorecase smartcase    " 搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感
set nowrapscan              " 禁止在搜索到文件两端时重新搜索
set incsearch               " 输入搜索内容时就显示搜索结果
set hlsearch                " 搜索时高亮显示被找到的文本
set noerrorbells            " 关闭错误信息响铃
set novisualbell            " 关闭使用可视响铃代替呼叫
set t_vb=                   " 置空错误铃声的终端代码
" set showmatch               " 插入括号时,短暂地跳转到匹配的对应括号
" set matchtime=2             " 短暂跳转到匹配括号的时间
" set nowrap                  " 不自动换行
set magic                   " 显示括号配对情况
set hidden                  " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
set smartindent             " 开启新行时使用智能自动缩进
set cindent                 " c风格程序缩进
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,&gt;1s,=1s,:1s

set backspace=indent,eol,start " 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1             " 设定命令行的行数为 1
set laststatus=2            " 显示状态栏 (默认值为 1, 无法显示状态栏)
set foldenable              " 开始折叠
set foldmethod=syntax       " 设置语法折叠
set foldcolumn=0            " 设置折叠区域的宽度
setlocal foldlevel=1        " 设置折叠层数为
" set foldclose=all           " 设置为自动关闭折叠
" colorscheme colorzone       " 设定配色方案
colorscheme default         " 设定配色方案

" 设置在状态行显示的信息
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ [%{(&fenc==""?&enc:&fenc).(&bomb?",BOM":"")}]\ %c:%l/%L%)\

" 显示Tab符
:.,extends:>,precedes:<
set listset listchars=tab:>- ,trail

"设置代码折叠方式为 手工indent
set foldmethod=indent

"设置代码块折叠后显示的行数
set foldexpr=1
if has("gui_running")
   set guioptions-=m " 隐藏菜单栏
   set guioptions-=T " 隐藏工具栏
   set guioptions-=L " 隐藏左侧滚动条
   set guioptions-=r " 隐藏右侧滚动条
   set guioptions-=b " 隐藏底部滚动条
   set showtabline=0 " 隐藏Tab栏
endif


"启动后自动最大化 

if has("win32")
   au GUIEnter * simalt ~x
endif

" vim 支持中文
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
set guifont=NSimSun:h8
set helplang=cn
set ambiwidth=double

"php缩进
let PHP_autoformatcomment=1

"-------------------------------------------------------

"快捷键
" 全文搜索选中的文字。选中后  ,f
:vmap <silent> <leader>f y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
:vmap <silent> <leader>F y?<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
" 删除所有行未尾空格。快捷键f12
nmap <F12> :%s/[ \t\r]\+$//g<CR>
" Buffers操作快捷方式!切换文件 shirt+l.shift+h
nmap <S-L> :bnext<CR>
nmap <S-H> :bprevious<CR>
"切换窗口。ctrl+w+whjkl
nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l
"nmap <C-w> <C-w>w
" 插入模式下左右移动光标
"imap <c-l> <esc>la
"imap <c-h> <esc>ha

" 选中状态下复制  ctrl+c
vmap <C-c> "+y

"映射转换语法。快捷键:html:,1  php:,2  javascript,3  css,4 defalur ,5
nmap <leader>1 :set filetype=xhtml<CR>
nmap <leader>2 :set filetype=css<CR>
nmap <leader>3 :set filetype=javascript<CR>
nmap <leader>4 :set filetype=php<CR>
nmap <leader>5 :set filetype=default<CR>

" php语法进行检测 ctrl+p启动
map <C-P> :!/php/php/bin/php -l %<CR>

" php启动帮助 快捷键普通模式下K
autocmd BufNewFile,Bufread *.ros,*.inc,*.php set keywordprg="help

"快速保存。 ,wq保存并退出说有  ,qq不保存退出所有 ,w保存所有 ctrl+w插入模式保存
nmap <leader>wq :wqa<cr>

nmap <leader>qq :qa!<cr>
nmap <leader>w :w!<cr>



"粘帖模式开启和关闭

:set pastetoggle=<F4>



"-------------------------------------------------------

"不同文件类型的缩进
au FileType html,python,vim,javascript setl shiftwidth=2
au FileType html,python,vim,javascript setl tabstop=2
au FileType java,php setl shiftwidth=4
au FileType java,php setl tabstop=4
set completeopt=longest,menu

"-----------------------------------------------------------------

" plugin - Mark.vim 给各种tags标记不同的颜色,便于观看调式的插件。
"   ,hl”光标下的单词或者文本高亮
"   ,hh会清除该单词的高亮。如果在高亮单词外输入则清除所有的高亮
"   ,hr来高亮符合输入一个正则表达式的文本
nmap <silent> <leader>hl <Plug>MarkSet
nmap <silent> <leader>hh <Plug>MarkClear
nmap <silent> <leader>hr <Plug>MarkRegex
vmap <silent> <leader>hl <Plug>MarkSet
vmap <silent> <leader>hh <Plug>MarkClear
vmap <silent> <leader>hr <Plug>MarkRegex
" 你可以在高亮文本上使用“,#”或“,*”来上索高亮文本。在使用了“,#”或“,*
" ”后,就可以直接输入“#”或“*”来继续查找该高亮文本,直到你又用“#”或“
" *”查找了其它文本。

"-----------------------------------------------------------------

" plugin - EnhCommentify.vim  注释代码用的,

" <leader>c 这个注释之后光标会跳转到下一行。

" <leader>x 用这个注释之后,光标仍然停留在当前行。
nmap <silent> <F3> ,x
vmap <silent> <F3> ,x
imap <silent> <F3> ,x



let g:EnhCommentifyUseSyntax = 'Yes'         "自动按照类型进行不同的注释
let g:EnhCommentifyMultiPartBlocks = 'yes'   "注释多行时不要每行都加注释符

let g:EnhCommentifyAlignRight = 'yes'        "注释自动对齐
" let g:EnhCommentifyRespectIndent = 'Yes'    "注释靠近代码

let g:EnhCommentifyPretty = 'Yes'             "注释和文字中间加空格

"-----------------------------------------------------------------

" plugin - NERD_tree.vim 以树状方式浏览系统中的文件和目录
" :ERDtree 打开NERD_tree         :NERDtreeClose    关闭NERD_tree
" NERDTree  <f10>开启和关闭
map <F10> :NERDTreeToggle<CR>
" o 打开关闭文件或者目录         t 在标签页中打开
" T 在后台标签页中打开           ! 执行此文件
" p 到上层目录                   P 到根目录
" K 到第一个节点                 J 到最后一个节点
" u 打开上层目录                 m 显示文件系统菜单(添加、删除、移动操作)
" r 递归刷新当前目录             R 递归刷新当前根目录

"-----------------------------------------------------------------
" plugin - NeoComplCache.vim    自动补全插件
" 自动补全结合supertab插件使用tab补全或者ctrl+n
" imap <C-t> <C-x><C-o>
let g:neocomplcache_enable_at_startup = 1 " Use smartcase.
let g:neocomplcache_enable_smart_case = 1 " Use camel case completion.
let g:neocomplcache_enable_camel_case_completion = 1 " Use underbar completion.
let g:neocomplcache_enable_underbar_completion = 1 " Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
" Define dictionary.
let g:NeoComplCache_DictionaryFileTypeLists = {'default' : '','php' :'/usr/share/vim/vim70/dict/php.dict'}
" imap <silent><C-T> <Plug>(neocomplcache_snippets_expand)
" smap <silent><C-T> <Plug>(neocomplcache_snippets_expand)
" Define keyword.
if !exists('g:neocomplcache_keyword_patterns')
>->-let g:neocomplcache_keyword_patterns = {}
endif
>->-let g:neocomplcache_keyword_patterns['default'] = '\h\w*'

"-----------------------------------------------------------------

" plugin -supertab  智能tab插件
" tab键自动补全
let g:SuperTabDefaultCompletionType="<C-X><C-O>"

"-----------------------------------------------------------------

" plugin - bufexplorer.vim Buffers切换
" <F8>打开文件列表窗口(上下方式)
map <F8> <leader>bs
" ,be 全屏方式查看全部打开的文件列表
" ,bv 左右方式查看   ,bs 上下方式查看
" 切换Buffers的操作快捷方式: shirt+l.shift+h
let g:bufExplorerDefaultHelp=0       " Do not show default help.
let g:bufExplorerShowRelativePath=0  " 不显示相对路径(全路径)
let g:bufExplorerSortBy='mru'        " Sort by most recently used.
let g:bufExplorerSplitRight=0        " Split left.
let g:bufExplorerSplitBelow=0        " Split new window above current

"-----------------------------------------------------------------

" plugin - Tlist相关设置
" <F9>开启和关闭

map <F9> :TlistToggle<cr>
let Tlist_Auto_Highlight_Tag = 1
let Tlist_Auto_Open = 0let Tlist_Auto_Update = 1
let Tlist_Close_On_Select = 0
let Tlist_Compact_Format = 0
let Tlist_Display_Prototype = 0
let Tlist_Display_Tag_Scope = 1
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 1

let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
let Tlist_Max_Submenu_Items = 1
let Tlist_Max_Tag_Length = 30
let Tlist_Process_File_Always = 0
let Tlist_Show_Menu = 0
let Tlist_Show_One_File = 0
let Tlist_Sort_Type = "order"
let Tlist_Use_Horiz_Window = 0
let Tlist_Use_Right_Window = 1
let Tlist_WinWidth = 20
let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'

"-----------------------------------------------------------------

"折叠设置
set diffexpr=MyDiff()
function! MyDiff()
 let opt = '-a --binary '
 if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
 if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
 let arg1 = v:fname_in
 if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
 let arg2 = v:fname_new
 if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
 let arg3 = v:fname_out
 if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
 let eq = ''
 if $VIMRUNTIME =~ ' '
   if &sh =~ '\<cmd'
     let cmd = '""' . $VIMRUNTIME . '\diff"'
     let eq = '"'
   else
     let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
   endif
 else
   let cmd = $VIMRUNTIME . '\diff'
 endif
 silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction

所安装的插件列表如下:

在自己的centos vps上装了L2TP,但是在win下一直无法连接,最初显示800错误,在建立的那个vpn链接里选择“网络”选项卡,里面有个“VPN类型”,在这里选择我配置的那个“L2TP IPsec VPN”选项后再连接,出现768错误,从这个地方http://xinyangla.com/592.shtml找到了解决方案,现在贴出来:

如果用vpn PPTP登录方式无法登录那么可以尝试用L2TP登录 常见使用windows xp很容易出现768错误,可以尝试以下方法解决。 在开始中点击运行,输入命令“services.msc”,然后在服务中找到并启用“IPSEC services”即可,如为了方便以后经常使用L2TP IPsec VPN,则可以把该项服务设置为“自动”。 也可以在桌面单击选定我的电脑 然后右键点管理 然后在管理菜单找到服务 然后打开在服务项找到IPSEC SERVICES 单击这个服务右键属性设为自动就可以了 也许还回出现 那么请导入l2tp 768 注册表补丁 一般就可以解决这个问题

今天大半天就在折腾这个了,直接复制帖子了,不多说了……

由于ucenter是用socket通讯,但是nginx下socket支持不好,会出现连接超时,整个网站死掉,出现症状:头像不能编辑,discuz登陆退出不了,uc里面通讯一直是“正在连接”。

好了,说正题了

很简单,iis、lighttpd、apache下ucenter 通讯正常,

ok 那就让ucenter跑在iis、lighttpd、apache下,

虚拟主机用户 需要两个虚拟主机,
一个iis或者lighttpd、apache环境,专门跑ucenter,域名用uc.xxx.com
一个nginx环境,专门跑discuz等等这些 高耗资源的程序

有独立主机、vps的 就可以建两个web服务器,这时候跑uc.xxx.com的web服务器就要另外指定端口了,比如88,访问ucenter就可以用uc.xxx.com:88
另一个那就是nginx咯

ok 布置完了,再去uc里面看 是不是发现 “正在连接”没了, 出现 久违的 连接成功 !!!

昨天给所里一哥们装双系统XP+LinuxDeepin(这是深度从ubuntu11.04改过来的,适合新手和喜欢偷懒的老手),结果安装完LD后,LD顺利能进入,但是XP进不去了,具体现象就是在选择系统的菜单里选择XP后,过两秒钟又跳回选择菜单了……

各种修改grub都没有成功。偶然间发现一条信息,说ubuntu默认安装的时候,会把引导装入mbr,这样会破坏XP的引导部分。于是乎,找了找修复mbr的命令,最终,利用一个原装的XP盘引导进故障控制台后,分别使用fixmbr和fixboot两天命令把XP的mbr修复OK,重启能够引导进入XP,然后又用LiveUSB引导进入LD,升级了一下grub2后,一切ok~

0%