linux基础

linux基础

部署linux系统

​ 以下以contos系统为例

1、linux系列
  • Debain 平台——代表Ubuntu(图形化界面/桌面,kail系统)
  • Fedora平台——代表 RedHat、contos(服务器类)
2、linux运行级别
  • 切换命令格式:init [级别]
  • 级别:
    • 0:关机
    • 1:单用户模式
    • 2:无网络的支持多用户模式
    • 3:有网络的支持多用户模式
    • 4:保留、未使用
    • 5:有网络支持,且有图形化界面的多用户模式
    • 6:重启
3、远程连接linux服务器
  • ssh:ssh协议(secure shell)由IETF的网络小组(Network working Group)所制定。ssh为建立在应用层基础上的安全协议。ssh是目前较可靠、专为远程登录会话和其他网络服务提供安全性的协议。

  • 注:linux系统默认未安装ssh服务,需要我们使用代码手动安装

    sudo yun install openssh	#安装
    sudo systemctl start sshd	#启动服务
    
  • windows:非服务器系统一般无ssh服务(win10及以上自带),可下载第三方软件使用ssh服务。例如:Finalshell、gitbash、xshell

Linux基本使用

一、linux系统软件安装

1、软件管理命令分类
  • Debian——ubantu操作系统:
    • dakg 指令:安装离线包
    • apt 指令:在线安装
  • Fedora——RedHat、centos系统:
    • rpm 指令:安转离线包
    • yum 指令:在线安装
2、rpm
  • rpm是“Red—Hat Pack Manager"的简写,为Red Hat专门开发的套件管理系统,方便软件安装、更新及移除。所有源自Red-Hat的”linux“发行版都可以使用rpm
  • 详解: -qpi 确认软件作用 ,-qpl 确认软件安装路径
    • rpm -ivh <.rpm file name> #安装.rpm后缀名的软件包,并显示安装详情。
    • rpm -e #删除指定的软件
    • rpm -qa #列出电脑上安装的所有软件包
3、yum
  • yum(全称为:Yellow dog updater,modified)是 一个 在Fedora和RedHat以及centos中的shell前端软件包管理器,能够从指定的服务器自动下载rpm包并安装,可以自动处理依赖关系,并且一次性安装所有的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次性安装所有依赖的软件包,无需频繁地一次次下载安装。

  • 详解:

    	yum search <packagename>     #搜索软件包,例:yum search python
    	yum list installed      	 #列出已近安装的软件包
    	yum remove					 #用来移除软件包
    	yum update <packagename>	 #更新软件包
    	yum check-update			 #检查更新
    	yum info (packagename)       #列出指定软件包详情
    
4、yum与rpm区别

​ yum是基于rpm的,它的功能更加强大:

场景rpmyum
离线的.rpm安装包能安装,但不能自动下载并安装依赖能安装,并且能够自动下载安装依赖
在线安装不支持,只能离线安装本地包支持在线下载安装

二、linux文件系统

1、概述

​ 不同于windows系统有盘符的概念,linux只有一个盘符,是从“/"(根目录)开始的,只有它才是没有上级目录的。如果直接把整个应用系统看成一个树形结构,”/“表示相当于这个树形结构的根,我们可以将”/"称之为根目录。

2、linux目录结构
/			#系统根目录
/bin		#包括了一些二进制文件,即可执行文件,我们在命令行里执行的指令。ls、rm等,都是二进制文件
/boot		#系统启动时相关所需的文件
/dev		#设备文件,其中许多都是在启动是或运行时生成的。
/etc		#用来存放所有的系统管理所需的配置文件和子目录
/home		#用户的主(家)目录,每一个用户都有自己的目录,所有的用户都存在home目录中
/lib		#用来存放系统最基本的动态连接共享库,几乎所有的引用程序都需要用到这些共享库
/lost+found #这个目录一般情况下是空的,当系统非法关机后,这里会存放一些没来得及保存的文件
/media		#linux自动识别的一些设备,比如U盘、光驱等,当识别后linux会把识别的设备挂载到这个目录下
/mnt		#系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光盘挂载到/mnt上,进入目录			  #就可查看光盘内容了。
/pot		#给额外安装软件所提供的目录。比如你安装一个oracle数据库就可以把它放在这个目录下
/proc		#虚拟目录,它是系统内存的映射,可以通过直接访问这个目录来获取系统信息。
/root		#超级用户目录(管理员家目录)
/run		#是一个临时文件,存放系统启动以来的信息,当系统重启时,这个目录下的文件会被删除。
/sbin		#超级用户使用的命令存放目录
/srv		#存放一些服务启动之后需要提取得数据
/sys		#映射内核设备
/tmp		#存放临时文件
/usr		#非常重要的目录,用来存放用户安装的应用程序和用户文件
/var		#经常修改的数据,比如程序运行时的日志文件
	注意:
	以“.”开头的是隐藏文件。
	“./”表示的是当前目录,“../”表示的是上级目录
	“~”表示的当前用户的家目录
3、文件目录操作的常规指令
  • 常用指令
	pwn		#查看当前工作目录
	cd		#切换工作目录。. 表示当前目录, ..表示上级目录,~当前用户家目录, /表示根目录
			注意:使用cd命令时,不指定目标地址,会自动切换到家目录
				 凡是以“/”开头的目录都是绝对目录
				 凡是以“.”或“..”开头的目录都是相对目录
	ls		#查看指定目录的内容,不指定目录时查看当前工作目录
			ls命令选项:
			 	-a	#用来显示所有的文件(夹)包括隐藏的。
			 	-h	#人性化格式显示,易于人读。如K/G/M
			 	-l	#用来显示文件夹的详细信息	
    alias	#给命令起别名,不添加参数表示列出所有别名
    		例:
    		起别名:alias md=mkdir
    		删别名:unalias md
  • linux下文件表示含义
	示例:drwxrwxr-x 2 chris chris 4096 310 14:48 ddd
	
	第一个字母表示文件类型:
	#d表示是一个文件夹,-表示它是一个普通文件,l表示一个链接(类似于快捷方式)
	
	"rwxrwxr-x" 	#表示权限,九个字母,三个字母一组分别表示所有者,所属组名和其他权限
					#r:读取,w:写入,x:执行权限,-:表示没有权限
	'2'				#如果是一个文件夹,表示这个文件夹里有几个子文件夹。
					#如果是一个文件,表示文件硬连接的个数
	'chris'			#第一个表示所有者,第二个表示所有者所属的组
	'4096'			#w文件夹都显示4096,文件则显示其大小
	'3月 10 14:28'   #最后一次修改时间
	'ddd'			#文件(夹)名
	
	注意:
	ls -l 选项显示结果:类型及权限|连接数|用户|用户组|大小|||年/时间|名称
		文件类型:-l 显示结果中的第一部分的第一列
		连接数:若是文件,表示这个文件有多少名字(硬连接,类似于快捷方式)。若是文件夹表示其子文件夹数
		
	文件类型:
	-	#普通文件,包括纯文本(ASCLL)、二进制文件(binary)、数据格式的文件(data)、各种压缩文件
	d	#目录文件(文件夹)
	l	#链接文件,类似于windows中快捷方式
	c	#字符设备文件,即串行端口的接口设备,例:键盘
	b	#块设备文件。存数据供系统存取的接口设备,如硬盘
	s	#套接字文件。常用于网络数据连接,最常在/var/run目录中看到这类文件
	p	#管道文件。它主要目的是,解决多个程序同时存取一个文件所造成的错误
