云计算之走进LINUX(二)

引言

 * 第二部分  云计算应用管理

        [Shell脚本基础]

        [使用变量]

        [条件测试及选择]

        [列表式循环] 

        [系统安全保护]

        [配置用户环境]   

        [防火墙策略管理]

        [ISCSI共享存储]

        [数据库服务基础]

        [管理表数据]

        [配置NFS共享]   

        [HTTP服务基础]

        [网页内容访问]

        [部署动态网站]

        [安全web服务]  

        [samba共享]

        [聚合网络]

        [基础邮件服务]

        [GPT分区]


 第二部分  云计算应用管理


1.Shell脚本基础

脚本:一个可以执行的文件,运行可以实现某种功能

绿色:表示可执行程序 

案例1:编写hello.sh脚本

[root@server0 ~]# vim /root/hello.sh

echo Hello World  

[root@server0 ~]# chmod +x /root/hello.sh    #为脚本文件添加执行权限 

[root@server0 ~]# /root/hello.sh  #绝对路径运行脚本

规范Shell脚本的一般组成

     • #! 环境声明,以下代码由谁进行翻译执行

     • 注释文本

     • 可执行代码                   

[root@server0 ~]# vim  /root/hello.sh

  #!/bin/bash 

  echo  Hello  World 

  cat  /etc/redhat-release   #输出当前红帽系统的版本信息 

  uname  -r    #输出当前使用的内核版本

  hostname           #输出当前系统的主机名

  ifconfig  |  head -2    #输出当前主机的IP地址 

[root@server0 ~]# /root/hello.sh

重定向输出

     > :只收集前面命令的正确输出 

     2>:只收集前面命令的错误输出

     &>:正确与错误都收集

[root@server0 ~]# cat /opt/1.txt /a > /opt/2.txt 

[root@server0 ~]# cat /opt/1.txt /a 2> /opt/2.txt 

[root@server0 ~]# cat /opt/1.txt /a &> /opt/2.txt

    单引号 ' ' : 取消所有特殊字符的意义,原样输出 

[root@server0 ~]# echo '* | & ^ % ***' 

    反撇号 ` `$( ) :将命令的输出,直接参与下一次命令的运行

[root@server0 ~]# date +%F

2019-07-06

[root@server0 ~]# cd /opt/

[root@server0 opt]# mkdir  nsd-`date +%F` 

[root@server0 opt]# mkdir  abc-$(date +%F)

[root@server0 opt]# mkdir  $(hostname)-$(date +%F)

案例:创建用户并且设置密码的脚本

  黑洞设备:/dev/null

[root@server0 /]# vim /root/user.sh

#!/bin/bash

useradd nsd04 &> /dev/null 

echo '用户nsd04创建成功'

echo 123  |  passwd --stdin nsd04 &> /dev/null

echo '用户nsd04密码设置成功'

[root@server0 /]# chmod +x /root/user.sh

[root@server0 /]# /root/user.sh

 为了增强脚本适应环境的变化以及需求的变化所有使用变量 

 变量:会变化的量   以不变的名称,存储可以变化的值 

      类似与容器 

  格式:   变量名=存储的值

[root@server0 /]# vim  /root/user.sh      

 #!/bin/bash

 a=tc

 useradd  $a  &> /dev/null

 echo  用户$a创建成功

 echo  123  |  passwd --stdin  $a  &> /dev/null

 echo  用户$a密码设置成功 

 交互式在命令行传递参数给脚本的代码 

  read -p  '屏幕提示信息'

           1.直接产生交互 

           2.记录用户在键盘上所有输入

           3.将记录的内容交由变量储存

[root@server0 /]# vim /root/user.sh

 #!/bin/bash

 read  -p  '请输入您要创建的用户名:'    a

 useradd $a  &> /dev/null 

 echo 用户$a创建成功

 echo 123  |  passwd --stdin $a &> /dev/null

 echo 用户$a密码设置成功 

vim错误解决:产生交换文件(缓存文件)

]# vim /opt/4.txt 

]# rm -rf /opt/.4.txt.swp  #删除交换文件  

定义/赋值变量

• 设置变量时的注意事项

    – 等号两边不要有空格

    – 变量名只能由字母/数字/下划线组成,区分大小写

    – 变量名不能以数字开头,不要使用关键字和特殊字符

    – 若指定的变量名已存在,相当于为此变量重新赋值

• 基本格式

    – 引用变量值:$变量名

    – 查看变量值:echo $变量名、echo ${变量名}

[root@server0 ~]# a=rhel

[root@server0 ~]# echo $a

[root@server0 ~]# echo ${a}

[root@server0 ~]# echo $a7

[root@server0 ~]# echo ${a}7

[root@server0 ~]# b=7

[root@server0 ~]# echo ${a}${b}

环境变量 :变量名大写   由系统定义并且赋值完成 

   USER=当前登录的用户身份 

[root@server0 ~]# echo $USER

[root@server0 ~]# su - student

[student@server0 ~]$ echo $USER

[student@server0 ~]$ exit

[root@server0 ~]# su - dc

[dc@server0 ~]$ echo $USER

[dc@server0 ~]$ exit

位置变量:由系统定义并且赋值完成

 非交互式 在命令行传递参数给脚本的代码

[root@server0 ~]# vim /root/1.sh

#!/bin/bash 

echo $1

echo $2 

echo $3 

[root@server0 ~]# /root/1.sh  haha  tom  dcc

[root@server0 ~]# vim /root/user.sh 

#!/bin/bash

useradd  $1  &> /dev/null

echo 用户$1创建成功

echo 123  |  passwd --stdin $1 &> /dev/null

echo 用户$1密码设置成功

[root@server0 ~]# /root/user.sh  jack

[root@server0 ~]# vim /root/2.sh

 #!/bin/bash

 cat  -n  $1  |  head  -$2

[root@server0 ~]# chmod +x /root/2.sh

[root@server0 ~]# /root/2.sh  /etc/passwd  3 

