; Linux Services and Security–part2 | Linux运维部落

Linux Services and Security–part2

一、请描述一次完整的http请求处理过程

(1).建立或处理连接:接收请求或拒绝请求;

(2).接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;

接收请求的模型:

并发访问响应模型:

单进程I/O模型:启动一个进程处理用户请求;这意味着,一次只能处理一个请求,多个请求被串行响应;

多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

复用的I/O结构:一个进程响应n个请求;

多线程模式:一个进程生成n个线程,一个线程处理一个请求;

事件驱动(event-driven):一个进程直接n个请求;

复用的多进程I/O结构:启动多个(m)个进程,每个进程生成(n)个线程;

响应的请求的数量:m*n

(3).处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;

处理请求:分析请求报文的http请求报文首部http协议:http请求报文首部 http响应报文首部请求报文首部的格式。

<method><URL><VERSION>

HEADERS:(name:value)

<request body>

(4).访问资源:获取请求报文中请求的资源;

访问资源:获取请求报文中请求的资源。web服务器,即存放了web资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于本地文件系统某路径下;此路径称为DocRoot

(5).构建响应报文:

(6).发送响应报文:

(7).记录日志:

二、httpd所支持的处理模型有哪些,他们的分别使用于哪些环境

MPM:Multipath processing Modules (多路处理模块)

(1).prefork:多进程模型,每个进程响应一个请求;

一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

n个子进程:每个子进程处理一个请求;

工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;

(2).worker:多进程多线程模型,每线程处理一个用户请求;

一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

多个子进程:每个子进程负责生成多个线程;

每个线程:负责响应用户请求;

并发响应数量:m*n

m:子进程数量

n:每个子进程所能创建的最大线程数量;

(3).event:事件驱动模型,多进程模型,每个进程响应多个请求;

一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

子进程:基于事件驱动机制直接响应多个请求;

httpd-2.2: 仍为测试使用模型;

httpd-2.4:event可生产环境中使用;

三、源码编译安装LAMP环境(基于wordpress程序),并写出详细的安装、配置、测试过程。

首先安装开发环境:

yumgroupinstall“DevelopmentTools”“ServerPlatformDevelopment”-y

1.编译安装Apache

解决依赖关系

1).编译安装apr

tarxfapr-1.5.0.tar.bz2

cdapr-1.5.0

./configure–prefix=/usr/local/apr

make&&makeinstall

2).编译安装apr-util

tarxfapr-util-1.5.3.tar.bz2

cdapr-util-1.5.3

./configure–prefix=/usr/local/apr-util–with-apr=/usr/local/apr

make&&makeinstall

3).httpd-2.4.9编译过程也要依赖于pcre-devel软件包,需要事先安装。

yuminstall-ypcre-devel

tarxfhttpd-2.4.9.tar.bz2

cdhttpd-2.4.9

./configure–prefix=/usr/local/apache–sysconfdir=/etc/httpd24–enable-so–enable-ssl–enable-cgi–enable-rewrite–with-zlib–with-pcre–with-apr=/usr/local/apr–with-apr-util=/usr/local/apr-util–enable-modules=most–enable-mpms-shared=all–with-mpm=prefork

make&&makeinstall

提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:

#!/bin/bash

#

#httpdStartupscriptfortheApacheHTTPServer

#

#chkconfig:–8515

#description:ApacheisaWorldWideWebserver.Itisusedtoserve

#HTMLfilesandCGI.

#processname:httpd

#config:/etc/httpd/conf/httpd.conf

#config:/etc/sysconfig/httpd

#pidfile:/var/run/httpd.pid

#Sourcefunctionlibrary.

./etc/rc.d/init.d/functions

if[-f/etc/sysconfig/httpd];then

./etc/sysconfig/httpd

fi

#StarthttpdintheClocalebydefault.

HTTPD_LANG=${HTTPD_LANG-“C”}

#Thiswillpreventinitlogfromswallowingupapass-phrasepromptif

#mod_sslneedsapass-phrasefromtheuser.

INITLOG_ARGS=””

#SetHTTPD=/usr/sbin/httpd.workerin/etc/sysconfig/httpdtouseaserver

#withthethread-based“worker”MPM;BEWARNEDthatsomemodulesmaynot