4、文件和目录的创建删除
	touch		#新建文件,可以是多个
    rm			#删除文件或目录(删除目录时要传递"-r"选项)
    cp			#拷贝文件或目录(拷贝目录要传递"-r"选项)
    mv			#移动文件或目录
    mkdir		#创建目录,可以是多个
    rmdir		#删除空目录
    
    注意:
    -r			#删除或拷贝目录时添加,表示递归操作
    -f			#表强制操作,无提示信息
    .			#表示模糊匹配。如:"rm .py"表示删除所有.py文件
    -p			#创建目录若需要中间目录,可添此项。例:mkdir -p a/b/c
5、查看文件
	cat			#从上到下,显示文件全部内容
    tac			#从下到上,显示文件全部内容
    head		#查看开头指定行数的内容,不指定默认10行
    tail		#查看文件末尾指定行数内容,不指定默认10行
    nl			#功能与cat相同,但多显示行号
    wc			#统计显示内容:行数、单词数、字符数、文件名
    more		#一点一点查看内容
    less		#一点一点查看内容
    
    注意:moer/less 使用说明
    作用:显示一屏就停止,q退出查看,enter下翻一行,空格下翻一屏。
    区别:more 查看完毕会自动退出,less不会。
    	 less可以使用上下按钮上下翻看,more不可以
         经常结合管道符使用:ls /etc |more
    
    #补充,debain系统中一些命令:比如kail
    diff		#用于比较文件差异
    file		#查看文件类型
    find		#查找文件,常用于查找一般文件
    locat		#查找文件,常用于查找一般文件
    which		#在环境变量$PATH设置的目录中查找文件
    whereis		#用于查找特定文件,比如二进制文件、源码等
    man			#查看帮助
6、补充信息
  • 电脑信息

    • 硬盘信息:fdisk -l ===> linux中一切皆文件:/dev/sda 操作系统中第一块硬盘。(文件名)sd(硬盘类型)a(第一块)
    • 内存大小:cat /pra/meminfo
    • cpu型号:cat /proc/cpuinfo
    • 关机:poweroff,重启:reboot
  • 文件高亮

    	蓝色		#目录					墨色		#普通文件
        浅蓝色	    #符号链接(快捷方式)	  黑底黄字	 #设备文件
        绿色		#可执行文件			  红色	   #压缩包
        紫色		#图片、模块文件
    

三、vim编辑器

1、概述
  • vim是一个类于vi的著名的且功能强大、高度可定制的文本编辑器,在vi的基础上改进和增加了很多特性

  • 安装:sudo yum install vim (在root权限下则无需sudo)

  • vim三种工作模式:命令模式、插入模式、底线命令模式。

    插入模式—ESC—>命令模式 —ESC—> 底线命令模式

    注意:!v:打开最后使用vim打开的文件。vim filename:打开/新建一个文件

2、vim三种工作模式
  • 命令模式:按ESC键切换进入,打开文件初始模式

    	ZZ(shift+zz)		#保存退出
    	光标定位:
    	vim filename+n		#打开文件定位到尾行
    	gg					#定位到首行
    	G					#定位到尾行
    	ngg					#定位到第n行
    	^/0					#定位到行首
    	$					#定位到行尾
    	k					#光标上移
    	j					#光标下移
    	h					#光标左移
    	l					#光标右移
    	ctrl+f				#下翻一页
    	ctrl+b				#上翻一页
    	ctrl+d				#下翻半页
    	ctrl+u				#上翻半页
    	内容处理
    	x					#向右删除一个字符
    	nx					#向右删除n个字符,n表示个数
    	X					#向左删除一个字符
    	nX					#向左删除n个字符
    	dd					#删除光标所在行
    	ndd					#删除光标开始的第n行
    	p					#粘贴剪切板中的内容
    	yy					#复制光标所在行
    	nyy					#复制光标开始的n行
    	u					#撤销
    	ctrl+r				#反撤销
    
  • 插入模式(输入模式)

    	i					#在光标位置插入(进入插入模式)
    	l					#在第一个非空字符插入
    	a					#在光标的下一个字符插入
    	A					#在行尾插入
    	o					#在光标所在行下面插入空行
    	O					#在光标所在的行上面插入空行
    	s					#删除光标所在字符,并进入插入模式
    	S					#删除光标所在行,并进入插入模式
    
  • 底线命令模式(编辑模式):在命令模式下按":"键进入编辑模式

    	:w					#保存
    	:q					#退出
    	:wq					#保存并退出
    	:x					#保存并退出
    	:w!					#强制保存
    	:q!					#强制退出,不保存修改
    	:e!					#放弃修改,恢复到修改前状态
    	:w newfile			#文件另存为
    	:set nu[mber]		#显示行号
    	:set nonu[mber]		#隐藏行号
    	:set tabstop=4		#设置一个tab缩进4个字符
    	:set nouse=a		#启用鼠标的点击功能
    	[:]/内容			   #查找指定内容,n下翻,N上翻
    	[:]?内容			   #查找指定内容,N下翻,n上翻
    	:%s/原内容/新内容[g]	#(默认只替换一处)所有行内容替换,g表示全局
    	:m,ns/原内容/新内容[g]#m到n行内容替换,g表示全局
    	:n					#将光标定位到第几行,n表示行号
    	注意:若非正常关闭vim,可能会产生临时的交换文件,再次打开时会出现特定的界面,可以把根据提示进
    	行内容的恢复以及交换文件的删除,也可以手动将交换文件删除,下次就ok了,交换文件是隐藏的.
    
3、vim配置
  • vim配置文件:打开文件后的配置是临时的,关闭后就失效了。

    • 配置方法一

      ​ 直接修改 /etc/vim/vimrc 文件。(vim 安装后的默认配置对所有账户有效,不推荐)

    • 配置方法二

      ​ 在用户家目录创建一个文件.vimrc(一般自带这个文件)。将vim相关配置命令写入文件中。若文件未生效,需要重新加载一次。source ~/.vimrc

  • 配置命令详解

    	set nocompatible		#关闭vi兼容模式。
    	set laststatus=2		#显示状态栏(默认值为1,无法显示状态栏)
    	set number				#显示行号
    	set cursorline			#突出显示当前行
    	set ruler				#打开状态栏标尺
    	set shifwidth=4			#设定<< 和 >> 命令移动时的宽度为4
    	set softtabstop=4		#使得按退格键时可以一次删掉4个空格
    	set nobackup			#覆盖文件时不备份
    	set autochdir			#自动切换当前目录为当前文件所在的目录
    	filetype plugin indent on #开启插件
    	set backupcopy=yes		#设置备份文件时的行为覆盖
    	set ignorecase smartcase #搜索时忽略大小写,但在有一个或以上大写字母时仍然保持
    							 #对大小写的敏感
    	set nowrapscan			#禁止在搜索到文件两端时重新搜索
        set incsearch			#输入搜索内容时就显示搜索结果
        set hlsearch			#搜索时高亮显示被找到的文本
        set noerrorbells		#关闭错误信息响铃
        set novisualbell		#关闭使用可视响铃代替呼叫
        set t_vb=				#置空错误铃声的终端代码
        set showmath			#插入括号时,短暂地跳转到匹配的对应括号
        set matchtime=2			#短暂跳转到匹配括号的时间
        set magic				#设置魔术
        set hidden				#允许在有未保存的修改时切换到缓冲区,此时的修改有vim负责保存
        set guioptions-=T		#隐藏工具栏。
        set guioptions-=m		#隐藏菜单栏
        set smartindent			#开启新行时使用智能自动缩进
        set backspace=indent、eol,start  #不设定在插入状态无法用退格键和delete键来删除回车符
        set cmdheight=1			#设定命令行的行数为1
    