预定义变量:由系统定义并且赋值完成

$# 已加载的位置变量的个数,判断用户是否输入命令行参数 

[root@server0 ~]# vim /root/1.sh 

#!/bin/bash

echo $1

echo $2

echo $3

echo $#

[root@server0 ~]# /root/1.sh haha  xixi  hehe  lele

$? 程序退出后的状态值,0表示正常,其他值异常

条件测试及选择

–  [   测试表达式 ]     #每一部分之间都要有空格

 常用的测试选项

• 检查文件状态

  -e:存在及为真                                       

  -d:存在并且必须为目录  才为真

  -f:存在并且必须为文件  才为真

[root@server0 ~]# [ -e /aaa ]

[root@server0 ~]# echo $?

[root@server0 ~]# [ -f /etc/passwd ]

[root@server0 ~]# echo $?

[root@server0 ~]# [ -f /etc/ ]

[root@server0 ~]# echo $?

[root@server0 ~]# [ -d /etc/ ]

[root@server0 ~]# echo $?

• 比较整数大小

  -gt:大于

  -ge:大于等于

  -eq:等于 

  -ne:不等于

  -lt:小于

  -le:小于等于

[root@server0 ~]# [ 1 -eq 1 ]

[root@server0 ~]# echo $?

[root@server0 ~]# [ 1 -ge  1 ]

[root@server0 ~]# echo $?

[root@server0 ~]# [ 1 -gt  1 ]

[root@server0 ~]# echo $?

[root@server0 ~]# [ 10 -le 12 ]

[root@server0 ~]# echo $?

• 字符串比对

    ==:一致为真 

    !=:不一致为真 

[root@server0 ~]# [ student == redhat ]

[root@server0 ~]# echo $? 

[root@server0 ~]# [ $USER == root ] 

[root@server0 ~]# echo $?

[root@server0 ~]# [ student != redhat ]

[root@server0 ~]# echo $?

if双分支处理

if  [条件测试];then

   命令序列xx

 else

 命令序列yy

fi

 [root@server0 ~]# vim  /root/if01.sh

 #!/bin/bash

 if  [  $1  -eq  1  ];then

  echo  hello

else

  echo  hi

 fi

[root@server0 ~]#  /root/if01.sh  1

 判断用户是否输入参数(位置变量)

[root@server0 ~]# vim  /root/if02.sh  

#!/bin/bash

if   [  $#  -eq  0  ];then

 echo 您没有输入参数

else 

 echo 您输入了参数 

fi 

[root@server0 ~]# /root/if02.sh 

[root@server0 ~]# /root/if02.sh test 

案例:利用read获取用户名进行判断   

  如果用户存在,则输出  用户已存在 

  如果用户不存在,则输出  用户不存在 

[root@server0 ~]# vim  /root/if03.sh 

#!/bin/bash

read  -p  '请输入您要测试的用户名:'    a 

id  $a  &> /dev/null

if  [  $?  -eq  0  ];then

  echo  用户$a已存在

else

  echo  用户$a不存在 

fi

[root@server0 ~]# /root/if03.sh

[root@server0 ~]# vim   /root/if04.sh   

#!/bin/bash

read -p  '请输入您要测试的IP地址:'     ip 

ping  -c  2  $ip  &> /dev/null       #-c指定ping的次数

if  [  $?  -eq  0  ];then

 echo $ip可以通信

else 

 echo $ip不可以通信

fi

[root@server0 ~]# /root/if04.sh 

if多分支处理

if [条件测试1];then

   命令序列xx

elif [条件测试2];then

   命令序列yy 

else

   命令序列zz

fi 

案例:利用read获取用户的成绩

  如果大于等于90,则输出  优秀

  如果大于等于80,则输出  良好 

  如果大于等于70,则输出  一般

  如果大于等于60,则输出  合格

  以上均不满足,则输出  再牛的肖邦也弹不出哥的悲伤

[root@server0 ~]# vim  /root/if05.sh

#!/bin/bash

read  -p  '请输入您的成绩:'      num

if   [  $num  -ge  90  ];then

  echo  优秀

elif [  $num  -ge  80  ];then 

  echo  良好

elif [  $num  -ge  70  ];then 

  echo  一般

elif [  $num  -ge  60  ];then 

  echo  合格 

else 

  echo 再牛的肖邦也弹不出哥的悲伤 

fi

列表式循环,解决重复性的操作

    for  献血车   in  献血的队伍

do

    抽血

done

[root@server0 ~]# vim  /root/for01.sh

#!/bin/bash

for  a  in zhangsan lisi  wangwu haha xixi

do 

 echo $a 

done 

[root@server0 ~]# vim /root/for01.sh

#!/bin/bash

for  a  in zhangsan lisi  wangwu haha xixi 

do

 useradd  $a  &> /dev/null

 echo  $a用户创建成功

done

 列表值可以不参与,循环代码的执行

[root@server0 ~]# vim /root/for01.sh

#!/bin/bash

for  a  in zhangsan lisi  wangwu haha xixi

do

 echo I Love DC 

done

造数工具:制造连续范围的数字   {起始值..结束值} 

[root@server0 ~]# vim  /root/for01.sh 

#!/bin/bash 

for  a  in  {1..99}

do

 sleep 0.5           #暂停0.5

 echo I Love DC $a

done

[root@server0 ~]# /root/for01.sh

案例4:编写一个判断脚本 

在 server0 上创建 /root/foo.sh 脚本

1)当运行/root/foo.sh redhat,输出为fedora

2)当运行/root/foo.sh fedora,输出为redhat

3)当没有任何参数或者参数不是 redhat 或者fedora, 

其错误输出产生以下信息: /root/foo.sh redhat|fedora


  1.系统安全保SELinux 安全机• Security-Enhanced Linux– 美国 NSA 国家安全局主导开发,一套增强 Linux 系统安全的强制访问控制体系

