Engineer01
磁盘管理: 通常为真空的,因为转速很高,一拆即报废。 磁道:track 扇区:sector 默认512字节 识别硬盘 => 分区规划 => 格式化 => 挂载使用 毛坯房---》 打隔断----》 装修---》 入住
一、分区规划
1)MBR/msdos:主引导记录模式
– 1~4个主分区,或者 3个主分区+1个扩展分区(n个逻辑分区)
– 最大支持容量为 2.2TB 的磁盘
– 扩展分区不能格式化
GPT:128个主分区, 最大支持容量为 18EB 的磁盘
修改硬盘的分区表
– fdisk 硬盘设备
fdisk /dev/vdb
常用交互指令:
m 列出指令帮助
p 查看现有的分区表
n 新建分区
d 删除分区
q 放弃更改并退出
w 保存更改并退出
partprobe : 刷新 划分的新分区
查看系统所有的磁盘设备 lsblk
/dev/sda5 : 第一块SCSI硬盘的第5个分区
第一块SCSI硬盘的第1个逻辑分区
2)parted(分区工具)——————》一路支持《tab键》
要支持大容量(18EB),需改用 gpt 分区模式可以有128个主分区
parted /dev/vdb
mktable gpt #指定分区的模式
print #输出所有分区信息
mkpart #划分新的分区
分区名称? []? haha #分区的名字
文件系统类型? [ext2]? ext4 #分区的文件系统类型,不起实际作用
起始点? 0 #起始点 , 第一个分区起始点为0
结束点? 4G #结束点
警告: The resulting partition is not properly aligned
for best performance.
忽略/Ignore/放弃/Cancel? Ignore #忽略
(parted) print #输出所有分区信息
(parted) unit GB #设置显示单位
(parted) print #输出所有分区信息
(parted) quit #退出
二、格式化分区 make file system
mkfs.ext4 /dev/vdb1
mkfs.ext4 mkfs.xfs 格式化ext4,xfs文件系统
blkid /dev/vdb1 #查看文件系统及UUID
三、挂载使用
1、临时挂载
mount /dev/vdb1 /mypart1
df -h #查看正在挂载的分区使用情况
2、开机自动挂载
①修改/etc/fstab配置文件
file system table
配置文件 /etc/fstab 的记录格式
设备路径 挂载点 文件系统类型 参数 备份标记 检测顺序
/dev/vdb1 /mypart1 ext4 defaults 0 0
因为是追加挂载设备故可以用echo直接追加写入配置文件
echo /dev/vdb1 /mypart1 ext4 defaults 0 0 > /etc/fstab
②mount -a
检测/etc/fstab开机自动挂载配置文件,格式是否正确
检测/etc/fstab中,书写完成,但当前没有挂载的设备,进行挂载
③df -h
总结:
1.查看磁盘 lsblk
2.划分分区 fdisk
3.刷新 partprobe
4.格式化 mkfs.ext4 mkfs.xfs
5.查看文件系统 blkid
6.挂载使用 mount 修改/etc/fstab配置文件
交换空间: 缓解真实物理内存的压力
由硬盘的空间来组成
交换分区:以空闲分区充当的交换空间
1.格式化交换分区
mkswap /dev/vdb1[1-2]
2.启用交换分区
swapon /dev/vdb1 #启用
swapon -s #查看交换空间的成员
3.停用交换分区
swapoff /dev/vdb1 #停用
swapon -s
4.实现开机自动启用交换分区/dev/vdb1
/dev/vdb1 swap swap defaults 0 0 (挂载点和文件系统都是swap)
swapon -a #自动检测/etc/fstab文件swap分区
swapon -s
LVM逻辑卷
作用: 1.整合分散的空间
2.逻辑卷空间可以扩大
新建逻辑卷: 将众多的物理卷(pv)组成卷组(vg),再从卷组中划分逻辑卷(lv)
面粉--------->大面团----->小面团--------->蒸----------->吃
物理卷pv 卷组vg 逻辑卷lv 格式化 挂载使用
pvs #查看物理卷基本信息
vgs #查看卷组基本信息
lvs #查看逻辑卷基本信息
一、逻辑卷的创建
1.建立vg卷组 (单位为pe)
格式:vgcreate 卷组名 设备路径
vgcreate nsd /dev/vdc[1-2]
(创建卷组时可以只用一个分区,面粉只有一坨就用一坨撒只要是闲置分区即可)
vgcreate -s 1M nsd /dev/vdc[1-2] (创建卷组时指定pe大小为1M)
2.创建lv逻辑卷
格式: lvcreate -n 逻辑卷名 -L 大小 卷组名
lvcreate -n vo -L 16G nsd
3.格式化,挂载使用
mkfs.ext4 /dev/nsd/vo (路径为/dev/卷组名/逻辑卷名)
/dev/nsd/vo /mylvm ext4 defaults 0 0
mount -a
df -h
二、逻辑卷的扩展,支持线上工作(可以不用重启生效)
卷组有足够的剩余空间 (大面团还有直接要)
1. 扩建逻辑卷的空间
lvextend -L 18G /dev/nsd/vo
lvs
2. 扩建逻辑卷的文件系统 (重新把扩大的空间装修 把新扯下来的小面团蒸)
resize2fs : ext4文件系统扩展命令
xfs_growfs : xfs文件系统扩展命令
df -h
resize2fs /dev/nsd/vo
df -h
卷组没有足够的剩余空间
1.扩展卷组
vgextend nsd /dev/vdc3
vgs
2. 扩建逻辑卷的空间
lvextend -L 25G /dev/nsd/vo
lvs
3. 扩建逻辑卷的文件系统
df -h
resize2fs /dev/nsd/vo
df -h
逻辑卷可以缩小,但是强烈不建议
PE:卷组划分空间的单位
vgdisplay nsd #显示卷组详细信息,看PE的大小
vgchange -s 1M nsd #修改卷组PE的大小
vgdisplay nsd #显示卷组详细信息,看PE的大小
lvcreate -L 250M -n lvtest02 nsd -l:指定PE的个数
逻辑卷的删除
首先删除LV逻辑卷,在删除VG卷组,最后删除PV物理卷 lvremove /dev/nsd/vo
Engineer02
初识shell脚本 Shell脚本:可以执行文件,可以实现某种功能 提前设计可执行语句,用来完成特定任务的文件 – 解释型程序 – 顺序、批量执行 构成: #! 环境声明 #!/bin/bash #注释文本 (解释脚本功能和设计理念) 可执行代码 echo友好提示语句 使脚本更友好的执行 1、vim /usr/bin/first.sh #可以直接在PATH环境变量的路径下写脚本 (任何工作目录下可以直接执行first.sh类似执行命令)
2、chmod +x /root/hello.sh #所有人加执行权限
3、/root/hello.sh #绝对路径运行
一般脚本为提高执行的效率,采用非交互式
请书写可以创建用户的脚本,并且为用户设置密码为123
#!/bin/bash
useradd nsd02
echo 123 | passwd --stdin nsd02
编写一个能输出系统信息的 /root/sysinfo.sh 脚本
1)输出当前红帽系统的版本信息
2)输出当前使用的内核版本
3)输出当前系统的主机名
4)输出当前ip地址
#!/bin/bash
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2
简单脚本技巧
管道传递
使用 | 管道操作
– 将前一条命令的标准输出交给后一条命令处理
重定向输出
> :将前面命令的正确输出,写入到文本文件中,只收集正确信息
2> :将前面命令的错误输出,写入到文本文件中,只收集错误信息
&> :将前面命令的正确与错误输出,写入到文本文件中,正确与错误都收集
&> /dev/null 把正确和错误信息都给黑洞设备(黑洞设备)
补充:
' ' : 取消所有特殊字符意义
$[ ]:运算 + - * / %10(取余数运算,求模) 取10的余数
定律 : 余数一定小于除数
tips经常用到:$( ) 与 反撇号:将命令的输出结果,作为参数
mkdir $(date +%F)
mkdir
hostname
-date +%F
mkdir nsd-date +%F
#!/bin/bash
useradd nsd05 &> /dev/null
echo nsd05用户创建成功
echo 123 | passwd --stdin nsd05 &> /dev/null
echo nsd05用户密码设置成功
变量:提高脚本的灵活度,适用多变的环境
变量:会变化的量,以不变的名称(容器杯子),存储可以变化的值(水,或者饮料)
自定义变量
变量的定义: 变量名=存储的值 (自定义变量)
#!/bin/bash
abc=kenji (以后只用改Kenji)
useradd $abc &> /dev/null
echo $abc用户创建成功
echo 123 | passwd --stdin $abc &> /dev/null
echo $abc用户密码设置成功
交互式,降低脚本使用的难度,用户在键盘上的输入,存放到变量中
read : 记录用户在键盘上的输入,并且存放到变量中
read -p '请输入您要创建的用户名:' abc
#!/bin/bash
read -p '请输入您要创建的用户名:' abc
useradd $abc &> /dev/null
echo $abc用户创建成功
echo 123 | passwd --stdin $abc &> /dev/null
echo $abc用户密码设置成功
定义/赋值变量
– 变量名只由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符
– 若指定的变量名已存在,相当于为此变量重新赋值
– 等号两边不要有空格
查看/引用变量
– 引用变量值:$变量名
– 查看变量值:echo $变量名、echo ${变量名}
a=rhel
echo $a
rhel
echo ${a}
rhel
echo $a7 (Linux不认识)
echo ${a}7
rhel7
环境变量 : 由系统定义赋值完成,用户直接调用(通常为大写且见名之意)
USER : 永远储存当前登陆的用户名
HOME :
PATH :与执行命令相关 在执行命令时,需要找到命令所对应的程序,Linux系统会到PATH变量值的所有
路径去寻找,如果找到就执行,没有就不执行 (所以创建脚本时可以直接vim 到这个变量有的路径下)
echo $PATH 查看PATH环境变量路径
RANDOM:范围是0--32767
位置变量:由系统定义赋值完成,用户直接调用 $[1...n] (非交互式赋值,更专业)
方便向脚本中传递命令行参数
vim /root/test.sh
#!/bin/bash
cat -n $1 | head -$2
/root/test.sh /etc/passwd 3
vim /root/123.sh
#!/bin/bash
echo $1
echo $2
echo $3
/root/123.sh haha abcd rhel7
预定义变量:由系统定义赋值完成,用户直接调用
$# 已加载的位置变量的个数
$* 所有位置变量的值
$? 程序退出后的状态值,0表示正常,其他值异常 (通常用echo $?来检查命令执行是否正确)
#!/bin/bash
cat -n $1 | head -$2
echo $#
echo $*
条件测试(判断)
检查文件状态
-e : 判断文档是否存在,存在为真
-d : 存在且为目录,才为真
-f : 存在且为文件,才为真
-r : 存在且具备读权限,才为真
-w : 存在且具备写权限,才为真
-x : 存在且具备执行权限,才为真
比较整数大小(带e字母都有等于二字,g(grow)代表大于,l(low)代表小于)
-gt:大于
-ge:大于等于
-lt:小于
-le:小于等于
-eq:等于
-ne:不等于
字符串比对
== : 字符串相等为真
!= : 字符串不相等为真
if选择结构 (固定格式)
if双分支处理
if [条件判断];then
命令序列xx
else
命令序列yy
fi
判断当前用户是否是root
#!/bin/bash
if [ $USER == root ];then
echo 当前是管理员
else
echo 当前是普通用户
fi
计算机随机产生一个 0到9之间的数字,用户输入一个0到9之间的数字
如果 用户输入的数字与 计算机随机产生 相等,则输出 您猜对了
如果 用户输入的数字与 计算机随机产生 不相等,则输出 猜错了
$RANDOM :系统储存随机数字
定律 : 余数一定小于除数
#!/bin/bash
read -p '请输入0到9之间的一个数字:' num1
num2=$[$RANDOM%10]
if [ $num1 -eq $num2 ];then
echo 您猜对了
else
echo 猜错了
echo 正确的数字为$num2
fi
判断是否ping通
#!/bin/bash
ping -c 2 $1 &> /dev/null (ping两次的意思 因为不给次数停不下来)
if [ $? -eq 0 ];then
echo 可以通信
else
echo 不可以
fi
判断是否有该用户
#!/bin/bash
read -p '请输入用户名:' user
id $user &> /dev/null
if [ $? -eq 0 ];then
echo 用户已存在
else
echo 用户不存在
fi
if多分支处理
if [条件测试1];then (1为真执行xx退出)
命令序列xx
elif [条件测试2];then (1为假,2为真,执行yy退出)
命令序列yy
elif [条件测试3];then (1,2都为假,3为真,执行aa退出)
命令序列aa
else
命令序列zz (1,2,3都为假,执行zz退出)
fi
书写一个成绩判断的脚本
用户输入成绩,0到100之间
如果,成绩 大于等于90以上 则输出 优秀
如果,成绩 大于等于80以上 则输出 良好
如果,成绩 大于等于70以上 则输出 合格
如果,成绩 大于等于60以上 则输出 仍需努力
以上条件均不满足:
则输出 再牛的肖邦,也弹不出哥的悲伤
#!/bin/bash
read -p '请输入您的成绩0-100:' 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循环处理
遍历/列表式循环
– 根据变量的不同取值,重复执行xx处理
for 变量名 in 值列表
do
循环的操作
done
for a in zhangsan lisi dc tc dz tz
do
useradd $a
done
{20..80} :造数工具,制造20到80 之间所有的数字
{ 起始..结束}
#!/bin/bash
for a in {1..20}
do
useradd stu$a
echo stu$a创建成功
done
循环可以与循环执行的操作无关 (循环的镶嵌)
#!/bin/bash
for a in {1..3}
do
read -p '请输入0到9之间的一个数字:' num1
num2=$[$RANDOM%10]
if [ $num1 -eq $num2 ];then
echo 您猜对了
else
echo 猜错了
echo 正确的数字为$num2
fi
done
但是这个脚本并没有猜对就跳出!(echo 您猜对了下面加个exit即可)
非常完整的脚本案例解析:
案例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
#!/bin/bash
if [ $# -eq 0 ];then #判断是否输入了位置参数
echo '/root/foo.sh redhat|fedora' >&2
#把正确变成错误输出
exit 2 #脚本退出返回值
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
else
echo '/root/foo.sh redhat|fedora' >&2
exit 3 #脚本退出返回值
fi
案例5:编写一个批量添加用户脚本
在 server0 上创建 /root/batchusers 脚本
1)此脚本要求提供用户名列表文件作为参数
http://classroom/pub/materials/userlist
2)如果没有提供参数,此脚本应该给出提示
Usage: /root/batchusers,退出并返回相应值
3)如果提供一个不存在的文件,此脚本应该给出提
示 Input file not found,退出并返回相应值
4)新用户的登录Shell为 /bin/false,无需设置密码
#!/bin/bash
if [ $# -eq 0 ];then
echo 'Usage: /root/batchusers' >&2
exit 2
elif [ -f $1 ];then
for i in `cat $1`
do
useradd -s /bin/false $i
echo $i创建成功
done
else
echo Input file not found >&2
exit 3
fi
Engineer03
系统安全保护(SElinux)
Security-Enhanced Linux
– 美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系
– 集成到Linux内核(2.6及以上)中运行
– RHEL7基于SELinux体系针对用户、进程、目录和文件提供了预设的保护策略,以及管理工具
SELinux root firewall 三者之间的关系
皇帝 宰相 皇宫看门侍卫 (但是root这个宰相随时可以叛变让皇帝驾崩)
SELinux的运行模式
– enforcing(强制)、---》 皇帝掌权
- permissive(宽松) ---》 傀儡皇帝只能那小本子记
– disabled(彻底禁用) —》 皇帝驾崩
变成disabled,都必须经过修改配置文件,重启才可以
切换运行模式
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
SELINUX=disabled
getenforce #查看当前SELinux状态
配置用户环境
影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效
影响所有用户的 bash 解释环境
– /etc/bashrc,每次开启 bash 终端时生效
新开一个全新的终端验证:
防火墙策略管理 (皇宫门带刀侍卫)
作用:隔离,过滤入站请求,允许出站
前提(搭两个服务来测试)
基本Web服务
1.服务端虚拟机Server,安装可以提供Web服务软件
yum -y install httpd
2.虚拟机Server操作,启动httpd服务,设置为开机自起服务
systemctl restart httpd #重起服务
systemctl enable httpd #设置开机自起服务
3.虚拟机Server操作,本机测试访问
firefox 172.25.0.11
4.虚拟机Server操作,书写页面文件
默认存放页面文件的路径:/var/www/html
默认页面文件名字:index.html
(想要使更换的网页内容生效:重启服务restart,enable,且要在setenforce 0即permission状态下才能实现)
写网站语言:html
vim /var/www/html/index.html
<marquee><font color=red> <h1>NSD1803
滚动 字体颜色 红色 最大字体
http:超文本传输协议
基本FTP服务: 文件传输协议
1.服务端虚拟机Server,安装可以提供FTP服务软件
yum -y install vsftpd
2.虚拟机Server操作,启动 vsftpd服务,设置为开机自起服务
systemctl restart vsftpd
systemctl enable vsftpd
3.虚拟机Server操作,本机测试:
默认FTP共享的路径:/var/ftp
firefox ftp://172.25.0.11
RHEL7的防火墙体系
系统服务:firewalld
管理工具:firewall-cmd、firewall-config(图形工具)
匹配规则的原则: 匹配即停止 (类似用户权限判断的原则)
预设安全区域
根据所在的网络场所区分,预设保护规则集
– trusted:允许任何访问
– public:仅允许访问本机的sshd、DHCP、ping少数几个服务
– block:阻塞任何来访请求,明确拒绝
– drop:丢弃任何来访的数据包,节省资源 (没有任何回应不答应不拒绝)
防火墙决定,客户端请求进入某个区域的规则:
1.查看客户端请求中源IP地址,再看所以有区域中,
哪一个区域有该源IP地址的规则,则进入该区域
2.进入默认区域,public
默认区域的修改
虚拟机Server
#firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop
#ping -c 2 172.25.0.11 #可以通信
虚拟机Server
#firewall-cmd --set-default-zone=block #修改默认区域
#firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop
#ping -c 2 172.25.0.11 #不可以通信,有回应
虚拟机Server
#firewall-cmd --set-default-zone=drop #修改默认区域
#firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop
#ping -c 2 172.25.0.11 #不可以通信,没有回应
互联网常见的服务协议 (八大协议)
http : 超文本传输协议
FTP : 文件传输协议
https : 安全的超文本传输协议
DNS : 域名解析协议
telnet : 远程管理协议
smtp : 邮件协议,用户发邮件协议
pop3 : 邮件协议,用户收邮件协议
tftp : 简单文件传输协议
默认区域服务的添加
虚拟机Server
# firewall-cmd --set-default-zone=public #修改默认区域
#firewall-cmd --zone=public --list-all #查看区域规则
#firewall-cmd --zone=public --add-service=http #添加服务
#firewall-cmd --zone=public --list-all
虚拟机Desktop
#firefox 172.25.0.11 #可以访问
#firefox ftp://172.25.0.11 #不可以访问
虚拟机Server
#firewall-cmd --zone=public --add-service=ftp
#firewall-cmd --zone=public --list-all
虚拟机Desktop
#firefox 172.25.0.11 #可以访问
#firefox ftp://172.25.0.11 #可以访问
策略的永久配置
– 永久(permanent)
虚拟机Server
#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
#firewall-cmd --zone=public --list-all
#firewall-cmd --reload
#firewall-cmd --zone=public --list-all
添加源IP的规则设置
虚拟机Server
#firewall-cmd --zone=block --list-all
#firewall-cmd --zone=block --add-source=172.25.0.10(把某个IP加入block区域)
#firewall-cmd --zone=block --list-all
虚拟机Desktop
#ping -c 2 172.25.0.11 #失败
#firefox 172.25.0.11 #失败
#firefox ftp://172.25.0.11 #失败
真机访问
#ping -c 2 172.25.0.11 #成功
#firefox 172.25.0.11 #成功
#firefox ftp://172.25.0.11 #成功
工作时防火墙,设置的方式
严格:默认区域为drop,把允许的IP单独放入trusted
宽松:默认区域为trusted,把拒绝的IP单独放入drop
端口:编号,标识作用,标识每个服务
ssh 22
http 80
telnet 23
实现本机的端口映射
本地应用的端口重定向(端口1 --> 端口2)
– 从客户机访问 端口1 的请求,自动映射到本机 端口2
– 比如,访问以下两个地址可以看到相同的页面:
客户端desktop-----》172.25.0.11:5423-----》服务端Server
服务端Server-----172.25.0.11:5423 移交 -----》172.25.0.11:80
虚拟机Server
#firewall-cmd --reload
虚拟机Desktop
#firefox 172.25.0.11 #可以访问
#firefox 172.25.0.11:5423 #不可以访问
虚拟机Server
#firewall-cmd --permanent --zone=public
--add-forward-port=port=5423:proto=tcp:toport=80
#添加- 转发- 端口 =将端口5423协议为tcp:转发到80
#firewall-cmd --reload
(若忘了加--permanent 刷了以后添加的端口转发会失效,便不能验证,所以这点很重要)
# firewall-cmd --zone=public --list-all
虚拟机Desktop
#firefox 172.25.0.11:5423 #可以访问
配置聚合连接 (网卡绑定、链路聚合)
eth1 eth2 -----》司机(奴隶)
虚拟网卡 team(组队)----》卡车 (对外IP为虚拟网卡ip)
1.创建 虚拟网卡 man teamd.conf #查看帮助信息
# nmcli connection add type team con-name team0 ifname team0 autoconnect yes
config '{"runner": {"name": "activebackup"}}'
# ifconfig #查看是否有team0网卡
# nmcli connection 添加 类型为 team(绑定类型)配置文件名为team0 ifconfig显示网卡名为
team0 每次开机自起 配置网卡绑定工作模式 热备份方式(网卡1挂了才换网卡2)
# 如果敲错误
# nmcli connection delete 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-slave 配置文件名 team0-1
网卡为 eth1 添加到team0中
#如果敲错误 nmcli connection delete team0-1
3.配置team0的IP地址
# nmcli connection modify team0 ipv4.method manual
ipv4.addresses 192.168.1.1/24 connection.autoconnect yes
4.激活所有配置
# nmcli connection up team0
# nmcli connection up team0-1
# nmcli connection up team0-2
如果激活失败 (删除了从头再来!)
# nmcli connection delete team0
# nmcli connection delete team0-1
# nmcli connection delete team0-2
终极验证:
# teamdctl team0 state #查看team0详细信息 (能看到目前是谁在工作)
# ifconfig eth1 down #禁用网卡 (禁了网卡1自动切换到网卡2,该操作也可切换工作网卡)
# teamdctl team0 state ifconfig eth1 up 打开1
ifconfig eth2 down 再次换到1
Engineer04 Windows下的共享 选文件夹右键 共享 高级共享 打钩 隐藏共享 :打钩后再共享名后加$ 访问时\192.168.1.1\nsd$ 前提条件 服务端和客户端防火墙的默认区域为trusted!
Samba服务基础 (第一类反根据功能向编译的软件,思想很牛逼)
配置SMB共享,跨平台的共享,Windows与Linux的共享
Samba 软件项目
– 用途:为客户机提供共享使用的文件夹
– 协议:SMB(TCP 139)、CIFS(TCP 445)
smb协议:建立通道的协议 cifs协议:文件传输的协议(既是协议又是文件系统)
类比:淘宝购物 电脑下单(通道) 到达手中(靠物流)
所需软件包:samba
系统服务:smb
Samba共享帐号:(在服务端创建,你知道服务端的账号密码才能判定你是安全的)
默认情况下,访问Samba共享必须通过用户验证
专门用于访问Samba共享时验证的用户与密码
与系统用户为同一个用户,但是密码时samba独立密码
使用 pdbedit 管理工具
– 添加用户:pdbedit -a 用户名
– 查询用户:pdbedit -L [用户名]
– 删除用户:pdbedit -x 用户名
修改 /etc/samba/smb.conf (服务配置文件)
path = 文件夹绝对路径
public = no|yes //默认no
browseable = yes|no //默认yes
read only = yes|no //默认yes
write list = 用户1 .. .. //默认无
valid users = 用户1 .. .. //默认任何用户
hosts allow = 客户机地址 .. ..
hosts deny = 客户机地址 .. ..
Samba服务搭建(只读)
服务端,虚拟机Server:
1.安装可以提供smb共享功能的软件
# yum -y install samba
2.建立Samba共享验证的用户
# useradd kenji
#useradd chihiro
#useradd harry
#pdbedit -a harry #添加为Samba共享帐号
#pdbedit -a kenji #添加为Samba共享帐号
#pdbedit -a chihiro #添加为Samba共享帐号
#pdbedit -L #查看所有Samba共享帐号
3.创建共享目录与文件
mkdir /common
echo 123 > /common/123.txt
4.修改配置/etc/samba/smb.conf
vim 末行模式 :set nu #添加行号
命令模式 G 到全文的最后
89行 workgroup = STAFF #指定工作组名
[common] #指定共享名
path = /common #指定共享文件夹的实际绝对路径
echo -e "[common]\n path = /common" >> /etc/samba/smb.conf
5.重起smb服务,刷新配置
#systemctl restart smb #重起服务
#systemctl enable smb #设置为开机自起
SELinux策略:布尔值
(所服务功能的开关,只有开和关两种状态,类似性别只有男女)
SELinux对跨平台软件特别把控,如Samba,通常情况都是关关关!!!
– 需要加 -P 选项才能实现永久设置
1. 查看samba 布尔值
#getsebool -a | grep samba
2.修改SELinux策略的布尔值
#setsebool samba_export_all_ro on
3. 查看samba 布尔值
#getsebool -a | grep samba
至此客户端已经搭完。
客户端虚拟机Desktop:
1.安装客户端软件,访问samba共享
#yum -y install samba-client
2. 查看服务端samba共享,目的看 共享名
# smbclient -L //172.25.0.11
Enter root's password: #直接敲回车
Sharename
common
3.以harry身份,访问服务端samba共享
#smbclient -U harry //172.25.0.11/common
Enter harry's password: #输入密码
Domain=[STAFF] OS=[Unix] Server=[Samba 4.1.1]
smb: \>
客户端虚拟机desktop
使用 mount 挂载访问 (临时挂载)
所需软件包:cifs-utils #支持cifs协议
#yum -y install cifs-utils
#mkdir /mnt/samba
#mount -o user=harry,pass=123 //172.25.0.11/common /mnt/samba/
#df -h
开机自动挂载
_netdev : 网络设备 (挂载网络设备时必给的参数)
先启动网络服务,具备网络参数后,再进行挂载
#yum -y install cifs-utils
#mkdir /mnt/samba
#vim /etc/fstab
//172.25.0.11/common /mnt/samba cifs
defaults,user=harry,pass=123,_netdev 0 0
(思路:文件系统cifs,参数要加用户名密码和网络设备_netdev)
#mount -a
#df -h #查看是否挂载成功
读写的Samba共享
服务端虚拟机Server:
1.部署共享
# mkdir /devops
#echo nsd > /devops/test.txt
#ls /devops
#vim /etc/samba/smb.conf #修改配置文件
#追加写入
[devops] #共享名
path = /devops #路径为/devops
write list = chihiro #允许chihiro用户可写
#systemctl restart smb
2.修改SELinux策略(布尔值)
#getsebool -a | grep samba
#setsebool samba_export_all_rw on
#getsebool -a | grep samba
3.用户本身的本地权限
(所有服务都有个用户判定机制,Samba最简单,以谁登陆判定为用户为谁,再判定该用户对该目录的权限)
#setfacl -m u:chihiro:rwx /devops (单独为这个用户设置权限)
#getfacl /devops
#ls -l /devops
客户端虚拟机desktop
1.实现开机自动挂载
#mkdir /mnt/pub
#vim /etc/fstab
//172.25.0.11/devops /mnt/pub cifs
defaults,user=chihiro,pass=123,_netdev 0 0
#mount -a
#df -h
总结:客户端访问服务端资源(排错)
1.服务本身的访问控制(开关状态)
2.本的目录的权限 (对于客户端的用户权限判定)
3.防火墙 (默认区域)
4.SELinux (状态)
Samba服务挂载mount -a 时出现permission dnied 而其他均为出错时,
检查配置文件中的验证用户是否为共享账号用户,可能该用户不在列表中
用pdbedit -L 检查配置文件中的用户是否为共享账号用户
multiuser机制,专门为普通用户设计,专为客户端设计
– multiuser,提供对客户端多个用户身份的区分支持
– sec=ntlmssp,提供NT局域网管理安全支持
必要的时候,任何普通用户都可以通过命令切换成权限较大的用户
来临时获取写的权限
配置文件参数: //172.25.0.11/devops /mnt/pub cifs
defaults,user=kenji,pass=123,_netdev,multiuser,sec=ntlmssp 0 0
配置NFS共享, Linux与Linux的共享(能ping通即可搭)
Network File System,网络文件系统
– 用途:为客户机提供共享使用的文件夹
– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
只读的NFS共享
服务端虚拟机server
1.所需软件包 : nfs-utils
rpm -qa | grep nfs #显示所有已安装,进行过滤
rpm - q nfs-utils
2.NFS共享主配置文件/etc/exports
vim /etc/exports
/nsd *(ro) #共享目录路径 *(所有网段客户,可设置网段) 客户端(权限)
echo "/nsd *(ro)" >> /etc/exports
3.重起nfs服务,设置为开机自起
systemctl restart nfs-server
systemctl enable nfs-server
客户端虚拟机Desktop
永久用:vim /etc/fstab
172.25.0.11:/nsd /mnt/nfs nfs defaults,_netdev 0 0
mkdir /mnt/nfs
mount -a
df -h
临时: showmount -e 172.25.0.11
mount 172.25.0.11:/nsd /mnt/nfs
nfs 格式 /共享目录 网段 (ro) 有网段就要加空格 没网段就*(ro) 没空格 Engineer05 iSCSI网络磁盘
一、fdisk 划分 分区 三个主分区 , 分别2个G两个逻辑分区 , 分别1个G
二、搭建iscsi共享存储
Internet SCSI,网际SCSI接口 – 一种基于C/S架构的虚拟磁盘技术 – 服务器提供磁盘空间,客户机连接并当成本地磁盘使用 – 端口:3260 思路:example:快递打包送货
服务端: TCL王牌大彩电 2寸-------->装箱 -------> 运输
客户端: ------》箱子 ------->拆开
共享存储服务端: /dev/vdb1(nsd)-->装箱(Target 磁盘组)--》传输
共享存储客户端: 箱子(Target 磁盘组)----->拆开
使用targetcli建立配置 ISCSI Qualified Name 名称规范 – iqn.yyyy-mm.倒序域名:自定义标识 虚拟机server0_搭建iscsi服务端:(可以tab!!)
1.安装可以提供共享存储功能的软件targetcli
2.进行配置共享存储
(都是打包装箱过程,拿到充气娃娃为了隐私重新起名;准备箱子,箱子上另外一个名字;把充气娃娃装进箱子;寄件人
姓名;寄件人地址;) 1)建立后端存储backstore,指定后端存储是那个分区,起名
[root@server0 ~]# targetcli /> ls #查看所有配置 /> backstores/block create nsd /dev/vdb1 后端存储/类型为块设备 创建 名字 实际设备路径
2)创建箱子并起名(建立iqn磁盘组) /> iscsi/ create iqn.2018-16.com.example:server0 (固定iqn格式啊我操2018-04 中间必须是两位!!)
3)将后端存储,放入箱子中(磁盘组 绑定 后端存储 luns) /> iscsi/iqn.2018-16.com.example:server0/tpg1/luns create /backstores/block/nsd
4)设置ACL访问控制(客户端访问时声称的名字)
/>iscsi/iqn.2018-16.com.example:server0/tpg1/acls create iqn.2018-16.com.example:test
5)设置提供服务的IP地址 />iscsi/iqn.2018-16.com.example:server0/tpg1/portals create 172.25.0.11
/> exit #保存并退出
3.重起服务target
虚拟机desktop0_客户端: 1.安装客户端软件 iscsi-initiator-utils.i686 2.修改配置文件,指定客户端声称的名字 #vim /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2018-16.com.example:test 3. 刷新 客户端声称的名字(客户端iqn)刷新IQN标识 [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.寻×××端,发现iSCSI磁盘 man iscsiadm #iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
172.25.0.11:3260,1 iqn.2018-16.com.example:server0 (不是命令 是结果)
5.重起客户端iscsi服务 iscsi 6.验证 lsblk
整理思路: 服务端:装包 targetcli 从库房里拿一个硅胶类型的充气娃娃取名苍井空(苍井空版本的) 拿一个箱子并配上名字编号 把苍井空放进编好号的箱子中 箱子外面重新取一个该货物(充气娃娃)的名字 (将来要告诉收货人的) 写上发货地址 启动服务(开始发货) 客户端:装包 iscsi-initiator-utils.i686 与送货人对接暗号 vim /etc/iscsi/initiatorname.iscsi 刷新暗号 根据发货地址找货 验货 systemctl restart iscsi lsblk
数据库服务基础 (Mariadb)
数据库:存放数据的仓库
数据库中有很多的库,每一个库中有很多的表格,每一个表格有很多的记录
表格:表记录 表字段(表头)
一、安装部署MariaDB数据库
mariadb-server
二、启动mariadb服务
restart mariadb
enable mariadb
三、使用MariaDB数据库 (所有命令都是要以分号结尾哈)
mysql #进入数据库
show databases; #查看所有库
create database nsd1803; #创建库
drop database nsd1803; #删除库
exit #退出
设置数据库管理员的密码
数据库管理员 和 系统管理员,不是同一个用户
数据库管理员:root 对所有库有完全控制权限, mysql库user表
系统管理员:root 对Linux系统有完全控制权限,/etc/passwd
mysqladmin [-u用户名] [-p[旧密码]] password '新密码'
mysqladmin -u root password '123'
mysql -u root -p (交互式进入)
mysql -uroot -p123 #非交互式进入
数据库主配置文件 /etc/my.cnf
mysql -uroot -p123 nsd1803 < users.sql 导入数据
use nsd1803; #进入nsd1803库
show tables; #查看所有表格
对于表格操作:
增(insert) 删 (delete) 改 (update) 查 (select)
select *(字段) from 表名;
查询表结构:desc 表名;
数据库的授权:
除了 root 用户,此nsd1803数据库只能被用户 lisi 查询,此用户的密码为123
GRANT 权限列表 ON 数据库名.表名 TO 用户名@客户机地址IDENTIFIED BY '密码';
grant select on nsd1803.* to lisi@localhost identified by '123';
当lisi用户从本地登陆输入密码123,将会获得nsd1803库中所有表的查询权限
验证: # mysql -ulisi -p123 #lisi可以登陆即可
使用数据库查询
1. 在系统 server0 上使用数据库 nsd1803,并使用相应的 SQL 查询以回答下列问题:
1)密码是 solicitous 的人的名字?
有条件的查询: where
> select * from base where password='solicitous';
> select name from base where password='solicitous';
> select * from base where name='tom';
> select * from base where password='456';
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','123456');
> select * from base;
> insert location values (6,'Sunnyvale');
> select * from location;
禁止空密码root用户访问 mariadb 数据库
> use mysql;
> desc user; #查看表结构
> select user,host,password from user where password='';
> delete from user where password=''; #删除表记录
> flush privileges; #刷新策略
> select user,host,password from user;
Engineer06 HTTP服务基础
基于 B/S (Browser/Server)架构的网页服务 (其实也是C/S架构的一种,只是必须要通过浏览器进行访问) – 服务端提供网页 – 浏览器下载并显示网页
Hyper Text Transfer Protocol,超文本传输协议(http)
Hyper Text Markup Language,超文本标记语言(html)
http 协议的端口:80
http (Apache) Nginx(tengine,适合中国国情,高并发的访问,企业用得多) Tomcat(jave环境)
提供的默认配置 – Listen: 监听地址:端口(80) – ServerName: 本站点注册的DNS名称(空缺) – DocumentRoot: 网页根目录(/var/www/html) – DirectoryIndex: 起始页/首页文件名(index.html)
一、搭建基本的Web服务
1.安装软件httpd
2.echo '<h1>First Web' > /var/www/html/index.html
3.重起httpd服务,设置开机自起动
4.curl +ip检查
tips:访问http即是访问网页文件根目录的内容,要访问其他内容,加上/目录即可。 1.修改配置文件/etc/httpd/conf/httpd.conf
ServerName server0.example.com:80 #把开头的#去掉 (修改域名) 2.修改配置文件 /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/myweb" (修改根目录) 客户端 firefox 172.25.0.11----》服务端:/var/www/myweb
客户端 firefox 172.25.0.11/test----》/var/www/myweb/test/index.html
虚拟Web主机 作用:让一台Web服务器,提供多个页面(生产环境中通常上来就搭建虚拟web主机)
搭建方式:
1.基于域名的虚拟Web
2.基于端口的虚拟Web
3.基于IP地址的虚拟Web
基于域名的虚拟Web (第一个学习的容器类型的配置,配置放在括号中间,通常是写在调用配置文件中) 写调用配置文件的好处: ① 方便日后维护修改(类似HTML中的css) ② 使主配置文件更简洁可读 ③ 加快读取速度 结构: <VirtualHost IP地址(网段也可):端口> ServerName 此站点的DNS名称 DocumentRoot 此站点的网页根目录 </VirtualHost>
配置文件路径
– /etc/httpd/conf/httpd.conf (主配置文件)
– /etc/httpd/conf.d/*.conf (调用配置文件)
1.修改调用配置文件
vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName www0.example.com
DocumentRoot /var/www/nsd01
</VirtualHost>
mkdir /var/www/nsd01
2.重起httpd服务
特点: ①:生产环境中通常上来就写虚拟web主机 (未雨绸缪,为以后提供多页面铺垫,思路清晰,方便维护) ②:一旦使用了虚拟web主机,所有站点必须用虚拟web来实现,会取消掉主配置文件中的server那么和
documentroot的配置。(类似HTML中的就进原则和后生效原则,因为是最后才读取的调用配置文件)
DocumentRoot: 网页根目录:客户端访问的起始点。 客户端直接访问域名或者ip的时候其实是访问到根目录下的文件内容。 如果不是index.HTML 那么就自己指定一下/A.HTML 即可 所以http可以共享文件(单向共享,客户端只能
下载不能上传?)
tips:服务访问控制通茶由SELinux和Firewall来实现,较少用服务本身的访问控制来实现(但是也要知道怎么配置)
网页内容访问
– 每个文件夹自动继承其父目录的ACL访问权限
– 除非针对子目录有单独明确设置
<Directory 目录的绝对路径> (Directory是目录的意思,设置目录内容的访问权限)
.. .. (设置目录下存放的index主页的访问权限控制)
Require all denied|granted 拒绝所有/允许所有
Require ip IP或网段地址 .. .. 仅允许该ip
</Directory>
主配置文件中: <Directory "/ ">
Require all denied
</Directory>
先是拒绝了根下所有访问权限
<Directory "/var/www/ ">
Require all granted
</Directory>
又允许了/var/www的所有 (所有默认在/var/www 所有目录都有访问权限)
案例4:使用自定Web根目录 调整 Web 站点 http://server0.example.com 的网页目录,要求如下: 使用 /webroot,作为此站点新的网页文件根目录 1.新建目录,写个测试网页 #mkdir /webroot #echo '<h1>wo shi Webroot' > /webroot/index.html
- 修改配置文件/etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> ServerName server0.example.com DocumentRoot /webroot #修改网页文件根目录 </VirtualHost>
- 追加写入 /etc/httpd/conf.d/nsd02.conf <Directory "/webroot"> (因为/ 是被拒绝所有的,/var/www/又单独允许了所有) Require all granted #允许所有 </Directory>
4)SELinux安全上下文(标识,标签) – chcon [-R] --reference=模板目录 新目录
#ls -Zd /webroot/ #查看目录标签值
#chcon -R --reference=/var/www /webroot/ #ls -Zd /webroot/ 5) 重起httpd服务 tips: 客户端访问http服务时用户判定为Apache(安装软件时会自动新建这个用户) SELinux安全上下文(标签): 皇帝为了方便管理宫内的房间,在每个房间的门上打上○△□等标签 方便下圣旨:所有的太监不能进入○房间 所有的宫内不能竟然△标志房间
SELinux为了更好的把控服务,你能访问哪些文件不能访问哪些文件SELinux把所有的文件目录打上
了标签,规定了哪些服务能访问哪些文件和目录一旦想进入规定范围之外的目录就会出手阻止。
semanage fcontext 显示所有安全上下文标签列表
semanage fcontext -L | grep httpd
ls -Zd /var/www 查看某个目录安全上下文标签
chcon -R --reference=/var/www /webroot/ 以。。为模板修改标签值
把/webroot/ 目录下的所有目录修改为和/var/www一样的标签值
部署动态网站(基于端口的虚拟web)
静态的网站 服务端的原始网页 = 浏览器访问到的网页 – 由Web服务软件处理所有请求 – 文本(txt/html)、图片(jpg/png)等静态资源
动态的网站 服务端的原始网页 ≠ 浏览器访问到的网页 – 由Web服务软件接受请求,动态程序转后端模块处理 – PHP网页、Python网页、JSP网页...... 1.部署Python动态页面文件
# cd /var/www/nsd02
# wget http://classroom.example.com/pub/materials/
webinfo.wsgi
2. 方便用户访问,页面的跳转(地址重写,页面别名alias)
当客户端访问webapp0.example.com-》/var/www/nsd02/webinfo.wsgi
修改配置文件 /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/nsd02
Alias / /var/www/nsd02/webinfo.wsgi
#当检测到客户端访问网页文件根目录时 跳转页面到webinfo.wsgi
</VirtualHost>
3. 安装一个可以解释Python页面程序,配置解释该页面(mod_wsgi)
Unix时间戳:从1970-1-1 0:0:0算起,到达当前时间经过的秒数
vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/nsd02
WsgiScriptAlias / /var/www/nsd02/webinfo.wsgi 调用软件翻译并跳转
</VirtualHost>
4.修改端口为8909,修改配置文件 /etc/httpd/conf.d/nsd01.conf
Listen 8909
<VirtualHost *:8909>
ServerName webapp0.example.com
DocumentRoot /var/www/nsd02
WsgiScriptAlias / /var/www/nsd02/webinfo.wsgi
</VirtualHost>
5. SELinux 非默认端口的开放
# semanage port -l | grep http 查看http服务默认端口开放情况
# semanage port -a -t http_port_t -p tcp 8909 非常耗内存 到内核交锋
-a添加 -t类型 -p协议
6.重起httpd服务
Engineer07 安全Web服务器 https协议: 443 端口 1.部署 网站证书(营业执照) cd /etc/pki/tls/certs/ server0.crt 2.部署 根证书(公安局信息,证书颁发机构的信息) cd /etc/pki/tls/certs/ example-ca.crt 3.部署 私钥 (用于解密) cd /etc/pki/tls/private/ server0.key 4.安装可以支持加密Web的软件 mod_ssl 5.修改配置文件 vim /etc/httpd/conf.d/ssl.conf 行号: 59DocumentRoot "/var/www/html" 60 ServerName server0.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
6.重起服务
基础邮件服务----》(重点要理解理论过程 类似写信)
SMTP:用户发邮件协议 25
pop3:用户收邮件协议 110
电子邮件服务器的基本功能
– 为用户提供电子邮箱存储空间(用户名@邮件域名)
– 处理用户发出的邮件 —— 传递给收件服务器
– 处理用户收到的邮件 —— 投递到邮箱
1. 安装 postfix 提供邮件功能的软件 postfix
2. 修改配置文件/etc/postfix/main.cf
99 myorigin = server0.example.com #默认补全的域名后缀
116 inet_interfaces = all #允许本机所有网卡
164 mydestination = server0.example.com #判断为本域邮件
3.重起postfix服务 postfix
使用mail命令发信/收信
mail 发信操作
mail -s '邮件标题' -r 发件人 收件人
mail -s '哈哈' -r zhangsan lisi (交互式)
AAAAAAAAAAAAA
BBBBBBBBBBBBB
. (.代表结束)
EOT
# echo xixi | mail -s 'xixi' -r zhangsan lisi (非交互式)
mail 收信操作
mail [-u 用户名]