四、文件压缩与解压

1、压缩文件类型及命令
  • zip/unzip,文件后缀名为.zip

    压缩:zip 123.zip *.txt #将所有的txt文件压缩成123.zip文件

    ​ zip -r test.zip test #将test文件夹打包成test.zip

    解压:unzip 123.zip

  • gzip/gunzip,文件后缀名为gz

    压缩:gzip 1.txt #将1.txt压缩成1.txt.gz

    ​ gzip -r test #将test文件夹里的每一个文件都打包成.gz文件

    解压:gunzip 1.txt.gz

    ​ gunzip -d test.gz

  • bzip2/buzip2,文件后缀名是.bz2

    压缩:bzip 1.txt #将1.txt压缩成1.txt.bz2

    解压:bunzip 1.txt.bz2

    ​ bzip -d 1.txt.bz2

    ​ bzip2 -dk 1.txt.bz2 #解压1.txt.bz2文件,并保留1.txt.bz2

注意:

​ 无论是gzip,还是bzip2,都无法很方便的压缩和解压文件夹。

2、打包工具tar
  • tar:打包解包工具,后缀名是tar。可以理解为对目录、文件夹解压。

  • 选项:

    	-c		#创建新的打包文件
    	-x		#解包
    	-t		#不解包查看文件。注意:以上三个功能不能同时使用,因为功能冲突。
    	-v		#显示详细信息
    	-f		#指定操作文件
    	-z		#调用gzip/gunzip进行解压操作,后缀名是.tar、.gz
    	-j		#调用gzip2/bunzip2进行压缩解压操作,后缀名.tar、.bz2
    
  • 示例:

    	tar -cvf test.tar test		#将test文件夹打包成test.tar文件,并显示打包信息。
    	tar -cvf 123.tar 1.txt 2.txt 3.txt #将1.txt、2.txt、3.txt文件打包到123.tar文件
    	tar -tf  123.tar			#不解包查看123.tar文件里的内容
    	tar -zcvf/-jcvf 12.tar.gz/12.tar.bz2 1.txt 2.txt	
    	#将1.txt、2.txt 压缩包并打包成12.tar.gz/12.tar.bz2
    	tar -zxvf/-jxvf 12.tar.gz/12.tar.bz22	
    	#解压并解包12.tar.gz/12.tar.bz2文件
    
  • 注意:

​ tar只是用来打包和解包的工具,它本身是没有压缩和解压缩的功能。但是通过添加参数,可以调用gzip或者bzip2进行解压、压缩操作。

​ tar -z #使用gzip方式打包文件,后缀名为.tar.gz可简写为.tgz

​ tar -j #使用bzip方式打包并压缩文件,后缀名为.tar.bzip2,可简写.tbz2或.tbz

​ 示例:tar -zcf <生成的目录压缩包.tar.gz> <需要打包的目录绝对路径>

linux账户安全

一、用户管理

1、相关命令
	whoami			#查看当前登录的用户名
	useradd			#新建目录
					#-d:指定家目录,-m:创建家目录,-s:指定shell
	userdel			#删除用户,-r会删除用户家目录
	passwd			#设置指定用户的密码。没有指定用户,是修改当前用户的密码。
	su -			#切换用户,一定要加上“-”,否则只会切换家目录,但是环境没有切换,不指定用户是默					 #认切换到root用户(记得给先给root用户设密码)
	sudo			#以指定用户(root)身份执行命令,放于命令前
	visudo			#专门用于编辑/etc/sudoers文件的命令,需要将指定用户添加进去才可以使用sudo
	groupadd		#新建用户组
	groupdel		#删除用户组
	gpasswd			#向指定组添加/删除指定的用户。gpasswd -a/-d user group
	groups			#查看指定用户组信息
	chsh			#修改指定用户的shell解析器,如:禁止test登录
					#sudo chsh test -s /user/sbin/nologin
	chown			#修改文件所属用户[及用户组]:如:sudo chown test[:test] <文件名>
					#递归操作时需要加上“-R”选项
	chgrp			#修改文件所属用户组。如:sudo chgrp test(用户组) <文件名时>
	
	#补充,debain系统中一些命令:比如kail
	who				#显示系统中有那些使用者
	w				#显示登入用户信息
2、涉及文件
  • /etc/passwd:系统中的用户信息

    用户信息格式:chirs:X:1000:1000:ubantun:/home/chris:/bin/bash

    • chirs:注册名(logi_name),用于区分不同的用户
    • x:口令,系统用口令来验证用户的合法性。现在的unix/linux系统中,口令不在直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x"替代,架构/etc/passwd作为真正的口令文件,用于保存包括个人口令在内的数据。
    • 1000:1000用户标识符(uid),是linux系统中唯一的用户标识,用于区分不同用户
    • 1000:组织标识号(gid),具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组表示号相区分。
    • ubantu:用户名(user_name):包含有关用户的一些信息,如用户的真实姓名、办公室地址。在linnux系统中,mail和finger等程序利用这些信息来标识系统用户。
    • /home/chirs:用户主目录/家目录(home_directory),该字段定义了个人用户的主目录,当用户登录后,他的shell将把该目录作为用户的工作目录。
    • /bin/bash:命令解释程序(shell)
  • /etc/group:系统中用户信息

    ​ 用户信息格式:sudo:X:27:chirs

  • /etc/shadow

    • 账户名:账户名与/etc/passwd里的账户名一一对应关系。
    • 密码:空表示密码为空,不需要输入密码即登录。星号代表账号被锁定,单引号表示未设置密码,双引号表示这个密码已经过期,$包裹1表明是用MD5加密的、包裹2表示用Blowfish加密的、包裹5表示使用sha-256加密、6表示sha-512加密。
    • 修改日期:这个是表明上次修改密码的日期与1970.1.1相距的天数。
    • 密码不可改的天数:假如这个数字是8,则8天内不可修改密码,若是0,则随时可以修改。
    • 密码需要修改的期限:如果是99999则永远不用改,若是10000则距1970.1.1 10000天内可改密码。否则无效。
    • 修改期限前N天发出警告。
    • 密码过期的宽限:密码过期后,在过期宽限这几天是可以修改密码的,改后可继续使用。
    • 账号失效日期:距1970.1.1相距天数
    • 保留:被保留,暂时未被用上。