– 集成到 Linux 内核(2.6 及以上)中运行
– RHEL7 基于 SELinux 体系针对用户、进程、目录和文件
提供了预设的保护策略,以及管理工具
SELinux 的运行模式
--enforcing(强制)  --permissive(宽松)   – disabled(彻底禁用)
任何模式切换成 disabled 模式,都要经历重启
切换运行模式
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
虚拟机 server0
[root@server0 ~]# getenforce    #查看当前的状态
[root@server0 ~]# setenforce 0    #临时修改为宽松模式
[root@server0 ~]# getenforce    #查看当前的状态
[root@server0 ~]# vim /etc/selinux/config    #通过配置文件修改SeLinux策略(重启后方可生效)
SELinux=permissive


2.alias 别名设置
• 查看已设置的别名
– alias [别名名称]
• 定义新的别名
– alias 别名名称= '实际执行的命令行'
• 取消已设置的别名
– unalias [别名名称]
• 影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效
• 影响所有用户的 bash 解释环境
– /etc/bashrc,每次开启 bash 终端时生效
[root@server0 ~]# vim /root/.bashrc
alias hello='echo hello'
[root@server0 ~]# vim /home/student/.bashrc
alias hi='echo hi'


3.虚拟机 server0:搭建 Web 服务器
Web 服务:提供网页内容
实现 Web 服务的软件: httpd  Nginx  Tomcat
实现 Web 通信的协议: http(超文本传输协议)
(1.)安装 httpd 软件
[root@server0 ~]# yum -y install httpd      #安装apache服务
(2.)重启程序(重启服务)
[root@server0 ~]# systemctl restart httpd      #启动apache服务
(3.)本机测试访问
[root@server0 ~]# firefox 172.25.0.11      #测试apache服务
(4.)书写自己的页面文件
默认存放路径:/var/www/html        #默认网页存储目录
默认首页文件名称:index.html         #访问默认首页
[root@server0 ~]# vim /var/www/html/index.html
<marquee><font color=red><h1>NSD1906 haha     #编写一个简单网页
[root@server0 ~]# firefox 172.25.0.11


4.虚拟机 server0:搭建 FTP 服务
FTP 服务:传输数据
FTP 协议:文件传输协议
实现 FTP 服务软件:vsftpd
默认共享路径:/var/ftp
1.安装 vsftpd 软件
[root@server0 ~]# yum -y install vsftpd
2.重启程序(重启服务)
[root@server0 ~]# systemctl restart vsftpd
[root@server0 ~]# firefox ftp://172.25.0.11


5.防火墙策略管理
作用: 隔离 众多的策略,允许出站,严格控制入站
硬件防火墙   软件防火墙
firewalld 服务基础
• 系统服务:firewalld
• 管理工具:firewall-cmd、firewall-config
预设安全区域
• 根据所在的网络场所区分,预设保护规则集
– public:仅允许访问本机的 ssh dhcp ping 服务
– trusted:允许任何访问
– block:阻塞任何来访请求(明确拒绝,有回应客户端)
– drop:丢弃任何来访的数据包(没有回应,节省服务端资源)
根据数据包的源 IP 地址
数据包: 源 IP 地址
目标 IP 地址 数据
防火墙判定原则:
1.查看数据包的源 IP 地址,然后查看自己所有的区域,那个区域中有该源 IP 地址的规则,则进入该区域
2.进入默认区域(public)
防火墙默认区域的修改
虚拟机 server:
]# firewall-cmd --get-default-zone          #查看默认区域
]# firewall-cmd --set-default-zone=block     #修改默认区域
]# firewall-cmd --get-default-zone
]# firewall-cmd --set-default-zone=drop
]# firewall-cmd --get-default-zone
互联网常见的协议:
http:超文本传输协议      默认端口:80
https:安全的超文本传输协议      默认端口:443
DNS:域名解析协议   默认端口:53
FTP:文件传输协议   默认端口:21
tftp:简单的文件传输协议   默认端口:69
telnet:远程管理协议(明文传输)   默认端口:23
ssh:远程管理协议(加密传输)   默认端口:22
SMTP:邮件协议(用户发邮件)   默认端口:25
pop3:邮件协议(用户收邮件)   默认端口:110
snmp:简单的网络管理协议   默认端口:161
防火墙区域添加允许的协议
]# firewall-cmd --set-default-zone=public #修改默认区域
]# firewall-cmd --zone=public --list-all #查看区域规则
]# firewall-cmd --zone=public --add-service=ftp #添加协议
]# firewall-cmd --zone=public --add-service=http
]# firewall-cmd --zone=public --list-all
虚拟机 desktop
[root@desktop0 ~]# firefox 172.25.0.11
#访问成功
[root@desktop0 ~]# firefox ftp://172.25.0.11 #访问成功
#防火墙规则的永久设置
– 永久(permanent)
]# firewall-cmd --reload
#重新加载防火墙所有配置
]# firewall-cmd --zone=public --list-all
]# firewall-cmd --permanent --zone=public --add-service=http     #永久添加协议
]# firewall-cmd --permanent --zone=public --add-service=ftp
单独拒绝虚拟机 desktop 访问
虚拟机 server:将虚拟机 desktop 的 IP 地址写入 block
]# firewall-cmd --zone=block --add-source=172.25.0.10    #添加 IP 到防火墙规则
]# firewall-cmd --zone=block --list-all
虚拟机 desktop:
]# firefox 172.25.0.11
#访问失败
]# firefox ftp://172.25.0.11
#访问失败
]# firefox 172.25.0.11
#可以进行访问
]# firefox ftp://172.25.0.11
#可以进行访问
虚拟机 server: 删除规则
]# firewall-cmd --zone=block --remove-source=172.25.0.10
虚拟机 desktop:
]# firefox 172.25.0.11
#可以进行访问
]# firefox ftp://172.25.0.11
#可以进行访问
端口: 协议或程序或服务的编号
利用 root 可以改变端口,而且一个程序可以具备多个端口
监听端口
实现本机的端口映射
• 本地应用的端口重定向(端口 1 --> 端口 2)
客户端访问: firefox 172.25.0.11:5423--->172.25.0.11:80
虚拟机 server:
]# firewall-cmd --permanent --zone=public  --add-forward-port=port=5423:proto=tcp:toport=80        #端口重定向
]# firewall-cmd --reload        #重新加载防火墙规则
]# firewall-cmd --zone=public --list-all    #查看防火墙规则
虚拟机 desktop: 
[root@desktop0 ~]# firefox 172.25.0.11:5423


 6.iSCSI 网络磁盘