#workcorrectlywithathread-basedMPM;notablyPHPwillrefusetostart.

#Pathtotheapachectlscript,serverbinary,andshort-formformessages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

start(){

echo-n$”Starting$prog:”

LANG=$HTTPD_LANGdaemon–pidfile=${pidfile}$httpd$OPTIONS

RETVAL=$?

echo

[$RETVAL=0]&&touch${lockfile}

return$RETVAL

}

stop(){

echo-n$”Stopping$prog:”

killproc-p${pidfile}-d10$httpd

RETVAL=$?

echo

[$RETVAL=0]&&rm-f${lockfile}${pidfile}

}

reload(){

echo-n$”Reloading$prog:”

if!LANG=$HTTPD_LANG$httpd$OPTIONS-t>&/dev/null;then

RETVAL=$?

echo$”notreloadingduetoconfigurationsyntaxerror”

failure$”notreloading$httpdduetoconfigurationsyntaxerror”

else

killproc-p${pidfile}$httpd-HUP

RETVAL=$?

fi

echo

}

#Seehowwewerecalled.

case“$1″in

start)

start

;;

stop)

stop

;;

status)

status-p${pidfile}$httpd

RETVAL=$?

;;

restart)

stop

start

;;

condrestart)

if[-f${pidfile}];then

stop

start

fi

;;

reload)

reload

;;

graceful|help|configtest|fullstatus)

$apachectl$@

RETVAL=$?

;;

*)

echo$”Usage:$prog{start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}”

exit1

esac

exit$RETVAL

由于脚本中涉及到pid的设置,在/etc/httpd24/httpd.conf主配置文件中添加

PidFile“/var/run/httpd.pid”

给脚本执行权限

chmod+x/etc/rc.d/init.d/httpd

添加服务到开机启动里

chkconfig–addhttpd

chkconfighttpdon

完成操作后就可以使用servicehttpdstart/stop等命令来起停服务。

2.编译安装MySQL

添加mysql用户

groupadd–rmysql

useradd–gmysql–r–s/sbin/nologin–M–d/mydata/datamysql

创建数据存放目录/mydata/data

mkdir–pv/mydata/data

修改目录所属主及所属组

chown–Rmysql:mysql/mydata/data

1). 安装并初始化mysql-5.5.33

tarxfmysql-5.5.33-linux2.6-x86_64-C/usr/local

cd/usr/local/

ln-svmysql-5.5.33-linux2.6-x86_64mysql

cdmysql

chown-Rroot.mysql.

2).执行mysql初始化:

/usr/local/mysql/scripts/mysql_install_db–datadir=/mydata/data–user=mysql

为mysql提供主配置文件

mkdir/etc/mysql

cd/usr/local/mysql

cpsupport-files/my-large.cnf/etc/mysql/my.cnf

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:

thread_concurrency=2

另外还需要添加如下行指定mysql数据文件的存放位置:

datadir=/mydata/data

添加

innodb_file_per_table=onskip_name_resolve=on

3). 为mysql提供sysv服务脚本

cd/usr/local/mysql

cpsupport-files/mysql.server/etc/rc.d/init.d/mysqld

chmod+x/etc/rc.d/init.d/mysqld

添加至服务列表:

chkconfig–addmysqld

chkconfigmysqldon

3.编译安装php-5.4.26

解决依赖关系

yum-yinstallbzip2-devellibmcrypt-devellibxml2-devel

1). 编译安装php-5.4.26

tarxfphp-5.4.26.tar.bz2

cdphp-5.4.26

./configure–prefix=/usr/local/php–with-mysql=/usr/local/mysql–with-openssl–with-mysqli=/usr/local/mysql/bin/mysql_config–enable-mbstring–with-freetype-dir–with-jpeg-dir–with-png-dir–with-zlib–with-libxml-dir=/usr–enable-xml–enable-sockets–with-apxs2=/usr/local/apache/bin/apxs–with-mcrypt–with-config-file-path=/etc–with-config-file-scan-dir=/etc/php.d–with-bz2–enable-maintainer-zts

make&&makeinstall

为php提供配置文件:

cpphp.ini-production/etc/php.ini

2). 编辑apache配置文件/etc/httpd24/httpd.conf,以使apache支持php

a、添加如下二行

AddTypeapplication/x-httpd-php.php