4、相关名词
  • uid:用户唯一标识
  • gid:用户组唯一标识组
5、示例
	groupadd -g 1000 class1			#建立名为class1的组,组id为1000
	useradd -u 600 -g 1000 -G 2000 tom usermod
	#建立tom用户基本组为class1组,附加组为class2组,tom用户uid为600(前提:已建立id为2000的		     class2组)
	
	useradd -u 250 -m -s/bin/nologin tsetuser
	#建例一个uid为250,用户名为testuser,无家目录。
	
	passwd -L/-u 用户名
	#为tom用户设置密码为123,并设定密码最长有效期为90天,将密码锁定,使其无法登录。
	-s查看命令状态,-L锁定,-u解锁。

二、权限管理

1、概述
  • 在Linux下,所有文件都涉及权限,分为三组:所有者、所属组、其他
  • 权限:所有文件的权限可分为:可读(r)、可写(w)、可执行(x),“-”表示无权限。
  • 原理:ls -L 的结果,三位一组,则好对应:所有者、所属组、其他
  • 修改权限:chmod,格式:chmod [身份] [操作] [权限] 文件
2、相关选项
  • 身份

    	u			#所有者(user)
    	g			#所有组(group)
    	o			#其他(other)
    	a			#所有者(all)
    
  • 操作

    	+			#添加
    	-			#去掉
    	=			#设置
    	
    	示例:给其他用户添加写权限
    	sudo chmod o+w 文件名
    
3、权限值
  • r=4,w=2,x=1

  • 默认权限:文件=664,文件夹=775

  • umask命令用来查看问价(夹)默认权限,默认值0002

  • 本质:使用一组(3位)八进制的数据来表示权限,如:0755展开如下:

    • 转换为二进制:0755 => 111 101 101
    • 对应三组身份:所有者、所属者、其他
    • 每一组的权限:都包括可读、可写、可执行
    • 示例解析:所有者可读可写可执行;所属组可读可写可执行,其他可读可执行
    • 简化操作:sudo chmod 0755 <文件名> ,若进行递归操作,添加“-r"操作。
  • umask

    • 作用:用来限定新建文件的默认权限,权限与该值相反
    • 命令:umask [value] ,查看或设置掩码。
    • 分析:掩码:0002 ==> 000 000 010
    • 最高权限
      • 目录:777
      • 文件夹:666
    • 新建文件(夹)权限(默认)
      • 新建目录(文件夹):111 111 101
      • 新建文件:110 110 100
      • 默认权限=最高权限-掩码
  • 补充

    • 粘滞位权限,符号:t 1

      粘滞位针对目录赋权,目录中创建的文件只有创建者可删除。

    • sgid 权限,符号:s 2

      针对目录建立的权限,在该目录中建立的文件所属 组继承父目录的属性。

    • suid权限,符号:s 4

      针对可执行文件建立,谁运行该文件谁就具有该文件所属者的权限。注:若vim运用有较大风险。

    • 注意:“1”、“2”、“3” 位于3位权限之前,例:1777

4、修改属性:chattr

​ 不在允许添加新用户:锁定/etc/passwd、/etc/shadow => chattr+i <文件> ·····

​ #i为锁定、不再允许更改属性

​ 改默认密码有效期:/etc/login.defs ==> pass_MAX_DAYS=······

linux环境搭建与shell编程

一、Nginx安装与配置

1、概述

​ Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

2、使用源码安装软件
  • 基本步骤

    配置:configure ----> 编译 :make -----> 安装:make install

  • 执行命令

    命令1;命令2 #执行命令1,执行命令2,无论命令1是否执行成功

    命令1||命令2 #先执行命令1,命令1失败才会执行命令2

    命令1&&命令2 #先执行命令1,命令1成功才会执行命令2

  • 具体步骤

    • 使用wget命令下载Nginx源码,下载地址:http://nginx.org/doenload/nginx1.16.0.tar.gz

    • 解压软件压缩包:tar -zxvf nginx-1.16.0.tar.gz

    • 编译前执行配置文件:./configure

      示例:./configure --prefix=/usr/local/nginx
      	#-prefix:用来配置Nginx服务器的安装目录(指定安装路径)
      	#配置出错是因为缺少相关的依赖库或者编译器,生成一个marefile文件
      	#执行configure,未安装依赖会失效,安转好后,重新执行
      	#需要安装相关的依赖:
      	#sudo yun install gcc-c++ pcre pcre-devel zilb zlib-devel openssl_devel
      	#运行make&&mare install 命令来编译并安装软件
      
  • Nginx介绍

    • 配置文件都在/usr/local/nginx目录下
    • 进入到usr/local/nginx/sbin 安装目录,使用./nginx 命令来启动nginx
    • html:默认站点目录
    • 测试:浏览器输入公网ip,看到welcome to nginx 表成功。
3、使用yum在线安装
  • 步骤
    • sudo yum install nginx 安装
    • sudo systemctl start nginx 启动服务
    • ps -auxlgrep nginx
    • 客户端就可以在浏览器里通过ip地址直接访问到服务器
  • 配置文件的存放路径
    • whereis nginx #查找和nginx相关的文件。
    • 在/etc/nginx/nginx.config 文件里存放了nginx的配置信息。
    • 在这个配置文件里,有两个配置很重要:
      • listen 80 default_server #设置监听端口
      • root /usr/share/nginx/html #静态页面的存放路径

二、python的安装

1、概述

​ centos自带python2版本,而我们日常开发使用最多的却是python3版本,使用centos的yum直接安装python3 会报错,因为python3不在centos的默认配置里,这种情况下,可以使用以下两种方法安装python3.

2、使用EPEL安装

​ EPEL即Extra Packags for Enterprise linux的简称,是企业级linux提供的一组高质量的额外的软件包。在这个额外的软件包里,我们能使用yum命令找到python3:

  • 使用sudo yum install epel_release #命令安装epel拓展软件包
  • 使用sudo yum install python3 #安装python3版本
3、使用源码安装

步骤:

  • 使用wget命令下载Python3.7的源文件:wge https://www.python.org/ftp/python/3.7.5/python-3.7.5.tgz
  • 使用tar命令解压下载后的压缩包:tar -zxvf python3.7.5.tgz
  • 进入到解压的文件夹,运行 yum -y install zlib -devel ······· ·安装依赖
  • 运行 sudo make & sudo make install 命令,安装python。
  • 运行 ln -s /usr/local/bin/python3.7. /usr/bin/python3 命令,在/usr/bin 目录下建立python3.7的软连接。
  • 运行python3命令可以打开python3.7(上一步类似于windows创建桌面快捷方式)

三、管理虚拟环境

1、概述

​ 和其他大多数现代编程语言一样,python对包和模块的下载,存储以及管理有其自己的一套方法。python的包一般存在这几个地方,使用sys可以查看python包和模块的存放路径。

import sys                        [' ',
print(sys.path)        ====>       '/usr/lib/python3.6.zip',
									·····
									·····]