• Internet SCSI,网际 SCSI 接口    默认端口:3260
– 一种基于 C/S 架构的虚拟磁盘技术
– 服务器提供磁盘空间,客户机连接并当成本地磁盘使用
• backstore,后端存储
– 对应到服务端提供实际存储空间的设备,需要起一个管理名称
• target,磁盘组
– 是客户端的访问目标,作为一个框架,由多个 lun 组成
• lun,逻辑单元
– 每一个 lun 需要关联到某一个后端存储设备,在客户端
会视为一块虚拟硬盘
• ISCSI Qualified Name 名称规范(iqn)
– iqn.yyyy-mm.倒序域名:自定义标识
– 用来识别 target 磁盘组,也用来识别客户机身份
一 修改防火墙默认区域
虚拟机 server
]# firewall-cmd --set-default-zone=trusted      #设置防火墙规则为允许
虚拟机 desktop
]# firewall-cmd --set-default-zone=trusted
二 划分一个 5G 的主分区
[root@server0 ~]# fdisk /dev/vdb      #磁盘分区
[root@server0 ~]# lsblk        #查看分区情况
虚拟机 server 服务端:
1.安装软件包 targetcli
[root@server0 ~]# yum -y install targetcli    #将 IP 从防火墙规则中删除2.运行 targetcli 命令进行配置
[root@server0 ~]# targetcli
/> ls    #查看相关配置
1)建立后端存储 backstore,后端存储
/> backstores/block create name=nsd dev=/dev/vdb1
2)建立 target 磁盘组
/> iscsi/ create iqn.2019-07.com.example:server
3)进行 lun 关联
/> iscsi/iqn.2019-07.com.example:server/tpg1/luns    create /backstores/block/nsd
4)设置访问控制,客户端声称的名字,符合 iqn 名称规范
/> iscsi/iqn.2019-07.com.example:server/tpg1/acls create iqn.2019-07.com.example:desktop
5)设置监听的 IP 地址
/> iscsi/iqn.2019-07.com.example:server/tpg1/portals create ip_address=172.25.0.11
三 重启服务(重启程序)
[root@server0 ~]# systemctl restart target
[root@server0 ~]# systemctl enable target     #设置为开机自启
虚拟机 desktop
1.安装软件包(客户端软件)
• 所需软件包:iscsi-initiator-utils
[root@desktop0 ~]# yum repolist
[root@desktop0 ~]# rpm -q iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.873-21.el7.x86_64
[root@desktop0 ~]# yum -y install iscsi(tab)
2.设置客户端生成的名字
[root@desktop0 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-07.com.example:desktop
3.客户端刷新声称名字的服务
[root@desktop0 ~]# systemctl restart iscsid
Warning: Unit file of iscsid.service changed on
disk, 'systemctl daemon-reload' recommended.
[root@desktop0 ~]# systemctl daemon-reload
[root@desktop0 ~]# systemctl restart iscsid
4.发现共享存储
Linux 查看命令帮助的方法 : man iscsiadm
全文查找/example
按 n 项下跳转匹配,看到 EXAMPLES
[root@desktop0 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11  --discover
方法二:发现 iSCSI 磁盘
– iscsiadm -m discovery -t st -p 服务器地址[:端口]
5.加载共享存储
[root@desktop0 ~]# systemctl restart iscsi
[root@desktop0 ~]# systemctl enable iscsi
[root@desktop0 ~]# lsblk


7.数据库服务基础
什么是数据库: 存放数据的仓库
数据库中有众多库,在每一个库中有众多的表格
• 常见的关系型 数据库管理系统
– 微软的 SQL Server
– IBM 的 DB2
– 甲骨文的 Oracle、MySQL
– 社区开源版 MariaDB
database:数据库
虚拟机 server:部署 mariadb 数据库服务器
• RHEL7 中的 MariaDB 相关包
mariadb-server :提供服务端有关的系统程序
[root@server0 ~]#yum -y install mariadb-server
[root@server0 ~]# systemctl restart mariadb
[root@server0 ~]# systemctl enable mariadb
数据库的基本操作:
[root@server0 ~]# mysql
#进入数据库
MariaDB [(none)]> show databases;
#查看所有的库
MariaDB [(none)]> create database nsd; #创建 nsd 库
MariaDB [(none)]> show databases;
MariaDB [(none)]> drop database nsd; #删除 nsd 库
MariaDB [(none)]> show databases;
MariaDB [(none)]> create database nsd1906;
MariaDB [(none)]> show databases;
MariaDB [(none)]> use mysql;
#切换到 mysql 库
MariaDB [nsd1906]> use mysql;
MariaDB [mysql]> show tables; #查看当前库中有哪些表格
MariaDB [mysql]> exit #退出整个数据库
在 Linux 命令行,为数据库管理员设置密码
数据库管理员为 root,对数据库有最高权限用户,存放在 mysql 库 user 表
Linux 系统管理员为 root,对系统有最高权限用户,存放/etc/passwd
• 为数据库账号修改密码
– mysqladmin [-u 用户名] [-p[旧密码]] password '新密码'
]# mysqladmin -u root password '123' #首次设置密码
]# mysql -u root -p
#交互式进入
Enter password:
]# mysql -u root -p123 #非交互式进入
已知旧密码修改新密码
]# mysqladmin -u root -p123
password '456'
MariaDB 主配置文件:
[root@server0 ~]# ls /etc/my.cnf
表格 : 增(insert)  删(delete)  改(update)  查(select)
• 导入/恢复到数据库
– mysql [-u 用户名] [-p[密码]] 数据库名 < 备份文件.sql
#导入数据库
[root@server0 ~]# wget http://classroom.example.com/pub/materials/users.sql
[root@server0 ~]# ls
]# mysql -u root -p123 nsd1906 < /root/users.sql
]# mysql -u root -p123
#进入到数据库
MariaDB [(none)]> use nsd1906; #切换到 nsd1906 库
MariaDB [nsd1906]> show tables; #显示所有表格
查(select)
格式: select 表字段
from 库名.表名 where 条件 ;
]# mysql -u root -p123    #进入到数据库
> use nsd1906;    #切换到 nsd1906 库
> show tables;    #显示所有表格
> select * from base;    #查看表所有字段及所有记录内容
> select * from location;     #查看表所有字段及所有记录内容
查询表结构: desc 表名;
MariaDB [(none)]> use nsd1906;
MariaDB [nsd1906]> desc base;
MariaDB [nsd1906]> use mysql;
MariaDB [mysql]> desc user;
MariaDB [mysql]> select user,host,password from user;
数据库授权
用户授权设置
• MariaDB [(none)]> 交互指令
– GRANT 权限列表 ON 数据库名.表名 TO 用户名@
客户机地址 IDENTIFIED BY '密码';
– 除了 root 用户,此 nsd1906 数据库只能被用户 lisi 查询,
此用户的密码为 123
> grant select on nsd1906.* to lisi@localhost identified by '123';
当 lisi 从 localhost 本地登录,输入密码 123,将会获得 nsd1906 库中所有表格的查询权限;
> select user,host,password from user;
案例 4:使用数据库查询
2. 在系统 server0 上使用数据库 nsd1906,并使用相
应的 SQL 查询以回答下列问题:
1)密码是 solicitous 的人的名字?
[root@server0 ~]# mysql -u root -p123
> use nsd1906;
> select * from base;
> select * from base where password='solicitous';
> select name from base where password='solicitous';
2)有多少人的姓名是 Barbara 同时居住在 Sunnyvale?
> select * from base,location
where base.name='Barbara' and
location.city='Sunnyvale' and base.id=location.id;
> select count(*) from base,location
where base.name='Barbara' and
location.city='Sunnyvale' and base.id=location.id;
> insert base values('6','Barbara','xixi'); #插入记录
> select * from base;
> insert location values('6','Sunnyvale'); #插入记录
> select * from location;
1. 禁止空密码 root 用户访问 mariadb 数据库
> use mysql;
> select user,host,password from user;
> select user,host,password from user where password='';
> delete from user where password='';
#删除记录
> select user,host,password from user;
> flush privileges;
#刷新 user 表记录
验证登录失败:
[root@server0 ~]# mysql -u root -h server0.example.com


 8.NFS 共享