AddTypeapplication/x-httpd-php-source.phps

b、定位至DirectoryIndexindex.html

修改为:

DirectoryIndexindex.phpindex.html

测试页面:在/usr/local/apache/htdoc/下添加index.php页面

<?php

phpinfo();

?>

4.wordpress程序的安装

解压WordPress到/usr/local/apache/htdoc/wordpress

unzipwordpress-3.3.1-zh_CN.zip–d/usr/local/apache/htdoc/wordpress

启动msyql服务,进入mysql

systemctl start httpd.service

cd /usr/local/mysql/bin

./mysql -uroot -p

新建数据库wordpress

createdatabasewordpress;

修改root用户的密码

进入mysql数据库,usemysql;

修改root密码,updateusersetpassword=PASSWORD(‘magedu’)whereUser=’root’;

重启msqld服务

在浏览器中输入http://192.168.4.240/wordpress

根据提示填写数据库名称,用户名,密码。完成后根据提示创建wp-config.php文件。设置admin的密码等。完成WordPress的安装。

四、建立httpd服务器(基于编译的方式进行),要求:

提供两个基于名称的虚拟主机:

(a)www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access;

(b)www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access;

(c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;

(d)通过www1.stuX.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);

配置文件位置

首先要在主配置文件中找到Include/etc/httpd24/extra/httpd-vhosts.conf,去掉其前面的注释,或者复制一行,使得配置文件能读取到vhosts.conf文件。

访问控制命令:

htpasswd–c–m/etc/httpd24/extra/.htpasswdstatus

/etc/httpd24/extra/httpd-vhosts.conf

DocumentRoot“/web/vhosts/www1”

ServerNamewww1.stuX.com

ErrorLog“/var/log/httpd/www1.err”

CustomLog“/var/log/httpd/www1.access”common

SetHandlerserver-status

Orderdeny,allow

Denyfromall

Allowfrom192.168.194

OptionsNone

AllowOverrideNone

AuthTypeBasic

AuthName“Warring~~~~~~~~~~~”

AuthUserFile“/etc/httpd24/extra/.htpasswd”

Requireuserstatus

DocumentRoot“/web/vhosts/www2”

ServerNamewww2.stuX.com

ErrorLog“/var/log/httpd/www2.err”

CustomLog“/var/log/httpd/www2.access”common

五、为第4题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;

(1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu);

(2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com;

在主配置文件/etc/httpd24/httpd.conf中找到Include/etc/httpd24/extra/httpd-ssl.conf,取消注释或者复制一行。

相关的模块LoadModulessl_modulemodules/mod_ssl.so取消注释

配置文件/etc/httpd24/extra/httpd-ssl.conf

修改配置文件

DocumentRoot“/web/vhosts/www2”

ServerNamewww2.stuX.com:443

SSLCertificateKeyFile“/etc/httpd24/ssl/httpd.key”

SSLCertificateFile“/etc/httpd24/ssl/www2.httpd.crt”

在/etc/httpd24/创建目录ssl

mkdir/etc/httpd24/ssl

生成证书请求

umask077;opensslgenrsa-out/etc/httpd24/ssl/httpd.key2048

opensslreq-new-key/etc/httpd24/ssl/httpd.key-days365-out/etc/httpd24/ssl/httpd.csr

opensslreq-new-key/etc/httpd24/ssl/httpd.key-days365-out/etc/httpd24/ssl/httpd.csr

Youareabouttobeaskedtoenterinformationthatwillbeincorporated

intoyourcertificaterequest.

WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.

Therearequiteafewfieldsbutyoucanleavesomeblank

Forsomefieldstherewillbeadefaultvalue,

Ifyouenter‘.’,thefieldwillbeleftblank.

—–

CountryName(2lettercode)[XX]:CN

StateorProvinceName(fullname)[]:HA

LocalityName(eg,city)[DefaultCity]:ZZ

OrganizationName(eg,company)[DefaultCompanyLtd]:MagEdu

OrganizationalUnitName(eg,section)[]:Ops

CommonName(eg,yournameoryourserver’shostname)[]:www2.stuX.com

EmailAddress[]:admin@stuX.com

Pleaseenterthefollowing‘extra’attributes

tobesentwithyourcertificaterequest

Achallengepassword[]:

Anoptionalcompanyname[]:

将请求文件发送给CA,在CA服务器上生成www2.httpd.crt,并把证书发还回来

六、在LAMP架构中,请分别以php编译成httpd模块形式和php以fpm工作为独立守护进程的方式来支持httpd,列出详细的过程。

php以fpm方式工作的LAMP架构,编译过程如下:

首先安装开发环境:

yumgroupinstall“DevelopmentTools”“ServerPlatformDevelopment”-y

1.编译安装Apache

1). 编译安装apr,apr-util