​ 结果可以列出python里查找包或模块时的所有可用路径,其中’ '表示的是当前项目的目录,一般情况下,我们需要关注的是使用pip install 下载的第三方资源包。这个第三方资源包被存放在了’/usr/local/lib/python3.6/dist-Packages’目录下。但当我们同时开发多个工程时,不同的工程会将第三方的包存放在相同的路径下,这意味着,如果有两个工程依赖同一种包但需要的版本不同时,由于python无法根据版本来区分安装路径,所以这里就会发生版本冲突。

2、virtualenv
  • virtualenv是一个创建隔绝的python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹用来使用python工程所需的包

  • 相关命令

    	sudo pip install virtualenv 	#安装virtualenv
        cd my_project					#进入到工程的工作目录
        virtuelenv test		#创建虚拟环境,命名为test,此时会在my_project下多出一个test文件夹
        source test /bin/activate		#激活虚拟环境,此时,如果使用pip install安装的插件都会
        								#安装到当前环境
        pip install flask				#测试安装flask,flask会被安装到当前虚拟环境。
    
3、virtualenvwrapper
  • 安装及配置

    	sudo pip install virtualenvwrapper 
    	配置:在~/.bashrc 添加下列内容 ==> 开机自动执行
    	export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    	export WORKON_HOME=~/.envs
    	sourse /usr/local/bin/virtualenvwrapper.sh
    	手动执行:soure ~/.bashrc
    
  • 相关命令

    	mkvirtualenv test		#创建并切换到test虚拟环境
    	deactivate				#离开test虚拟环境
    	rmvirtualenv test       #删除test虚拟环境
    	workon demo				#切换到demo虚拟环境
    

四、服务监听

​ 类似于windows系统里的任务管理器。

1、netstat
  • 用来监听网络连接状态

  • 参数:

    	-a		#显示所有socket,包括正在监听的
    	-n		#以网络ip地址代替名称,显示网络连接情形。
    	-o		#显示与网络计时器相关的信息
    	-t		#显示TCP协议的连接情况
    	-u		#显示UDP协议的连接情况
    	-p		#显示连接相关的程序和PID
    
2、ps
  • 作用:查看进程信息
  • 命令:
    • ps -ef
    • ps -aux
    • 证明:经常在查询进程时结合grep进程过滤
3、pstree

​ 使用树形结构查看进程信息

4、kill
  • 杀死进程:kill PID
  • 强制杀死:kill -g PID

五、管道和重定向操作符

1、管道
  • 管道的操作符是“|”,它只能处理经由前面一个指令传出的正确输出信息,然后传递给下一个命令,作为下一个命令的标准输入。例如:ps -eflmore

  • 注意:

    • 管道命令只能处理前一个命令的正确输出,不能处理错误输出。

    • 管道命令的右边命令,必须要能够接收标准的输入流才行。

    • 有些命令无法接收输入流,需要通过 xargs来将输入流转换为命令行参数:

      例:find -name 2.txt | xargs -rf

2、重定向
  • 标准输入(stdin)、标准输出(stdout)、标准错误(stderr)

  • 在linux中,创建任意进程,系统会自动创建上面三个数据流,其实就是三个文件

  • 三个文件的描述符分别是:0、1、2 ,其中0默认指向键盘,1和2默认指向终端窗口。

  • 重定向就是改变原来默认的表现位置。

  • 示例:

    	输出重定向:
    	ls > 1.txt			#会创建新文件,若文件存在会覆盖。
    	ls >> 1.txt			#追加至文件末尾,不存在则创建。
    	错误重定向:
    	ls /xxx 2 > 1.txt	#将标准错误重定向到1.txt
    	同时重定向输出和错误:
    	ls /xxx /home & > 1.txt	#将标准输出和错误同时重定向到1.txt
    

六、shell编程

1、概述

​ 通过shell中的各种命令,开发者和运维人员可以对服务器进行维护工作。但每次手动输入命令,工作效率太低,而且很容易出错,尤其是需要维护大量服务时。将命令写入文件,批量执行这种文件便是shell脚本。

​ shell脚本一般以.sh结尾,当然,也可以省略拓展名。

2、shell脚本首行
  • 脚本文件第一行通过注释的方式指明执行脚本的程序。以#!开头,#开头的文本是注释。

  • 常见方式有:

    	#!/bin/sh
    	#!/bin/bash
    	#!/usr/bin/env bash
    	示例:python脚本的第一句为:#!/usr/bin/env python
    
  • 注意:linux中所有程序执行结束后都有状态码,零代表正常,正整数代表异常退出,通过echo$?查看(有的脚本需要写exit 0)

  • 执行脚本的的命令:bash、source、./(可执行文件)

3、变量
  • 定义

    变量定义与其他脚本差距不大,需要注意的是赋值前后没有空格。例:a=123 #符号前后无空格

  • 使用

    使用变量时,变量名前加上$符。

    	echo $a			#输出a值
    
  • shell全局变量

    定义:export abc=987654321
    注意:定义后,用soure执行执行脚本才生效。
    
  • 系统环境变量

    	$PATH			#可执行文件目录
    	$PWD			#当前目录
    	$HOME			#家目录
    	$USER			#当前用户名
    	$UID			#当前用户的uid
    
4、获取输入
例:
	read -p "请输入一个数字:" num
	echo "您输入的是:$num"
5、脚本引号
  • 反引号:里面的内容会被解析成为脚本。

    例:echo 'ls -a /home/chris'		#打印 /home/chirs 目录下所有文件和文件夹。
    
  • 双引号:它里面的大部分内容会被原样显示,但如果是有个变量,则会被接解析

    例:
    	name=zhangsan
    	echo "大家好,我是$name"		#大家好,我是zhangsan
    
  • 单引号:它里面的内容会完全原样的输出,即使是变量,也不会被解析。

6、脚本里的$
  • ${var}用来获取一个变量的值,var为变量名 。一般情况下大括号可以省略不写。

  • 特殊变量:

    	$#			#代表传入的参数的个数
    	$@			#代表传入参数的列表
    	$0			#代表脚本本身
    	$1			#代表传入的第一个参数,$2、$3、$4····以此类推
    	$*			#以字符串的方式显示所有传入的参数
    	$$			#脚本运行的进程ID
    	$?			#显示最后命令的退出状况,表示没有错误
    
  • $(命令)用来执行括号里的脚本命令,相当于使用反引号。

  • $((expression))用来计算数字表达式,expression的值。

    例:echo $((1+1)) #2