环境准备:防火墙设置
虚拟机 server
]# firewall-cmd --set-default-zone=trusted
虚拟机 desktop
]# firewall-cmd --set-default-zone=trusted
NFS 共享概述
• Network File System,网络文件系统
– 用途:为客户机提供共享使用的文件夹
– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
• 所需软件包:nfs-utils
• 系统服务:nfs-server
虚拟机 server:构建 NFS 服务
1.安装 nfs-utils 软件包
[root@server0 ~]# rpm -q nfs-utils
nfs-utils-1.3.0-0.el7.x86_64
2.配置共享
[root@server0 ~]# mkdir /nsd
[root@server0 ~]# echo 123 > /nsd/1.txt
[root@server0 ~]# ls /nsd/
[root@server0 ~]# vim /etc/exports
– 文件夹路径 客户机地址(权限) 客户机地址(权限) .. ..
/nsd  *(ro)
3.重启服务(重启程序)
[root@server0 ~]# systemctl restart nfs-server
虚拟机 desktop:访问共享文件夹
1.挂载共享目录
]# mkdir /mnt/a /mnt/b
]# showmount -e 172.25.0.11
#查看服务端共享内容
]# mount 172.25.0.11:/nsd /mnt/a/
]# df -h
]# ls /mnt/a
]# df -ah
#显示当前全部的挂载
2.开机自动挂载/etc/fstab
_netdev:声明网络设备
指明挂载本设备需要有网络参数再进行挂载
[root@desktop0 ~]# vim /etc/fstab
172.25.0.11:/nsd /mnt/a nfs defaults,_netdev 0 0
[root@desktop0 ~]# umount /mnt/a
[root@desktop0 ~]# umount /mnt/b
[root@desktop0 ~]# df -ah
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -ah


9.HTTP 服务基础
Web 服务:提供网页内容
• 基于 B/S (Browser/Server)架构的网页服务
– 服务端提供网页
– 浏览器下载并显示网页
• 软件包:httpd(Apache 组织) #专门实现 Web 服务的软件
虚拟机 server:
1.安装 httpd 软件
[root@server0 ~]# yum -y install httpd
2.重启服务
[root@server0 ~]# systemctl restart httpd
3.访问测试
[root@server0 ~]# firefox 172.25.0.11
4.书写页面文件
]# echo '<h1>NSD1906 Web' > /var/www/html/index.html
]# cat /var/www/html/index.html
]# firefox 172.25.0.11
主配置文件配置字段:
– Listen:监听地址:端口(80)
– ServerName:本站点注册的 DNS 名称(空缺)
– DocumentRoot:网页根目录(/var/www/html)
– DirectoryIndex:起始页/首页文件名(index.html)
虚拟机 classroom:
DNS 服务器的解析:将域名解析为 IP 地址
server0.example.com----->172.25.0.11
www0.example.com----->172.25.0.11
webapp0.example.com----->172.25.0.11
[root@desktop0 ~]# nslookup webapp0.example.com
[root@desktop0 ~]# nslookup server0.example.com
[root@desktop0 ~]# nslookup www0.example.com
– DocumentRoot:网页文件的根目录(/var/www/html)
虚拟机 server
]# mkdir /var/www/myweb
]# echo '<h1>wo shi myweb' > /var/www/myweb/index.html
]# cat /var/www/myweb/index.html
]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/myweb"
]# systemctl restart httpd
虚拟机 desktop:测试
[root@desktop0 ~]# firefox 172.25.0.11
网络路径与实际服务器路径
网页文件的根目录
客户端:firefox http://172.25.0.11:80---->服务端 172.25.0.11
----->httpd 80----->DocumentRoot /var/www/myweb--->index.html
客户端: firefox 172.25.0.11
服务端: /var/www/myweb
客户端: firefox 172.25.0.11/abc
服务端: /var/www/myweb/abc/index.html
DocmentRoot /var/www/myweb
客户端: firefox 172.25.0.11/var/www/myweb/abc
服务端: /var/www/myweb/var/www/myweb/abc
虚拟机 server:
]# mkdir /var/www/myweb/abc
]# echo '<h1>wo shi abc' >
/var/www/myweb/abc/index.html
]# firefox 172.25.0.11/abc
vsftpd----->/var/ftp
httpd------>/var/www/html


