Linux学习第十二周总结

linux学习第十一周总结

  • http协议和APACHE
  • 实现LAMP架构
  • 日志管理
  • 网络文件共享服务

    一 、HTTP协议和apache

    1.HTTP 简介
    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP 工作原理

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。

Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

主要特点

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S及C/S模式。

HTTP之URL
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息

URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL可以看出,一个完整的URL包括以下几部分:
1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

(原文:http://blog.csdn.net/ergouge/article/details/8185219

Get请求例子,使用Charles抓取的request:

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。

第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等

第三部分:空行,请求头部后面的空行是必须的
即使第四部分的请求数据为空,也必须有空行。

第四部分:请求数据也叫主体,可以添加任意的其他数据。
这个例子的请求数据为空。

POST请求例子,使用Charles抓取的request:
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley
第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。

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

1、建立连接:接收或拒绝连接请求

2、接收请求:接收客户端请求报文中对某资源的一次请求的过程

Web访问响应模型(Web I/O)
单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
复用I/O结构:启动一个进程,同时响应N个连接请求
实现方法:多线程模型和事件驱动
多线程模型:一个进程生成N个线程,每线程响应一个连接请求
事件驱动:一个进程处理N个请求
复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

3、处理请求:服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
元数据:请求报文首部

<method> <URL> <VERSION>
HEADERS 格式 name:value
<request body>
示例:
Host: www.magedu.com 请求的主机名称
Server: Apache/2.4.7
HTTP常用请求方式,Method
GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

4、访问资源:

服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
资源放置于本地文件系统特定的路径:DocRoot
DocRoot  /var/www/html
/var/www/html/images/logo.jpg
http://www.magedu.com/images/logo.jpg
web服务器资源路径映射方式:
(a) docroot
(b) alias
(c) 虚拟主机docroot
(d) 用户家目录docroot

5、构建响应报文:

一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
永久重定向:http://www.360buy.com
临时重定向:http://www.taobao.com
3)MIME类型:
Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时
显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型
类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)"最好"

6、发送响应报文

Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了

7、记录日志

最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

Httpd 常见配置

1、显示服务器版本信息

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.
After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.
建议使用:ServerTokens Prod

2、修改监听的IP和Port

Listen [IP:]PORT
(1) 省略IP表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次
Listen 80
Listen 8080
示例:
Listen 192.168.1.100:8080
Lsten 80

3、持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应
折衷:使用较短的持久连接时间
设置:KeepAlive On|Off
KeepAliveTimeout 15
测试:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP

4、DSO: Dynamic Shared Object