7、if语句
  • 格式

    	if <命令1>;then		#if语句检查判断依据是其后面所跟命令的状态码:0为true,其他值为False
    		<命令2>
    	elif <命令1>;then
    		<命令2>
    	else
    		<命令1>
    	fi
    
  • 条件测试命令:[······]

    • shell 提供了一种专用做条件测试的语句[·········]

    • 这一对方括号本质上是一种命令,里面的条件是其参数。所以 [ 的后面和 ] 的前面必须有空格否则会报错。

    • 它可进行三种比较:数值、字符串、文件

      	if [ <比较命令> ];then
      		<命令>
      	fi
      
  • 条件列表

    • 数值比较

      	-eq			#等于
      	-ge			#大于等于
      	-gt			#大于
      	-le			#小于等于
      	-lt			#小于
      	-ne			#不等于
      
    • 字符串比较

      	=			#比较两字符串是否相同
      	!=			#检查是否不同
      	<			#小于,a<b:a是否小于b
      	>			#大于
      	-n <字符串>  #检查字符串长度是否非0
      	-z <字体>	   #检查字符串长度是否为0
      
    • 文件比较

      	-d file		#文件夹是否存在且是一个目录
      	-e file		#文件是否存在
      	-f file		#文件是否存在且是一个文件
      	-r file		#文件是否存在且可读
      	-w file		#文件是否存在并可写
      	-x file		#文件是否存在并可执行
      	-s file		#文件是否存在并非空
      	-o file		#检查文件是否存在并且与当前用户相同
      	file1 -nt file2		#file1是否为file2新
          file1 -ot file2		#file1是否为file2旧
      
8、case语句
语法:
	case "$var" in
		条件1)
		命令1
		;;
		条件2)
		命令2
		;;
		·····
	esac
	
示例:
	read -p "输入数字" num
	case $num in
		0)
		echo 星期日
		;;
		·····
9、循环语句

​ shell中的循环结构有三种:for、while 和 until

  • for循环

    语法:
    	for <变量> in <序列>
    	do 
    		<命令>
    	done
    	
    示例:
    	for i in 'seq 1 10'		#1到10序列
    	do
    		if[ $[ $i%2 ] ==0 ]
    		then
    			<命令>
    		else
    			<命令>
    		fi
    	done
    
  • C语言风格

    语法:for 循环的C语言风格语法
    	for((i=0;i<10;i++))
    	do
    		<命令>
    	done
    
  • while循环

    语法:
    	while <条件>
    	do
    		<语句>	#例如:let sum++
    	done
    
10、函数
  • 函数:将一部分代码存储到一个变量中。函数调用时直接写函数名,无须括号

  • 定义函数

    语法:
    	function <函数名>(){			#注意:function 不是必须,可省略
    		····
    		····
    		}
    		
    示例:设计一个函数A,运行时屏幕输出OK。
    	A(){···
    		·····
    		}		#以大括号结束
    	
    
  • 使用

    在终端或脚本中直接输入函数名即可,不需要小括号。

    例:	<函数名> 参数1 参数2 ······
    
11、数组