10.虚拟 Web 主机
• 虚拟 Web 主机
– 由同一台服务器提供多个不同的 Web 站点
• 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于 IP 地址的虚拟主机
• 配置文件路径
– /etc/httpd/conf/httpd.conf #主配置文件
– /etc/httpd/conf.d/*.conf
#调用配置文件
• 为每个虚拟站点添加配置
<VirtualHost IP 地址:端口>
ServerName 此站点的 DNS 名称
DocumentRoot 此站点的网页根目录
</VirtualHost>
虚拟机 server: vim 命令模式下 u 可以撤销
虚拟 Web 主机优先级,由上到下依次匹配,匹配即停止
一旦使用虚拟 Web 主机功能,所有的网站都必须利用虚拟 Web 主机实现
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName www0.example.com
DocumentRoot /var/www/baidu
</VirtualHost>
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /var/www/qq
</VirtualHost>
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/myweb
</VirtualHost>
[root@server0 ~]# systemctl restart httpd
Web 访问控制,针对存放网页文件的目录
子目录默认继承父目录的 Web 访问控制
<Directory />
Require all denied  #拒绝所有人访问
</Directory>
<Directory "/var/www">
Require all granted    #允许所有人访问
</Directory>
案例:自定义 Web 的网页文件根目录
1.实现 server0.example.com 访问网页文件根目录修改为/webroot
]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /webroot
</VirtualHost>
]# mkdir /webroot
]# echo '<h1>wo shi webroot' > /webroot/index.html
2.修改访问控制
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory  "/webroot">  #针对/webroot 路径
Require all granted    #允许所有人访问
</Directory>
[root@server0 ~]# systemctl restart httpd
3.SELinux 策略
[root@server0 ~]# setenforce 0
[root@server0 ~]# getenforce
Permissive
[root@server0 ~]# vim /etc/selinux/config
SELINUX=permissive
[root@server0 ~]# firefox server0.example.com
环境准备:防火墙设置
虚拟机 server
]# firewall-cmd --set-default-zone=trusted
虚拟机 desktop
]# firewall-cmd --set-default-zone=trusted
33文件夹权限
• 针对 DocumentRoot 网页目录的权限控制
– httpd 运行身份(用户/组):apache
客户机地址限制
• 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的 ACL 访问权限
– 除非针对子目录有明确设置
<Directory 目录的绝对路径>
.. ..
Require all denied|granted
Require ip IP 或网段地址 .. ..
</Directory>
案例 1:配置网页内容访问
在 Web 网站 http://server0.example.com 的
DocumentRoot 目录下创建一个名为 private 的子目录,要求如下:
1.创建目录
]# cat /etc/httpd/conf.d/nsd01.conf #查看 DocumentRoot
]# mkdir /var/www/abc01/private
2.从 http://classroom.example.com/pub/materials/private.html 下载一个文件副本到这个目录,重命名为
index.html
不要对文件 index.html 的内容作任何修改
]# cd /var/www/abc01/private
]# wget http://classroom.example.com/pub/materials/private.html
]# mv private.html index.html
]# firefox server0.example.com/private
3.从虚拟机 server0 上,任何人都可以浏览 private 的内容
但是从其他系统不能访问这个目录的内容
[root@server0 /]# vim /etc/httpd/conf/httpd.conf
[root@server0 /]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/var/www/abc01/private">
Require ip 172.25.0.11  #仅允许 172.25.0.11 访问
</Directory>
[root@server0 /]# systemctl restart httpd
虚拟机 desktop:
[root@desktop0 ~]# firefox server0.example.com/private
Forbidden
You don't have permission to access /private on this server.
案例 2:使用自定 Web 根目录
调整 Web 站点 http://server0.example.com 的网页目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录
]# mkdir /webroot
]# echo '<h1> wo shi webroot' > /webroot/index.html
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
<VirtUalHost *:80>
ServerName server0.example.com
DocumentRoot /webroot
</VirtUalHost>
2)修改访问控制
[root@server0 /]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/webroot">
Require all granted  #允许所有人可以访问
</Directory>
[root@server0 /]# systemctl restart httpd
3)修改 SELinux 策略:安全上下文值(打标签) 布尔值策略 非默认端口开放
]# semanage --help
]# semanage fcontext -l | less
#查看所有上下文值
]# ls -Zd /var/www/
#专查看目录上下文值
]# ls -Zd /webroot/
• 方式 1:参照标准目录,重设新目录的属性
– chcon [-R] --reference=模板目录
新目录
]# chcon -R --reference=/var/www /webroot/
]# ls -Zd /webroot/
测试:
[root@desktop0 ~]# firefox server0.example.com


11.部署动态网站
静态网站的运行
• 服务端的原始网页 = 浏览器访问到的网页
– 由 Web 服务软件处理所有请求
– 文本(txt/html)、图片(jpg/png)等静态资源
动态网站的运行
• 服务端的原始网页 ≠ 浏览器访问到的网页
– 由 Web 服务软件接受请求,动态程序转后端模块处理
– PHP 网页、Python 网页、JSP 网页......
为站点 webapp0.example.com 配置提供动态 Web 内容,要求如下:
1.部署 Python 页面文件
]# cat /etc/httpd/conf.d/nsd01.conf #查看 DocumentRoot
]# cd /var/www/abc03
]# wget http://classroom.example.com/pub/materials/webinfo.wsgi
]# ls
2.页面跳转(页面别名 地址重写)方便用户的访问
当用户访问 webapp0.example.com 将 webinfo.wsgi 页面进行呈现
格式: Alias 网络路径
实际路径
Alias    /    /var/www/abc03/webinfo.wsgi
当用户访问的时网页文件根目录时,跳转到/var/www/abc03/webinfo.wsgi
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
<VirtUalHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
Alias /    /var/www/abc03/webinfo.wsgi
当用户访问的是网页文件根目录时,跳转到/var/www/abc03/webinfo.wsgi
</VirtUalHost>
[root@server0 /]# systemctl restart httpd
[root@desktop0 ~]# firefox webapp0.example.com
3.翻译 Python 页面代码
[root@server0 /]# yum -y install mod_wsgi
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
<VirtUalHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
WsgiScriptAlias / /var/www/abc03/webinfo.wsgi
</VirtUalHost>
[root@server0 /]# systemctl restart httpd
页面内容显示:
UNIX 时间戳:从 1970-1-1 0:0:0 到达现在时间,所经历的秒数
[root@desktop0 ~]# firefox webapp0.example.com
4.此虚拟 Web 主机侦听在端口 8909
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
Listen 8909
#设置 httpd 程序监听 8909 端口
<VirtUalHost *:8909>
#设置虚拟 Web 主机监听 8909 端口
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
WsgiScriptAlias / /var/www/abc03/webinfo.wsgi
</VirtUalHost>
]# semanage port -l | grep http #查看关于 http 开放的端口
]# semanage port -a -t http_port_t -p tcp 8909
此命令会占用较多内存, -a 添加 -t 类型 -p 协议
]# systemctl restart httpd
测试验证: firefox webapp0.example.com:8909
总结:访问时端口优先级最高


12.安全 Web 服务
PKI 公钥基础设施
• Public Key Infrastructure,公钥基础设施
– 公钥:主要用来加密数据
– 私钥:主要用来解密数据(与相应的公钥匹配)
– 数字证书:证明拥有者的合法性/权威性(单位名称、
有效期、公钥、颁发机构及签名、......)
– Certificate Authority,数字证书授权中心:负责证书
的申请/审核/颁发/鉴定/撤销等管理工作
数据证书授权中心:虚拟机 classroom
虚拟机 server:
为站点 www0.example.com 配置安全加密的 Web 内容
1.部署网站证书(营业执照)
]# cd /etc/pki/tls/certs/
]# wget http://classroom.example.com/pub/tls/certs/server0.crt
2.部署网站的根证书(工商局的信息)
]# cd /etc/pki/tls/certs/
]# wget http://classroom.example.com/pub/example-ca.crt
3.部署解密数据的私钥
]# cd /etc/pki/tls/private/
]# wget http://classroom.example.com/pub/tls/private/server0.key
4.安装可以进行加密支持的软件 mod_ssl
[root@server0 /]# yum -y install mod_ssl
[root@server0 /]# vim /etc/httpd/conf.d/ssl.conf
补充:vim 末行模式 输入 set nu 可以开启行号
59 DocumentRoot "/var/www/abc02"
60 ServerName www0.example.com:443
指定网站证书
100 SSLCertificateFile /etc/pki/tls/certs/server0.crt
指定解密的私钥
107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key
指定网站的根证书
122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
[root@server0 /]# systemctl restart httpd
[root@server0 /]# firefox https://www0.example.com
我已了解可能的风险--->添加例外---->确认安全例外


13.补充:Samba 共享服务(Windows 与 Linux 跨平台的共享)
smb(用户验证通信协议) cifs(Samba 独有文件系统)
程序名(服务名):smb
虚拟机 server:
1.安装软件包
[root@server0 /]# yum -y install samba
2.创建 Samba 共享帐号
1.建立在本地用户的基础上
2.采用独立的密码,与用户登录系统的密码不同
[root@server0 /]# useradd harry
[root@server0 /]# pdbedit -a harry #添加为 samba 帐号
new password:
retype new password:
[root@server0 /]# pdbedit -L
#查看所有的 samba 帐号
[root@server0 /]# pdbedit -x harry #删除 samba 帐号 harry
[root@server0 /]# pdbedit -a harry
3.创建共享目录及配置共享
[root@server0 /]# mkdir /public
[root@server0 /]# echo haha > /public/1.txt
[root@server0 /]# vim /etc/samba/smb.conf
命令模式: G(大写) 到全文的末行
[nsd]
#设置共享名
path = /public
#设置实际共享的路径
[root@server0 /]# systemctl restart smb
4.修改 SELinux 策略: 布尔值策略(服务功能的开关)
[root@server0 /]# getsebool -a | grep samba
[root@server0 /]# setsebool samba_export_all_ro on
[root@server0 /]# getsebool -a | grep samba
客户端:虚拟机 desktop0
1.安装软件包,支持 cifs 文件系统
[root@desktop0 ~]# yum -y install cifs-utils
2.进行挂载访问
]# mkdir /mnt/smb
格式:mount -o user=用户名,pass=密码 //服务器 IP 地址/共享名 挂载点目录
]# mount -o user=harry,pass=123 //172.25.0.11/nsd /mnt/smb/
]# df -h
]# ls /mnt/smb/
3.开机自动挂载/etc/fstab
//172.25.0.11/nsd /mnt/smb cifs defaults,user=harry,pass=123,_netdev 0 0
[root@desktop0 ~]# umount /mnt/smb/
[root@desktop0 ~]# df -h
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h


14.设置网络参数
一 设置永久的主机名,配置文件为/etc/hostname
[root@server0 ~]# echo 'nsd.tedu.cn' > /etc/hostname
[root@server0 ~]# cat /etc/hostname
nsd.tedu.cn
[root@server0 ~]# hostname
二 永久设置设置 IP 地址 子网掩码 网关地址
1.查看识别的网卡名
[root@nsd ~]# nmcli connection show
名称
System eth0
2.设置永久的 IP 地址 子网掩码 网关地址
]# nmcli connection modify 'System eth0'
ipv4.method manual
ipv4.addresses '172.25.0.110/24
172.25.0.254'
connection.autoconnect yes
]# nmcli connection 修改 '网卡名'
ipv4.方法 手工设置
ipv4.地址 'IP 地址/子网掩码 网关地址'
每次开机自动启用配置
3.激活配置
[root@nsd ~]# nmcli connection up 'System eth0'
[root@nsd ~]# ifconfig | head -2
[root@nsd ~]# route
#查看网关地址
Gateway
172.25.0.254
三 DNS 服务器的地址
永久配置文件:/etc/resolv.conf
]# echo 'nameserver 172.25.254.254' > /etc/resolv.conf
]# cat /etc/resolv.conf
nameserver 172.25.254.254
]# nslookup server0.example.com


15.聚合连接(链路聚合 网卡绑定)
作用:实现网卡的高可用
eth1
eth2
虚拟网卡:team0 192.168.1.1
1.生成虚拟的网卡 team0
参考:man teamd.conf
全文搜索/example 按 n 跳转匹配
]# nmcli connection add type team
con-name team0 ifname team0 autoconnect yes
config '{"runner": {"name": "activebackup"}}'
]# nmcli connection 添加 类型 组队
配置文件名 team0 网卡名 team0 开机自动启用
配置运行方式为 活跃备份方式
]# ifconfig team0
2.添加成员
]# nmcli connection add type team-slave
con-name team0-1 ifname eth1 master team0
]# nmcli connection add type team-slave
con-name team0-2 ifname eth2 master team0
]# nmcli connection 添加 类型 team-成员
配置文件名 team0-2 网卡名为 eth2 主设备 team0
3.team0 配置 IP 地址
]# nmcli connection modify team0
ipv4.method manual ipv4.addresses 192.168.1.1/24
connection.autoconnect yes
]# nmcli connection up team0
]# teamdctl team0 state
#专用于查看 team0 信息
]# ifconfig eth2 down
]# teamdctl team0 state
如果有敲错,删除所有重新开始
]# nmcli connection delete team0
#删除配置文件
]# nmcli connection delete team0-1 #删除配置文件
]# nmcli connection delete team0-2 #删除配置文件


16.基础邮件服务
前提:修改 IP 地址,符合 DNS 解析结果
[root@nsd ~]# nmcli connection modify 'System eth0'
ipv4.method manual
ipv4.addresses '172.25.0.11/24 172.25.0.254'
connection.autoconnect yes
[root@nsd ~]# nmcli connection up 'System eth0'
查看 DNS 服务器地址:
[root@nsd ~]# cat /etc/resolv.conf
nameserver 172.25.254.254
[root@nsd ~]# nslookup server0.example.com #测试解析
电子邮件通信
• 电子邮件服务器的基本功能
– 为用户提供电子邮箱存储空间(用户名@邮件域名)
– 处理用户发出的邮件 —— 传递给收件服务器
– 处理用户收到的邮件 —— 投递到邮箱
DNS 服务器:虚拟机 classroom
yg@qq.com
yg@server0.example.com
虚拟机 server:构建邮件服务器
1.安装 postfix 软件,实现邮件服务
[root@nsd ~]# rpm -q postfix
postfix-2.10.1-6.el7.x86_64
2.修改配置文件
[root@nsd ~]# vim /etc/postfix/main.cf
vim 末行模式: set nu 开启行号
99 myorigin = server0.example.com #默认补全的域名后缀
116 inet_interfaces = all #在本机所有网卡启用邮件功能
164 mydestination = server0.example.com
#判断为本域邮件的依据
3.重启邮件服务
[root@nsd ~]# systemctl restart postfix
使用 mail 命令发信/收信
• mail 发信操作
– mail -s
'邮件标题'
-r 发件人  收件人
[root@nsd ~]# useradd yg
[root@nsd ~]# useradd xln
[root@nsd ~]# mail -s 'test01' -r yg  xln
hahaxixihehelele
.
EOT
[root@nsd ~]# mail -u xln #查看 xln 的邮件
>N 1 yg@server0.example.c Sat Jul 13 14:2118/569
&1
#输入邮件编号 1 查看邮件内容
[root@nsd ~]# echo '123' | mail -s 'abc' -r yg xln
[root@nsd ~]# mail -u xln


 17.parted 分区工具,进行 GPT 分区模式

MBR 分区模式: fdisk 分区工具
最多有 4 个主分区,划分 3 个主分区,1 个扩展分区,n 个逻辑分区
最大的空间支持:2.2TB
40GPT 分区模式:parted 分区工具
最多有 128 个主分区
最大的空间支持:18EB
[root@nsd ~]# lsblk
[root@nsd ~]# parted /dev/vdb
(parted) mktable gpt    #指定分区模式 gpt
(parted) print    #输出分区表信息
(parted) mkpart    #划分新的分区
分区名称? []? nsd    #随意起名字
文件系统类型? [ext2]? xfs  #随意写不起决定性作用
起始点? 0
结束点? 2G
忽略/Ignore/放弃/Cancel? Ignore    #输入 i 忽略
(parted) unit GB  #使用 GB 作为单位显示
(parted) print

posted @ 2019-10-19 09:13  比特边界  阅读(236)  评论(0编辑  收藏  举报