加载动态模块配置,不需重启即生效
/etc/httpd/conf/httpd.conf
Include conf.modules.d/*.conf
配置指定实现模块加载格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)
示例:LoadModule auth_basic_module modules/mod_auth_basic.so
动态模块路径: /usr/lib64/httpd/modules/
查看静态编译的模块
httpd -l
查看静态编译及动态装载的模块
httpd –M

5、MPM( Multi-Processing Module)多路处理模块
prefork, worker, event
切换使用的MPM
/etc/httpd/conf.modules.d/00-mpm.conf
启用要启用的MPM相关的LoadModule指令即可

prefork的配置:

StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多进程数,最大20000
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)

worker的配置:

ServerLimit 16
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

6、定义'Main' server的文档页面路径

DocumentRoot “/path”
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置
示例:
DocumentRoot "/app/data“
http://HOST:PORT/test/index.html --> /app/data/test/index.html
注意:SELinux和iptables的状态

7.定义站点主页面
DirectoryIndex index.html

8、站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问控制
访问控制机制有两种:客户端来源地址,用户账号
文件系统路径:
<Directory “/path">
...
</Directory>
<File “/path/file”>
...
</File>
<FileMatch "PATTERN">
...
</FileMatch>

URL路径:
<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>

示例:
<FilesMatch "\.(gif|jpe?g|png)$">
<Files “?at.*”> 通配符
<Location /status>
<LocationMatch "/(extra|special)/data">

9、<Directory>中“基于源地址”实现访问控制

(1) Options:后跟1个或多个以空白字符分隔的选项列表
在选项前的+,- 表示增加或删除指定选项

常见选项:
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All: 全部允许

示例:
<Directory /web/docs> Options Indexes FollowSymLinks </Directory> <Directory /web/docs/spec> Options FollowSymLinks </Directory>

(2) AllowOverride

与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令
只对<directory>语句有效
AllowOverride All: .htaccess中所有指令都有效
AllowOverride None: .htaccess 文件无效
AllowOverride AuthConfig .htaccess 文件中,除了AuthConfig 其它指令都无法生效

(3) 基于IP的访问控制:

无明确授权的目录,默认拒绝
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all denied
控制特定的IP访问:
Require ip IPADDR:授权指定来源的IP访问
Require not ip IPADDR:拒绝特定的IP访问
控制特定的主机访问:
Require host HOSTNAME:授权特定主机访问
Require not host HOSTNAME:拒绝 HOSTNAME:
FQDN:特定主机
domin.tld:指定域名下的所有主机

不能有失败,至少有一个成功匹配才成功,即失败优先
<RequireAll>
Require all granted
Require not ip 172.16.1.1 拒绝特定IP
</RequireAll>
多个语句有一个成功,则成功,即成功优先
<RequireAny>
Require all denied
require ip 172.16.1.1 允许特定IP
</RequireAny

10、日志设定

日志类型:
    访问日志
    错误日志
错误日志:
    ErrorLog logs/error_log
    LogLevel warn
    LogLevel 可选值: debug, info, notice, warn,error, crit, alert, emerg

访问日志:
定义日志格式:LogFormat format strings
LogFormat "%h %l %u %{%F %T}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" testlog
使用日志格式:
CustomLog logs/access_log testlog
参考帮助:http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
%h 客户端IP地址
%l 远程用户,启用mod_ident才有效,通常为减号“-”
%u 验证(basic,digest)远程用户,非登录访问时,为一个减号“-”
%t 服务器收到请求时的时间
%r First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本
%>s 响应状态码
%b 响应报文的大小,单位是字节;不包括响应报文http首部
%{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
%{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序

11、设定默认字符集
AddDefaultCharset UTF-8 此为默认值
中文字符集:GBK, GB2312, GB18030

12、定义路径别名

格式:Alias /URL/ "/PATH/"
DocumentRoot "/www/htdocs"
http://www.magedu.com/download/bash.rpm
==>/www/htdocs/download/bash.rpm
Alias /download/ "/rpms/pub/"
http://www.magedu.com/download/bash.rpm
==>/rpms/pub/bash.rpm
http://www.magedu.com/images/logo.png
==>/www/htdocs/images/logo.png

13、基于用户的访问控制
认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
认证方式两种:
basic:明文
digest:消息摘要认证,兼容性差
安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
用户的账号和密码
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL数据库,ldap目录存储,nis等

14、实现用户家目录的http共享
基于模块mod_userdir.so实现
相关设置:

vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#UserDir disabled
UserDir public_html #指定共享目录的名称
</IfModule>
准备目录
su – wang;mkdir ~/public_html
setfacl –m u:apache:x ~wang
访问
http://localhost/~wang/index.html

15、ServerSignature On | Off | EMail
当客户请求的网页并不存在时,服务器将产生错误文档,如果打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息,如果不对外显示这些信息,就可以将这个参数设置为Off
设置为Email,将显示ServerAdmin 的Email提示

status页面

LoadModule status_module modules/mod_status.so
<Location "/status">
SetHandler server-status
</Location>
ExtendedStatus On 显示扩展信息

17、虚拟主机

站点标识: socket
IP相同,但端口不同
IP不同,但端口均为默认端口
FQDN不同: 请求报文中首部 Host: www.magedu.com
有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址
基于port:为每个虚拟主机使用至少一个独立的port
基于FQDN:为每个虚拟主机使用至少一个FQDN

二、LAMP

LAMP介绍

LAM(M)P:
L:linux
A:apache (httpd)
M:mysql, mariadb
M:memcached
P:php, perl, python

WEB资源类型:
静态资源:原始形式与响应内容一致,在客户端浏览器执行
动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行
结果返回给客户端

Web相关语言
客户端技术: html,javascript,css,jpg
服务器端技术:php, jsp,python,asp

CGI:Common Gateway Interface
可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程
序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准

请求流程:
Client -- (http) --> httpd -- (cgi) --> application server (program file)
-- (mysql) --> mysql

php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境)

实现过程

Linux上的Mysql安装及配置

1.给Mysql的数据目录创建单独的逻辑卷

mkdir /mydata 

#创建存放数据的目录 

fdisk /dev/sda 

#新建分区属性为8e 

pvcreate /dev/sda5 

vgcreate myvg /dev/sda5 

lvcreate –L 4G –n mylv myvg 

mke2fs –L MYDATA –j /dev/myvg/mylv  

vim /etc/fstab    

LABEL=MYDATA                    /mydata                ext3        defaults                0 0    

#加入这一行实现开机自动挂载 

mount –a 

mkdir /mydata/data 

2.创建mysql用户

groupadd –g 3306 mysql 

useradd –g 3306 –u 3306 –M –s /sbin/nologin 

chown –R mysql:mysql /mydata

3.解压mysql-5.5.15-linux2.6-i686.tar.gz,使用其中脚本进行初始化

tar xvf mysql-5.5.15-linux2.6-i686.tar.gz –C /usr/local/ 

cd /usr/local 

ln –vs mysql-5.5.15-linux2.6-i686 mysql 

cd /usr/local/mysql 

chown –R mysql:mysql ./* 

scripts/mysql_install_db --user=mysql --datadir=/mydata/data 

#初始化Mysql用户和数据路径 

chown –R root ./* 

#再将属主交还给root

4.创建mysqld服务

cp /usr/local/mysql/support-files/mysql.server    /etc/init.d/mysqld 

#导入服务脚本 

chkconfig –add mysqld

5.创建Mysql的配置文件

cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf 

vim /etc/my.cnf 

#找到[mysqld]下面的内容添加 

datadir= /mydata/data

6.加入mysql命令

vim /etc/profile 

PATH=$PATH:/usr/loca/mysql/bin 

#添加这一行

7.加入mysql库文件的路径

vim /etc/ld.so.conf.d/mysql.conf 

/usr/local/mysql/lib 

#写入这一行

8.设置头文件

ln –vs /usr/local/mysql/include /usr/include/mysql

9.添加man文件(如果你以后不想使用mysql的man文件不添加也是可以的)

vim /etc/man.conf 

MANPATH /usr/local/mysql/man 

#添加这一行

service mysql start

#启动mysql服务

netstat –tnl

#查看3306端口处于监听状态,说明已经配置成功。

编译安装Apache

1.解压httpd-2.2.19.tar.bz2软件包

tar xvf httpd-2.2.19.tar.bz2

  1. 设置安装规则、编译、安装

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable=ssl --enable-modules=most --enable-mods-share=most --enable-so

make

make install

  1. 制作服务启动脚本

vim /etc/init.d/httpd

#!/bin/bash

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

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

            . /etc/sysconfig/httpd 

fi

HTTPD_LANG=${HTTPD_LANG-"C"}

INITLOG_ARGS=""

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_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS 

            RETVAL=$? 

            echo 

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

            return $RETVAL 

}

stop() {

            echo -n $"Stopping $prog: " 

            killproc -p ${pidfile} -d 10 $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 $"not reloading due to configuration syntax error" 

            failure $"not reloading $httpd due to configuration syntax error" 

    else 

            killproc -p ${pidfile} $httpd -HUP 

            RETVAL=$? 

    fi 

    echo 

}

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}" 

            exit 1 

esac

exit $RETVAL

vim /etc/httpd/httpd.conf

PidFile "/var/run/httpd.pid"

#添加这一行

chkconfig --add httpd

service httpd start

#启动httpd服务

netstat -tnl

#查看80端口处于监听状态,说明已经配置成功。

PHP的编译安装

  1. 解压php-5.3.6.tar.bz2软件包

tar xvf php-5.3.6.tar.bz2

  1. 设置安装选项、编译、安装

./configure --prefix=/usr/local/php5 --sysconfdir=/etc/php --enable-mbstring --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-libmcrypt --with-gd --with-mysqli

make

makeinstall

  1. 加入命令路径

vim /etc/profile

PATH=$PATH:/usr/loca/php5/bin

#添加这一行

  1. 加入php库文件路径

vim /etc/ld.so.conf.d/php.conf

/usr/local/php5/lib

  1. 创建php配置文件

cp php.ini-production /usr/local/php5/lib/php.ini

#注意php.ini-production文件位于php-5.3.6.tar.bz2的解压目录

  1. 修改httpd服务配置文件使其支持php

vim /etc/httpd/httpd.conf

AddType Application/x-httpd-php .php

AddType Application/x-httpd-php-source .phps

#添加这两行在AddType xxxxxx行附近位置

DirectoryIndex index.php index.html

#添加index.php

service httpd restart

#重启httpd服务

到此简单的LAMP就配置成功了

LAMP的测试

为了测试LAMP,作者在这里选用了

wordpress-3.0.4-zh_CN.zip

phpMyAdmin-3.4.3.2-all-languages.tar.bz2

要使这两个网站都能在新搭建的LAMP运行,就得虚拟主机来实现。

这里作者选用基于主机名的虚拟主机(基于ip的虚拟主机过于消耗ipv4资源;基于端口的虚拟主机只有一个主页能使用默认80端口)

使用于主机名的虚拟主机配置网站:

  1. 配置虚拟主机

vim /etc/httpd/httpd.conf

#DocumentRoot "/usr/local/apache/htdocs"

#把此行注释

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

#把此行启用

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

#添加内容

<VirtualHost *:80>

DocumentRoot "/web/phpmyadmin" #网站所在目录

ServerName "phpmyadmin.redhat_hu.com" #虚拟主机名

ErrorLog "logs/phpmyadmin.error" #错误日志

CustomLog "logs/phpmyadmin.access" combined #访问日志

</VirtualHost>

<Directory "/web/phpmyadmin">

Order allow,deny

Allow from all

</Directory>

#设置访问控制为允许所有

<VirtualHost *:80>

DocumentRoot "/web/wordpress"

ServerName "wordpress.redhat_hu.com"

ErrorLog "logs/wordpress.error"

CustomLog "logs/wordpress.access" combined

</VirtualHost>

<Directory "/web/wordpress">

Order allow,deny

Allow from all

</Directory>

2.配置网站链接数据库

mkdir /web/{phpmyadmin,wordpress}

#创建网页所在目录 (此目录最好挂载逻辑卷,具体步骤见上文)

tar xvf phpMyAdmin-3.4.3.2-all-languages.tar.bz2

cp -R phpMyAdmin-3.4.3.2/* /web/phpmyadmin

unzip wordpress-3.0.4-zh_CN.zip

cp -R wordpress/* /web/ wordpress

#将两个网站文件放入对应文件夹

mv /web/wordpress/wp-config-simple.php /web/wordpress/wp-config.php

vim /web/wordpress/wp-config.php

define('DB_NAME', 'wordpress');

define('DB_USER', 'root');

define('DB_PASSWORD', 'redhat');

#设置对应数据库名登录用户以及密码

在mysql中创建数据库

mysql

#未设置密码可以直接登录

mysql>CREATE DATABASE wordpress;

mysql>SET PASSWORD FOR root@localhost=PASSWORD('redhat');

mysql>FLUSH PRIVILEGES;

#设置密码redhat

mysql>quit

全部配置完成

打开浏览器输入网址进行测试。

Ps:由于作者使用的是VMware虚拟机,C:\WINDOWS\system32\drivers\etc\hosts

中加入如下两行实现域名解析。

192.168.0.20 phpmyadmin.redhat_hu.com

192.168.0.20 wordpress.redhat_hu.com

三、日志管理

日志介绍
日志:
历史事件:时间,地点,人物,事件
日志级别:事件的关键性程度,Loglevel

系统日志服务:
sysklogd :CentOS 5之前版本
syslogd: system application 记录应用日志
klogd: linux kernel 记录内核日志

事件记录格式:
日期时间 主机 进程[pid]: 事件内容
C/S架构:通过TCP或UDP协议的服务完成日志记录传 送,将分布在不同主
机的日志实现集中管理

rsyslog

rsyslog特性:CentOS6和7
多线程
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle实现日志存储
强大的过滤器,可实现过滤记录日志信息中任意部分
自定义输出格式

ELK:elasticsearch, logstash, kibana
非关系型分布式数据库
基于apache软件基金会jakarta项目组的项目lucene
Elasticsearch是个开源分布式搜索引擎
Logstash对日志进行收集、分析,并将其存储供以后使用
kibana 可以提供的日志分析友好的 Web 界面

程序包:rsyslog
主程序:/usr/sbin/rsyslogd
CentOS 6:service rsyslog {start|stop|restart|status}
CentOS 7:/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
库文件: /lib64/rsyslog/*.so
配置文件格式:由三部分组成
MODULES:相关模块配置
GLOBAL DIRECTIVES:全局配置
RULES:日志记录相关的规则配置

RULES配置格式: facility.priority; facility.priority… target
facility:
    *: 所有的facility
    facility1,facility2,facility3,...:指定的facility列表
priority:
    *: 所有级别
    none:没有级别,即不记录
    PRIORITY:指定级别(含)以上的所有级别
    =PRIORITY:仅记录指定级别的日志信息
target:
    文件路径:通常在/var/log/,文件路径前的-表示异步写入
    用户:将日志事件通知给指定的用户,* 表示登录的所有用户
    日志服务器:@host,把日志送往至指定的远程服务器记录
    管道: | COMMAND,转发给其它命令处理

启用网络日志服务

通常的日志格式:
    事件产生的日期时间 主机 进程(pid):事件内容
    如: /var/log/messages,cron,secure等
配置rsyslog成为日志服务器
    #### MODULES ####
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
    # Provides TCP syslog reception
    $ModLoad imtcp
    $InputTCPServerRun 514

其它日志
其它的日志文件
/var/log/secure:系统安装日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格
式,lastb命令进行查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格
式,last命令可以查看
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令
可以查看
/var/log/dmesg:系统引导过程中的日志信息,文本格式
文本查看工具查看
专用命令dmesg查看
/var/log/messages :系统中大部分的信息
/var/log/anaconda : anaconda的日志

示例:rsyslog将日志记录于MySQL中

(1) 准备MySQL Server
(2) 在mysql server上授权rsyslog能连接至当前服务器
GRANT ALL ON Syslog.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD';
(3) 在rsyslog服务器上安装mysql模块相关的程序包
yum install rsyslog-mysql
(4) 为rsyslog创建数据库及表;
mysql -uUSERNAME -hHOST -pPASSWORD < /usr/share/doc/rsyslog-
7.4.7/mysql-createDB.sql
(5) 配置rsyslog将日志保存到mysql中
#### MODULES ####
$ModLoad ommysql
#### RULES ####
facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD

示例:通过loganalyzer展示数据库中的日志

(1) 在rsyslog服务器上准备amp或nmp组合
yum install httpd php php-mysql php-gd
(2) 安装LogAnalyzer
tar xf loganalyzer-4.1.5.tar.gz
cp -a loganalyzer-4.1.5/src /var/www/html/loganalyzer
cd /var/www/html/loganalyzer
touch config.php
chmod 666 config.php
(3)配置loganalyzer
systemctl start httpd.service
http://HOST/loganalyzer
MySQL Native, Syslog Fields, Monitorware
(4) 安全加强
cd /var/www/html/loganalyzer
chmod 644 config.php

四、文件共享服务

文件传输协议FTP
File Transfer Protocol 早期的三个应用级协议之一
基于C/S结构
双通道协议:数据和命令连接
数据传输格式:二进制(默认)和文本
两种模式:服务器角度
主动(PORT style):服务器主动连接
命令(控制):客户端:随机port ---服务器:tcp21
数据:客户端:随机port ---服务器:tcp20
被动(PASV style):客户端主动连接
命令(控制):客户端:随机port --- 服务器:tcp21
数据:客户端:随机port ---服务器:随机port
服务器被动模式数据端示例:
227 Entering Passive Mode (172,16,0,1,224,59)
服务器数据端口为:224*256+59

FTP服务器:
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器
高速,稳定,下载速度是WU-FTP的两倍
ftp.redhat.com数据:单机最多可支持15000个并发

客户端软件:
ftp,lftp,lftpget,wget,curl
ftp -A ftpserver port -A主动模式 –p 被动模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file
gftp:GUI centos5 最新版2.0.19 (11/30/2008)
filezilla,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver

状态码:

1XX:信息 125:数据连接打开
2XX:成功类状态 200:命令OK 230:登录成功
3XX:补充类 331:用户名OK
4XX:客户端错误 425:不能打开数据连接
5XX:服务器错误 530:不能登录

vsftpd服务

由vsftpd包提供
不再由xinetd管理
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本: /usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:= 前后不要有空格
匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
系统用户共享文件位置:用户家目录
虚拟用户共享文件位置:为其映射的系统用户的家目录

实现基于文件验证的vsftpd虚拟用户

一、创建用户数据库文件

•vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
•cd /etc/vsftpd/
•db_load -T -t hash -f vusers.txt vusers.db
•chmod 600 vusers.db

二、创建用户和访问FTP目录

•useradd -d /var/ftproot -s /sbin/nologin vuser
•chmod a=rx /var/ftproot/
•centos7 还需要执行以下操作:
•chmod -w /var/ftproot/
•mkdir /var/ftproot/upload
•setfacl -m u:vuser:rwx /var/ftproot/upload

三、创建pam配置文件

•vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

四、指定pam配置文件

•vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db

五、SELinux设置:

禁用SELinux 或者 setsebool -P ftpd_full_access 1

六、虚拟用户建立独立的配置文件

mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/ 进入此目录
允许wang用户可读写,其它用户只读
vim wang 创建各用户自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim mage 创建各用户自已的配置文件
local_root=/ftproot 登录目录改变至指定的目录

实验:实现SMB共享

一、在samba服务器上安装samba包

yum -y install samba

二、创建samba用户和组

groupadd -r admins
useradd -s /sbin/nologin -G admins wang
smbpasswd -a wang
useradd -s /sbin/nologin mage
smbpasswd -a mage

三、创建samba共享目录,并设置SElinux

mkdir /testdir/smbshare
chgrp admins /testdir/smbshare
chmod 2775 /testdir/smbshare
semanage fcontext -a -t samba_share_t '/testdir/smbshare(/.*)?'
restorecon -vvFR /testdir/smbshare

四、samba服务器配置

vim /etc/samba/smb.conf
security = user
passdb backend = tdbsam
[share]
path = /testdir/smbshare
write list = @admins
systemctl start smb nmb
systemctl enable smb nmb
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

五、samba客户端访问

安装包
yum -y install cifs-utils
用wang用户挂载smb共享并访问
mkdir /mnt/wang
mount -o username=wang //smbserver/share /mnt/wang
echo "Hello wang" >/mnt/wang/wangfile.txt
用mage用户挂载smb共享并访问
mkdir /mnt/mage
mount -o username=mage //smbserver/share /mnt/mage
touch /mnt/mage/magefile.txt

猜你喜欢

转载自blog.51cto.com/14231603/2397610