​ shell语言仅支持一维数组

  • 定义:用括号表示,空格隔开。

    	<数组名>=(value1 ····· vluen)
    	可直接使用下标定义:
    	<数组名>[0]=值1
    
  • 修改:可直接使用下标修改。

    	<函数名>[0]=新值
    
  • 获取数组里数据

    	${<数组名>[序号]}
    
  • 获取数组所有数据及长度

    	获取数组所有数据(两种方法):
    	${<数组名>[*]}
    	${<数组名>[@]}
    	
    	获取数组长度(两种方法):
    	${#<数组名>[*]}
    	${#<数组名>[@]}
    
  • 循环

    	for i in ${<数组名>[*]}
    

网络配置与日志审计

一、网络配置

1、查看网络配置信息
	ip addr			#插看网络设备信息
					#网卡:eth0/1 ,0表示第一块网卡,1表示第二块,以此类推。
	service NetworkManager stop		#关闭网络管理服务
	chkconfig --level 345 NetworkManage off		#在3、4、5级别下关闭
2、配置网络地址
	ip addr add <ip地址> <子网掩码> dev eth0/1		#添加网络地址配置,del为删除配置
	示例:
	ip addr add 192.168.1.21/24 dev eth0/1		#简写,/24表示子网掩码(255.255.255.0)
	
	启动网卡:
	ip link set eth0/1 up
	
	添加路由表/网关:
	ip route add default via <网关>  dev eth0/1
	
	DNS配置:
	在 /etc/resolv.conf 	#DNS解析文件
	添加:nameserver <DNS服务器ip>
3、通过配置文件配置网络

​ 当服务器重启后,配置仍生效。

  • 配置文件位置:/etc/sysconfig/network-scripts/

  • 网卡配置文件: ifcfg-eth0、ifcfg-eth1

  • 相关命令:

    	启动:ifdown eth0/1
    	关闭:ifup eth0/1
    	
    	配置文件相关配置:
    	DEVLCE = eth0		#网卡设备名
    	TYPE = Ethernet		#类型
    	ONBOOT = yes		#是否允许network服务管理该文件
    	BOOTPROTO = static	#静态获取ip,也可以设置为DHCP
    	IPADDR =<ip地址>
    	NETMASK = <子网掩码> 
    	GATEWAY = <网关>
    	
    	/etc/init.d/network restart		#重启network服务,使配置生效。
    
4、linux路由
  • linux可以充当路由器,须先打开其路由器功能。

  • 启动步骤

    	编辑 /etc/sysctl.conf 文件
    	改 net.ipv4.ip_forward=1
    	sysctl -p	#启动路由器功能
    

二、日志管理与应急分析

1、日志文件

​ liunx系统所有日志文件存放在/var目录下

2、日志分类
  • 系统日志:messages 文件
  • 登录日志:secure 文件
  • 程序日志
3、日志管理服务
  • 配置文件:/etc/rsyslog.conf

  • 日志触发事件级别(从最不重要到最重要)

    	man rsyslog.conf		#查看帮助
    	
    	日志触发事件:
    	debug、info、notice、warning、warn、err、error······emerg、panic
    	触发示例:
    	logger -p authpriv.emerg "==test=="
    	[命令] [操作项] [服务名称].[级别] "触发内容"
    
4、日志服务器与异地备份
  • 客户机配置(须备份的主机)

    	修改日志配置文件 /etc/rsyslog.config
    	begin forwarding rule		#修改转发规则
    	
    	添加转发命令:
    	*.*@@ <日志服务器ip>:[端口号]	#*.* 代表 任意服务类型.任意级别
    	
    	重启服务:
    	service rsyslog restart
    
  • 日志服务器配置

    	修改日志配置文件 /etc/rsyslog.conf
    	MODULES		#修改功能模块接收规则
    	
    	添加接收规则命令:
    	$ModLoad imtcp
    	$InputTcpServerRum[514]		#端口号默认为514
    	
    	修改"begin forwarding rule"
    	:fromhost_ip,isqual,"需备份主机ip" [日志存放路径]
    	
    	重启服务:
    	service rsyslog restart
    	
    	检查端口:
    	ss -antpl | grep 514
    

lamp安全配置

一、Apache

1、概述
  • Apache是一个网络社区,旗下软件HTTP十分出名,人们常称之为Apache
  • lamp平台:linux apache mysql php
2、搭建http服务
  • 安装Apache并启动服务(httpd)

    	service httpd start
    
  • 验证服务启动

    	ss -antpl | grep 80
    
  • http主页建立

    • 文件位置:/var/www/html
    • 建立html文件,作为主页(idex.html)
3、Apache主配置文件
  • 位置: /etc/httpd/conf/httpd.conf

  • 配置文件重要信息

    	ServerRoot "httpd软件安装路径"
    	Listen 80		#开启端口号
    	DocumentRoot "默认主页存放位置"
    	Options Indexes FollowSymLinks 		#共享目录功能。漏洞,删除Indexes共享服务即解决漏洞
    

二、访问控制设定

1、httpd 功能配置区
	<Directory "/var/www/html">
	··········各种设置··········
	</Directory>
2、设置访问控制
	默认设定:
	#contrds who can get stuff from this server
		Order allow,deny
		Allow from all
		
	修改:
	例:仅允许192.168.1.2主机访问主页
	Order allow,denny			
	Allow from 192.168.1.2		#白名单,改为192.168.1. 代表该网段。
	
	Order deny,allow
	Deny from 192.168.1.2		#黑名单(不允许访问)
3、禁止匿名访问
  • 对页面加密,须使用户名和密码

  • 建立访问用户及密码

    	htpasswd -c /etc/httpd/conf/httpuser tom		#执行后输入密码
    				用户文件存放路径			用户名
    
  • 访问验证配置

    	配置文件位置:/etc/httpd/conf/httpd.conf
    	配置命令:
    	authtype basic				#认证类型
    	authname "please input username and password"
    	authuserfile /etc/httpd/conf/httpuser		#建立的访问用户文件路径,用以验证
    	require valid-user			#固定形式:仅有效用户可访问
    	
    	建议:验证文件(用以访问的用户文件)所属者为Apache,且仅Apache可读
    

三、lamp平台搭建

​ 前提:linux、Apache已搭建

1、安装mysql并配置
  • 安转:

    	yum install mysql-server -y(y选项表示确定安装)	
    
  • 启动:

    	service mysqld start
    
  • 设置数据库用户管理员和root用户密码

    	mysqladmin -u root -p password "密码"
    	Enter password		#弹出确定旧密码,无则回车
    
2、安装php并配置
  • 安装:yum install PHP

  • 安装插件:php-mysql、php-mbsring

  • 配置php

    • 配置文件位置:/etc/php.ini

    • 开启短标记功能:

      	short_open_tag = off		#改为on
      
    • 编辑php文件:xxx.php

      	短标记格式:
      	<?
      		phpinfo();		#函数语句
      	?>
      

lnmp安全配置

​ lnmp平台。n代表nginx,nginx是一个轻量级web软件。支持庞大的并发访问。

一、Nginx

1、nginx的安装配置
	注意:编译前确保已存在开发环境软件包(依赖)
	yum -y install pcre-devel zlib-devel	#安装依赖
	useradd -M -s /sbin/nologin nginx		#创建运行用户和组
	
	#编译安装:
	tar zxf ginx-1.6.0.tar.gz
	./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
	make && make install
	
	#启用
	/usr/local/nginx/sbin/nginx		#启动脚本,-t选项可检查配置文件错误
	#停用
	./nginx -s stop
2、主配置文件

​ nginx.conf 主配置文件:全局配置、1/0事件、HTTP配置

  • 全局配置

    	#user nobody;     			#运行用户如果未指定
    	 worker_processes 1;		#工作进程数(根据cpu核心数设定)
    	#error_log logs/error_log;	#错误日志的文件配置
    	#pid logs/nginx.pid;		#pid文件处理
    
  • 1/0事件配置

    	events{
    	 user epoll;      #使用模型类型
    	 worker_connections 4096;	#每个进程处理4096连接
    	}
    
  • HTTP配置

    	http{
    		include mime.types;			#文件拓展名与文件类型映射表
    		default_type application/octet-stream;		#默认文件类型
    		sendfile on;				#支持文件发送、下载
    		keepalive_timeout 65		#连接保持超时时间,单位s
    		server{
    			listen 80;
    			server_name www.test.com	#网站名称
    			location/{					#定义安装目录为软件根目录
    				root html;				#网页存放目录
    				index index.html index.htm		#默认索引页
    			}
    			error_page 500 502 503 504 /50x.html;	#内部错误反抗页面
    			location=/50x.html{			#错误页面配置
    				root html;
    			}
    		}
    	}
    

二、php安装与配置(详解)

1、安转php解析环境
	源码安装,yum直接安装安转请查看lamp平台搭建——安装php并配置
	#解包
	tar xf php-5.3.28.tar
	#安装依赖
	yum istall -y libxml2-devel libjpeg-devel libpng-devel	
	#配置:
	./configure --prefix=/usr/local/php5 --with-gd --with-zlib 
	--with-config-file-path=/usr/local/php5 --with-gd --with-mbstring
	--enable-fpm --with-jpg-dir=/usr/lib
	#编译:
	make && make install
2、配置文件及命令路径优化
  • 建立配置文件
	yum remove phpmore php-cli
	cp php.ini-development /usr/local/php5/php.ini
	vim php.ini
		开启短标记(php语句)功能:short_open_tag=on
	#创建链接(类似桌面快捷方式)
	ln -s /usr/local/php5/bin/*/uer/sbin/
	ln -s ··············/sbin/*/usr/sbin/
  • php启动与配置

     #启动:
     cd /usr/local/php5/etc/
     cp php-fpm.conf.default   ==改为==>  php-fpm.conf	#建立启动配置文件
     php-fpm
     
     #查看启动状态:
     ss -anptl | grep 9000		#默认监听端口为9000
    
  • 实现php解析

    	#修改nginx配置文件使其调用php-fpm进程
    	server{
    	···········
    	location ~\.php$ {
    		root /usr/local/nginx/html;			#php网页根目录
    		fastcgi pass 127.0.0.1:9000;		#php-fpm的监听地址
    		fastcgi index index.php;			#php首页文件
    		include fastcgi.conf;				#调用fastcgi配置文件
    		}
    	}
    

三、Tomcat

​ Tomcat为apach下一款java web应用软件

1、Tomcat的部署
  • 安装Tomcat

    	例:
    	tar xf apache-tomcat-7.0.54.tar.gz
    	mv apache-tomcat-7.0.54 /usr/local/tomcat7		#文件启命名
    
  • 启动Tomcat

    	tomcat启动关闭脚本/tomcat/bin目录下
    	#启动
    	./startup.sh
    	#关闭
    	shutdown.sh
    	
    	注意:tomcat前提是有java环境
    	命令:java -version   #验证查看主机java环境
    	无环境则下载java解析器:JDK
    
  • 验证启动状态

    	ss -anptl | grep 8080		#默认端口为8080
    
2、Tomcat目录介绍
	目录位置:/usr/local/tomcat
	-bin			#存放启动和关闭Tomact的脚本
	-config			#存放Tomcat全局配置文件
	-lib			#存放Tomcat需要的库文件
	-logs			#日志文件
	-work			#jsp编译产生的class文件
	-webapps		#主页存放目录,/usr/local/tomcat7/webapps/ROOT 为默认主页存放位置
	
	示例:首页文件:index.jsp
		<%@page language="java" import="java.util*" PageEncoding="utf-8"%>
		<html>
		··········
		</html>

四、负载均衡

1、N+T负载均衡架构

​ 一台Tomcat站点可能出现故障等问题,不能单独应用于生产环境,需要一套可靠的web站点架构。利用nginx反向代理搭配多台Tomcat服务主机可以构成负载均衡的站点架构。

架构示意图:
						======>tomcat
	Nginx =====> 交换机 =
	(调度作用)			 =======>tomcat		#架构中服务器处于同于网段

​ 其中,nginx具有支持大量并发访问并具有调度能力,本身不做web解析。分配请求给其他Tomcat服务器,调度分配服务器资源以均衡负载。

2、nginx反向代理
	例:利用nginx反向代理两个Tomcat站点实现负载均衡。
	#安装反向代理:
	./configure --prefix=/usr/local/nginx --user=nginx
	--group=nginx --with-file-aio --with-http_stub_status_module 
	--with-http_gzip_static_module --with-http_flv_module
	--with-http_ssl_module
	
	#命令解析
	user,group					#指定用户名和组
	with-file-aio				#启用文件修改
	with-http_stub_status_module#启用状态统计
	with-http_gzip_static_module#启用gzip静态解压
	with-http_flv_module		#启用flv模块
	with-http_ssl_module		#启用ssl模块
3、配置nginx
	修改配置文件:nginx.conf
	#http{·····}第一个大括号处加入:
	upstream tomccat server{ 				#自定义调度服务名
		server 172.16.0.100:8080 weight=1;	#可供nginx调配的服务器主机
		server 172.16.0.200:8080 weight=1;	#注意:weight为权重值,表优先级
		}
        
     在http区域location{·····}加入
     #配置反向代理
     proxy pass http://tomcat server

防火墙技术与应用

一、iptables包过滤

1、iptables工具
  • 用于控制数据包的处理,有4个功能表。
  • raw表、mangle表,用于数据流量的跟踪和整形,使用较少。
  • NAT表。网络地址转换。
  • filter表。过滤,类似于windows防火墙,可编写规律对数据包过滤、处理。
2、filter表
  • 在filter表中规则优先级自上而下降低,注意 -I、-A选项的使用。

  • filter表查看命令:

    	iptables -t filter -nvl		#n代表数字显示ip,v代表详细信息,l列出。
    
  • chain(链)

    • 每个表都有专门写规则的地方,即chain(链)
    • filter表含三个链:
      • INPUT #入站规则链
      • FORWARD #转发规则链(当源地址及目标地址都不是本机地址)
      • OUTPUT #出站规则
示例:
	FORWARD:pkts bytes target port opt in out source destination
	         包   字节   处理方法 协议    网口进出
	例Ping包:4    248  REJET(拒绝)all -- * *  原地址   目标地址
	
注意:
	watch -n 1 iptables -t filter -nvl 		#每隔1s执行一遍“1”后面命令
3、配置入站规则
  • 命令格式

    	iptables [-t表名] 选项 [链名] [条件] [-j 控制类型]
    	例:iptables [-t filter] -I [IPUT] [-P icmp] [-j REJECT]
    
  • 注意事项

    • 不指定表名时,默认指filter表。
    • 不指定链名时,默认指表内的所有链。
    • 除非设置链的默认策略,否则必须指定匹配条件。
    • 选项、链名、控制类型使用大写字母,其余均小写。
4、数据包常见控制类型
  • ACCEPT:允许通过
  • DROP:直接丢弃,不给出任何回应
  • REJET:拒绝通过,必要时会给出提示
  • LOG:记录日志信息,然后付给下一条规则继续匹配
5、常见管理选项
  • 添加新的规则

    	-A		#在链的末尾追加一条规则
    	-I		#在链的开关(或指定序号)插入一条规则。
    	
    	例:#-p(小写p)指定协议
    	iptables -t filter -A INPUT -p tcp -j ACCEPT
    	iptables -I INPUT -p udp -j ACCEPT
    	iptables -I INPUT 2 -p icmp -j ACCEPT
    
  • 查看规则

    	-l					#列出所有的规则条目
    	-n					#以数字形式显示地址、端口等信息
    	-v					#以更详细的方式显示规则信息
    	-line-numbers		#查看规则时,显示规则符号(序号)
    
  • 删除、清空规则

    	-D				#删除链内指定序号(或内容)的一条规则。
    	-F				#清空所有的规则
    	
    	例:iptables -D FORWARD 2			#2表示规则序号
    
  • 设置默认策略

    	-P(大写)		#为指定链设置默认规则
    	
    	例:#注意:默认规则只能是DROP 或者 ACCEPT。
    	iptables -t filter -P FORWARD DROP
    	iptables -P OUTPUT ACCEPT		
    
6、规则的匹配条件
  • 通用匹配

    • 可直接使用,不依赖于其他条件或拓展

    • 包括网络协议、IP地址、网络接口等条件

      	#常见的通用匹配
      	-p 协议名			#协议匹配
      	-s 源地址		
      	-d 目标地址			#地址匹配
      	-i 入站网卡		
      	-o 出站网卡(端口)	 #接口匹配
      
  • 隐含匹配

    • 要求以特定的协议匹配作为前提

    • 包括端口、tcp标记、icmp类型等条件

      	#常见隐含匹配条件
      	--sport 源端口
      	--dport 目的端口			#端口匹配
      	--tcp-flags 检查范围		#TCP标记匹配
      	--icmp-type ICMP类型		 #ICMP类型匹配
      	
      	例:
      	iptables -A INPUT -p icmp --icmp-type 8 -j DROP
      	iptables -A INPUT -p tcp --dport 20;21 -j ACCEPT
      
  • 显示匹配

    • 要求以“-m拓展模块”的形式明确指出类型

    • 包括多端口、MAC地址、ip范围、数据包状态等条件

      	#常见显示匹配条件
      	-m multiport --sport 源端口列表				
      	-m multiport --dport 目的端口列表			#多端口匹配
      	-m iprange --src-range ip范围			   #ip范围匹配
      	-m mac --mac-source MAC地址			   #MAC地址匹配
      	-m state --state 连接状态				  #状态匹配
      
7、规则的备份及还原
  • 导出(备份)规则

    • iptables-save工具
    • 可结合重定向输出保存到指定文件 ==> iptables-save > /opt/iprules_all.txt
  • 还原

    导入:iptables-save < /opt/iprules_all.txt

    ​ service iptables save #设置为默认规则永久有效

二、网络地址转换(NAT表)

1、NAT表

​ 注意:配置规则时应该注意filter表中的FORWAOD链

  • 查看NAT表规则

    	iptables -t NAT -nvl
    
  • chain(链)

    	PREROUTING			#路由前链
    	POSTROUTING			#路由后链
    	OUTPUT				#出站链
    	
    	规则格式:pakts bytes target port opt in out soure destination
    
2、源地址转换SNAT
  • 添加规则示例:命令与与filter表类似

    示例:
    iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 源地址 -j SNAT --to-source 网关地址
    	#网关地址为出私网ip地址
    
  • 当网关地址会变化时:

    	iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 源地址 -j MASQUUERADE
    	
    
3、目标地址转换DNAT

​ 添加规则示例:

	iptables -t nat -I PREROUTING -i eth1 -d 网关地址 -p tcp --dport 网关转换端口 -j DNAT
	--to-destination 目标地址及端口
	
	图示:
		数据包 ====> nat PREROUTING ===符合DNAT> filter FORWARD(转发)
							|
						  不符合
							|
							v
						filter INPUT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值