tarxfapr-1.5.0.tar.bz2

cdapr-1.5.0

./configure–prefix=/usr/local/apr

make&&makeinstall

tarxfapr-util-1.5.3.tar.bz2

cdapr-util-1.5.3

./configure–prefix=/usr/local/apr-util–with-apr=/usr/local/apr

make&&makeinstall

2).编译安装Apache

tarxfhttpd-2.4.9.tar.bz2

cdhttpd-2.4.9

./configure–prefix=/usr/local/apache–sysconfdir=/etc/httpd24–enable-so–enable-ssl–enable-cgi–enable-rewrite–with-zlib–with-pcre–with-apr=/usr/local/apr–with-apr-util=/usr/local/apr-util–enable-modules=most–enable-mpms-shared=all–with-mpm=prefork

#make&&makeinstall

3).提供SysV服务脚本/etc/rc.d/init.d/httpd

#!/bin/bash

#

#httpdStartupscriptfortheApacheHTTPServer

#

#chkconfig:–8515

#description:ApacheisaWorldWideWebserver.Itisusedtoserve\

#HTMLfilesandCGI.

#processname:httpd

#config:/etc/httpd/conf/httpd.conf

#config:/etc/sysconfig/httpd

#pidfile:/var/run/httpd.pid

#Sourcefunctionlibrary.

./etc/rc.d/init.d/functions

if[-f/etc/sysconfig/httpd];then

./etc/sysconfig/httpd

fi

#StarthttpdintheClocalebydefault.

HTTPD_LANG=${HTTPD_LANG-“C”}

#Thiswillpreventinitlogfromswallowingupapass-phrasepromptif

#mod_sslneedsapass-phrasefromtheuser.

INITLOG_ARGS=””

#SetHTTPD=/usr/sbin/httpd.workerin/etc/sysconfig/httpdtouseaserver

#withthethread-based“worker”MPM;BEWARNEDthatsomemodulesmaynot

#workcorrectlywithathread-basedMPM;notablyPHPwillrefusetostart.

#Pathtotheapachectlscript,serverbinary,andshort-formformessages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

start(){

echo-n$”Starting$prog:”

LANG=$HTTPD_LANGdaemon–pidfile=${pidfile}$httpd$OPTIONS

RETVAL=$?

echo

[$RETVAL=0]&&touch${lockfile}

return$RETVAL

}

stop(){

echo-n$”Stopping$prog:”

killproc-p${pidfile}-d10$httpd

RETVAL=$?

echo

[$RETVAL=0]&&rm-f${lockfile}${pidfile}

}

reload(){

echo-n$”Reloading$prog:”

if!LANG=$HTTPD_LANG$httpd$OPTIONS-t>&/dev/null;then

RETVAL=$?

echo$”notreloadingduetoconfigurationsyntaxerror”

failure$”notreloading$httpdduetoconfigurationsyntaxerror”

else

killproc-p${pidfile}$httpd-HUP

RETVAL=$?

fi

echo

}

#Seehowwewerecalled.

case“$1″in

start)

start

;;

stop)

stop

;;

status)

status-p${pidfile}$httpd

RETVAL=$?

;;

restart)

stop

start

;;

condrestart)

if[-f${pidfile}];then

stop

start

fi

;;

reload)

reload

;;

graceful|help|configtest|fullstatus)

$apachectl$@

RETVAL=$?

;;

*)

echo$”Usage:$prog{start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}”

exit1

esac

exit$RETVAL

给脚本执行权限

chmod+x/etc/rc.d/init.d/httpd

将服务加入运行级别

chkconfig–addhttpd

修改httpd的主配置文件,设置其Pid文件的路径

编辑/etc/httpd24/httpd.conf,添加如下行即可:

PidFile“/var/run/httpd.pid”

2.编译安装mysql

添加mysql用户

groupadd–rmysql

useradd–gmysql–r–s/sbin/nologin–M–d/mydata/datamysql

创建数据存放目录/mydata/data

mkdir–pv/mydata/data

修改目录所属主及所属组

chown–Rmysql:mysql/mydata/data

1). 安装并初始化mysql-5.5.33

tarxfmysql-5.5.33-linux2.6-x86_64-C/usr/local

cd/usr/local/

ln-svmysql-5.5.33-linux2.6-x86_64mysql

cdmysql

chown-Rroot.mysql.

2).执行mysql初始化:

/usr/local/mysql/scripts/mysql_install_db–datadir=/mydata/data–user=mysql

为mysql提供主配置文件

mkdir/etc/mysql

cd/usr/local/mysql

cpsupport-files/my-large.cnf/etc/mysq/my.cnf

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:

thread_concurrency=2

另外还需要添加如下行指定mysql数据文件的存放位置:

datadir=/mydata/data

添加innodb_file_per_table=onskip_name_resolve=on

3). 为mysql提供sysv服务脚本

cd/usr/local/mysql

cpsupport-files/mysql.server/etc/rc.d/init.d/mysqld

chmod+x/etc/rc.d/init.d/mysqld

添加至服务列表:

chkconfig–addmysqld

chkconfigmysqldon

3.编译安装fpm方式工作的php

tarxfphp-5.4.26.tar.bz2

cdphp-5.4.26

./configure–prefix=/usr/local/php–with-mysql=/usr/local/mysql–with-openssl–with-mysqli=/usr/local/mysql/bin/mysql_config–enable-mbstring–with-freetype-dir–with-jpeg-dir–with-png-dir–with-zlib–with-libxml-dir=/usr–enable-xml–enable-sockets–enable-fpm–with-mcrypt–with-config-file-path=/etc–with-config-file-scan-dir=/etc/php.d–with-bz2

其中—enable-fpm选项指定php为使用fpm工作方式

make

makeintall

1).配置php-fpm

为php-fpm提供SysVinit脚本,并将其添加至服务列表:

cpsapi/fpm/init.d.php-fpm/etc/rc.d/init.d/php-fpm

给脚本执行权限

chmod+x/etc/rc.d/init.d/php-fpm

将脚本加入运行级别并设置为开机启动

chkconfig–addphp-fpm

chkconfigphp-fpmon

为php-fpm提供配置文件:

cp/usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf

编辑php-fpm的配置文件:

vim/usr/local/php/etc/php-fpm.conf

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pm.max_children=50

pm.start_servers=5

pm.min_spare_servers=2

pm.max_spare_servers=8

pid=/usr/local/php/var/run/php-fpm.pid

接下来就可以启动php-fpm了:

servicephp-fpmstart

默认情况下,fpm监听在127.0.0.1的9000端口

netstat-nltp|grepphp-fpm

tcp00127.0.0.1:90000.0.0.0:*LISTEN10720/php-fpm

2).配置httpd-2.4.9

启用httpd的相关模块

在Apachehttpd2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

LoadModuleproxy_modulemodules/mod_proxy.so

LoadModuleproxy_fcgi_modulemodules/mod_proxy_fcgi.so

编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

#vim/etc/httpd/httpd.conf

a、添加如下二行

AddTypeapplication/x-httpd-php.php

AddTypeapplication/x-httpd-php-source.phps

b、定位至DirectoryIndexindex.html

修改为:

DirectoryIndexindex.phpindex.html

c、添加php页面重定向,使得php页面的请求都转到php-fpm服务

ProxyRequestsOff

ProxyPassMatch^/(.*\.php)$fcgi://127.0.0.1:9000/usr/local/apache/htdocs/$1

在/usr/local/apache/htdocs/index.php里添加测试代码,测试php

<?php

phpinfo();

?>

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:/88356

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表(1条)

  • 马哥教育
    马哥教育 2017-12-02 09:14

    写的不错,搭建过程很清晰,mysql连接那一步应该写上。以后注意。

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达主管QQ  万达娱乐登录  万达直属  万达娱乐平台  华宇招商  测试  万达开户  万达娱乐直属  万达娱乐招商QQ