[转]linux-RHEL7.0 —— 《Linux就该这么学》阅读笔记
原文地址:linux-RHEL7.0 —— 《Linux就该这么学》阅读笔记 - leevi-ding - 博客园 (cnblogs.com)
- linux-RHEL7.0
- 安装部署
- linux命令
- 管道符、重定向与环境变量
- 用户身份和文件权限
- 存储结构和磁盘划分
- 使用RAID和LVM磁盘阵列技术
- iptables和firewalld防火墙
- 使用ssh服务管理远程主机
- 使用Apache服务部署静态网站
- 使用vsftpd服务传输文件
- 使用 Samba 或 NFS 实现文件共享
- 使用bind提供域名解析服务
- 使用 DHCP 动态管理主机地址
- 使用 Postifx 与 Dovecot 部署邮件系统
- 使用 Squid 部署代理缓存服务
- 使用 iSCSI 服务部署网络存储(未看)
- 使用 MariaDB 数据库管理系统(未看)
- 使用 PXE+Kickstart 无人值守安装服务(未看)
- 使用 LNMP 架构部署动态网站环境(未看)
- 命令附录:
- 问题解答
linux-RHEL7.0
安装部署
修改root密码
在开机阶段按e,在linux16后追加rd.break
,按Ctrl+X来运行修改过的内核程序。
进入紧急救援模式后,以此输入以下命令:
RPM(红帽软件包管理器)
RPM(Red Hat Package Manager)。早期在 Linux 系统中安装程序是一件非常困难、耗费耐心的事情,而且大多数的服务程序仅仅提供源代码,RPM 机制则为解决这些问题而设计的。
RPM
有点像 Windows 系统中的控制面板
,会建立统一的数据库文件
,详细记录软件信息
并能够自动分析依赖关系
。
YUM(软件仓库)
Yum(Yellowdog Updater, Modified) 软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。
因为redhat中yum需要注册,所以需要使用iso镜像或者重新安装yum
,并替换掉yum源。
使用iso镜像注册yum
yum卸载,并使用CentOS国内镜像
-
epel源时干什么的
epel源---增加和扩展yum仓库
里面包含了许多基本源里没有的软件。
如果有命令不支持:
可以使用yum provides xxx 来查找该命令在哪个包并安装。
Systemd初始化进程
Linux开机过程:从 BIOS 开始,然后进入 Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程(已由systemd来替换System V init)
。systemd 初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。systemctl用来调用systemd进程来管理程序的。
- systemctl兼容service,会执行/etc/init.d中的service命令。
-
systemctl命令管理systemd的资源Unit,systemd的资源单元放在了
/usr/lib/systemd/system
下 -
systemd的资源单元有四种:mount,service,target和wants
-
mount
相当于执行了挂载
-
service
Description:描述
After:在xxx服务之后才启动
EnviromentFile:配置文件
ExecStartPre:执行前需要执行的命令
ExecStart:systemctl start xxx 执行的命令
ExecReload:systemctl restart xxx 执行的命令
ExecStop:systemctl stop xxx 执行的命令
WangtedBy: 多用户模式下需要的
mysqld.service
-
target
.target定义了一些基础的组件,供.service文件调用
-
wants
wants文件定义了要执行的文件集合,每次执行,.wants文件夹里面的文件都会执行
-
-
systemctl status sshd
- 第一行是描述
- 第二行表示是否开机自启,enabled表示开机自启。
- 第三行 中的 Active 描述服务当前的状态,active (running) 表示服务正在运行中。如果是 inactive (dead) 则表示服务当前没有运行。后面则是服务的启动时间。
总结
简述 RPM 与 Yum 软件仓库的作用。
答:RPM 是为了简化安装的复杂度, 而 Yum 软件仓库是为了解决软件包之间的依赖关系 。
linux命令
帮助命令
man
查看命令的帮助文档。【使用方法】:man 命令
在文档中可以使用以下命令:
man文档的结构:
系统工作命令
echo
echo 命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”。
date
date 命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。
参数可选值:
reboot
重启系统,默认只能使用 root 管理员来重启
poweroff
关机,,默认只能使用 root 管理员来重启
wget
wget 命令用于在终端中下载网络文件,格式为“wget [参数] 下载地址”
ps
ps 命令用于查看系统中的进程状态,格式为“ps [参数]”
使用 ps -aux获得的数据内容如下:
对应的列所代表的信息:
其中进程的状态总共有五种情况:
- R(运行): 进程正在运行或在运行队列中等待。
- S(中断): 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
- D(不可中断): 进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
- Z(僵死): 进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
- T(停止): 进程收到停止信号后停止运行。
top
top 命令用于动态地监视进程活动与系统负载等信息,其格式为 top。完全将它看作 Linux 中的“强化版的
Windows 任务管理器”。
前 5 行为系统整体的统计信息 :
-
第 1 行:系统时间
(- 13:55:36)
、运行时间(up 6:25)
、登录终端数(1 user)
、系统负载(三个数值分别为 1 分钟、 5分钟、 15 分钟内的平均值,数值越小意味着负载越低)。 -
第 2 行:进程总数
(403 total)
、运行中的进程数(3 running)
、睡眠中的进程数(400 sleeping)
、停止的进程数(0 stopped)
、僵死的进程数(0 zombie)
。 -
第 3 行:用户占用资源百分比
(0.0 us)
、系统内核占用资源百分比(0.7 sy)
、改变过优先级的进程资源百分比(0.0 ni)
、空闲的资源百分比(99.0 id)
等。 所有数值表示百分比。 -
第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
-
第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
pidof
pidof 命令用于查询某个指定
服务进程
的 PID 值,格式为“pidof [参数] [服务名称]”
kill
kill 命令用于终止某个指定 PID 的服务进程,格式为“kill [参数] [进程 PID]”
killall
killall 命令用于终止某个
指定名称的服务
所对应的全部进程,格式为: “killall [参数] [进程名称]”
&
如果一个命令影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行。
系统检测命令
ifconfig
ifconfig 命令用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”。
uname
uname 命令用于查看系统内核与系统版本等信息,格式为“uname [-a]”。
查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
uptime
uptime 用于查看系统的负载信息,格式为 uptime。
显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、 5 分钟、 15 分钟内
的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要超过 5
。
free
free 用于显示当前系统中内存的使用量信息,格式为“free [-h]”。 -h表示转换为带单位显示。
其中各行表示的项为:
-
mem:表示物理内存统计
-
buff/cache:表示物理内存的缓存统计
-
swap:表示硬盘上交换分区的使用情况
各列表示的项为:
who
who 用于查看当前登入主机的用户终端信息,格式为“who [参数]”。
各列表示:
last
last 命令用于查看所有系统的登录记录,格式为“last [参数]”
该信息是以日志文件保存的,可以很容易的进行修改。
history
history 命令用于显示历史执行过的命令,格式为“history [-c]”。
如果
使用-c
参数则会清空所有的命令历史记录
。
执行 history 命令能显示出当前用户在本地计算机中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,还可以自定义/etc/profile
文件中的HISTSIZE
变量值。还可以使用“!编码数字”
的方式来重复执行某一次的命令
历史命令会保存到~/.bash_history
文件中
sosreport
sosreport 命令用于收集系统配置及架构信息并输出诊断文档,格式为 sosreport。
将文件和摘要发送给技术支持人员。
总结
什么是操作系统?
答:计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核
mem区和swap区的使用
答:1)当物理内存快被耗尽时,系统并没有崩溃,而是拿 swap 做临时内存,当两者都耗尽,系统 OutofMemory
2)物理内存达到峰值,系统中一些不常用的进程内存占用被提到 swap 区
3)当 Men 区的资源进行释放时,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 men 区
4)swap 是内存不够时,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级
工作目录切换命令
pwd
pwd 命令用于显示用户当前所处的工作目录,格式为“pwd [选项]”
cd
ls
ls 命令用于显示目录中的文件信息,格式为“ls [选项] [文件] ”
文本编辑命令
cat
cat 命令用于查看纯文本文件(内容较少的),格式为“cat [选项] [文件]”。 需要序号可以使用-n
more
more 命令用于查看纯文本文件(内容较多的),格式为“more [选项]文件”
展示阅读百分比,使用Space可以向下翻页,Enter用来下一行。
head
head 命令用于查看纯文本文档的前 N 行,格式为“head [选项] [文件]”
tail
tail 命令用于查看纯文本文档的后 N 行或持续刷新内容,格式为“tail [选项] [文件]”
tr
tr 命令用于替换文本文件中的字符,格式为“tr [原始字符] [目标字符]”
wc
wc 命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。
stat
stat 命令用于查看文件的具体存储信息和时间等信息,格式为“stat 文件名称”。
cut
cut 命令用于按“列”提取文本字符,格式为“cut [参数] 文本”。
diff
diff 命令用于比较多个文本文件的差异,格式为“diff [参数] 文件 文件”。
文件目录管理命令
touch
touch 命令用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”。
mkdir
mkdir 命令用于创建空白的目录,格式为“mkdir [选项] 目录” 。使用
-p
用来递归创建目录
cp
cp 命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。
- 如果目标文件是目录,则会把源文件复制到该目录中;
- 如果目标文件也是普通文件,则会询问是否要覆盖它;
- 如果目标文件不存在,则执行正常的复制操作。
dd
dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
- if=文件名:输入文件名,默认为标准输入。即指定源文件。
- of=文件名:输出文件名,默认为标准输出。即指定目的文件。
- ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。 - cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
- skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
- seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
- count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
- conv=<关键字>,关键字可以有以下11种:
- conversion:用指定的参数转换文件。
- ascii:转换ebcdic为ascii
- ebcdic:转换ascii为ebcdic
- ibm:转换ascii为alternate ebcdic
- block:把每一行转换为长度为cbs,不足部分用空格填充
- unblock:使每一行的长度都为cbs,不足部分用空格填充
- lcase:把大写字符转换为小写字符
- ucase:把小写字符转换为大写字符
- swap:交换输入的每对字节
- noerror:出错时不停止
- notrunc:不截短输出文件
- sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
- --help:显示帮助信息
- --version:显示版本信息
将testfile文件中的所有英文字母转换为大写,然后转成为testfile_1文件,在命令提示符中使用如下命令:
mv
mv 命令用于剪切文件或将文件重命名, 格式为“mv [选项] 源文件 [目标路径|目标文件名]”。
rm
rm 命令用于删除文件或目录,格式为“rm [选项] 文件”
dd
dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]” .
- if=文件名:输入文件名,默认为标准输入。即指定源文件。
- of=文件名:输出文件名,默认为标准输出。即指定目的文件。
- conv=<关键字>,关键字可以有以下11种:
- conversion:用指定的参数转换文件。
- ascii:转换ebcdic为ascii
- ebcdic:转换ascii为ebcdic
- ibm:转换ascii为alternate ebcdic
- block:把每一行转换为长度为cbs,不足部分用空格填充
- unblock:使每一行的长度都为cbs,不足部分用空格填充
- lcase:把大写字符转换为小写字符
- ucase:把小写字符转换为大写字符
- swap:交换输入的每对字节
- noerror:出错时不停止
- notrunc:不截短输出文件
- sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
file
file 命令用于查看文件的类型,格式为“file 文件名”。
-
ASCII text:字符文本
-
character special:字符特殊文件
-
block special:块特殊文件
块设备(也称为块特殊文件)通常与普通文件非常相似:它们是一个字节数组,在给定位置读取的值是最后写入的值.来自块设备的数据可以缓存在内存中并从缓存中读回;写入可以缓冲.块设备通常是可搜索的(即,文件内部存在应用程序可以改变的位置的概念).名称“块设备”来自以下事实:相应的硬件通常一次读取和写入整个块(例如,硬盘上的扇区).
字符设备(也称为字符特殊文件)的行为类似于管道,串行端口等.写入或读取它们是一种即时操作.驱动程序对数据的作用是它自己的业务.将字节写入字符设备可能会导致它显示在屏幕上,在串行端口上输出,转换为声音,…从设备读取字节可能导致串口等待输入,可能会返回随机byte(/ dev / urandom),…名称“字符设备”来自每个字符单独处理的事实.
打包压缩命令
tar
tar 命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”。
grep
用于在文本中执行关键词搜索, 并显示匹配的结果, 格式为“grep [选项] [文件]”。
find
find 命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”
管道符、重定向与环境变量
输入输出重定向
输入重定向是将文件内容作为标准输入。
<< xxx 直到有xxx输入时会停止。
输出重定向使用的较多,
-
标准输入重定向( STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中输入。
-
标准输出重定向( STDOUT,文件描述符为 1):默认输出到屏幕,即
非错误输出
。 -
错误输出重定向( STDERR,文件描述符为 2):默认输出到屏幕。
管道命令符
把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入 ,其执行格式为“命令 A | 命令 B”
|
相当于在命令B后 以输入重定向的输入命令A的结果。
命令行通配符
*
用于匹配任意数个任意字符?
用于匹配任意一个任意字符- 使用[0-9]来匹配 0~9 之间的单个数字,也可以用[135]这样的方式仅匹配这三个指定数字中的一个
常用转义符
- 反斜杠( \):使反斜杠后面的一个变量变为单纯的字符串。
- 单引号(''):转义其中所有的变量为单纯的字符串。
- 双引号( ""):保留其中的变量属性,不进行转义处理。
- 反引号( ``):把其中的命令执行后返回结果。
命令别名
可以给命令添加别名
环境变量
Linux系统中的环境变量是用来定义系统运行环境的一些参数,使用env可以查看所有的环境变量。
默认创建的变量不具有全局性,不能被其他用户使用。需要使用export将其提升为全局变量。
Vim和Shell命令脚本
Vim
vim包含三种模式,是一个默认安装在linux系统中的文本编辑器。
- 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
- 输入模式:正常的文本录入。
- 末行模式:保存或退出文档,以及设置编辑环境
切换到输入模式
命令模式下的常用命令:
末行模式中可用的命令:
配置主机名字
配置网卡信息
在 RHEL 7 中,网卡配置文件的前缀则以 ifcfg 开始,加上网卡名称共同组成了网卡配置文件的名字,例如 ifcfg-eno16777736。
简单的网卡配置示例:
一块网卡添加多个ip
使用数字后缀来表示多个ip,也可以使用mntui进行修改
配置Yum软件仓库
使用mount /dev/cdrom /media/cdrom
挂载时出现问题:
mount: no medium found on /dev/sr0
需要添加cd硬件
编写Shell脚本
基础知识
查看当前SHELL默认解释器
shell脚本第一行需要指定解释器:
脚本如果没有执行权限,可以指定权限,也可以使用bash直接执行:
接收用户的参数
在shell脚本中可以使用
$
+数字与符号
来获取参数
其中$*
是所有的"123 234 345",$@是"123" "234" "345"列表
判断用户的参数
格式:[ 条件表达式 ],左右各有一个空格
-
文件测试所用的参数
输出不是0,表示/usr/local/temp/example.sh不是一个目录
-
与、或、非
使用与和或来表示是否继续运行后面的命令
-
数字比较符
用于测试命令中进行数字比较:
-
字符比较符
在测试命令中,环境变量如果不存在会报错
流程控制语句
if
示例:
for
示例:
while
case
示例
计划任务服务程序
at
一次性任务,指定该任务执行的时间
crond
定时任务,可以用来指定时间,多次运行。
总结
linux命令执行步骤?
答:第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行 。
第 2 步: Linux 系统检查用户输入的命令是否为“别名命令”。
第 3 步: Bash 解释器判断用户输入的是内部命令还是外部命令。
第 4 步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH。
/dev/null是什么?
/dev/null 是一个被称作 Linux 黑洞的文件,将stdout和stderr&> 重定向到/dev/null,可以保持命令行的干净
。
用户身份和文件权限
用户身份和能力
管理员 UID 为 0:系统的管理员用户。root用户之所以是管理员,是因为他的UID为0
系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户
useradd
创建新的用户,格式为“useradd [选项] 用户名”
groupadd
usermod
usermod 命令用于修改用户的属性,格式为“usermod [选项] 用户名”。 用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用 usermod 命令修改已经创建的用户信息
在/etc/passwd中可以用户的设置为:
passwd
userdel
userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。
文件权限与归属
Linux 系统使用了不同的字符来加以区分,常见的字符如下:
- -:普通文件。
- d:目录文件。
- l:链接文件。
- b:块设备文件。
- c:字符设备文件。
- p:管道文件
ll可以查看文件的权限:
其中第一位表示文件类型,3位表示所有者权限,3位表示文件所属组权限,3位表示其他用户权限,权限可以使用3位添加之和表示,例如上图可以表示为:rw-r--r--可以表示为644。
接着的第一个root表示文件所属用户,第二个root表示文件所属用户组。
4表示文件大小,Feb 7 11:49表示文件最后一次修改时间,log表示文件名。
-
r:可读。如果是文件,表示文件可读,如果是目录,表示可以看到目录中的内容。
-
w:可修改。如果是文件,表示可修改,如果是目录,表示该目录中的内容是可修改的。
-
x:可执行。如果是文件,表示该文件是可执行的,如果是目录,表示该目录可以被当作命令参数进行操作。
💛:文件最小的删除权限是什么?
文件所处目录具有w和x权限(所有的父级目录需要有x权限)。
文件的特殊权限
SUID(user)
SUID 是一种对二进制程序进行设置的特殊权限, 可以让二进制程序的执行者临时拥有属主的权限
- 只有可执行二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有执行(x)权限
- 命令执行者在执行程序的时候,组身份升级为该可执行程序文件的属组
- SGID权限只在该程序执行过程中有效,也就是组身份只在程序执行过程中发生改变,命令结束用户组身份恢复.
可以通过以下命令将可执行可执行文件的执行者临时拥有拥有者的权限
例如:/bin/passwd命令就是
如果当前用户没有x执行权限,那么就会是S
当普通用户执行/bin/passwd命令时,会操作/etc/shadow文件,但是该文件的权限是000,只有root用户有权限操作,那么当普通用户执行/bin/passwd,由于有s权限,那么就表示当前用户会在执行过程中临时拥有文件拥有者root的权限。
SGID(group)
SGID和SUID类似,不过是执行者临时拥有文件所属组的权限,而不是所属人的权限。
权限代码:-rwxrws
---,如果用户组没有x权限,那么为S
。
同时SGID还可以用在目录上,这样的目录的子文件会继承源目录的所属组。
在temp目录创建text.txt,可以看到文件所属组是root
SBIT(sticky bit)
用于保护,阻止其他用户删除本文件(如果是目录的话,只有root和用户本人可以新建删除文件)。
权限代码:-rwxrwxrwt
,如果其他用户没有x权限,那么为T
。
chmod
修改文件的权限,正常的文件权限是-rwxrwxrwx,分别对应user,group,other的权限
可以使用二进制算法计算权限对应的数字,例如rwx=7,rw-=6,--w=1
也可以使用u,g,o来分别表示user,group,other的权限:
chown
修改文件的所有者和所属组
命令:chown [参数] 所有者:所属组 文件或目录名称
文件的隐藏属性
chattr
chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”
lsattr
lsattr 命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”
文件访问控制列表(ACL,file access control list)
基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对
某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。
setfacl
可以看到没有ACL的文件以.
结尾,有ACL的文件以+
结尾。
getfacl
getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称” 。
su和sudo服务
su
su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户。
sudo
sudo 命令用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务,格式为“sudo [参数] 命令名称”
使用root用户执行命令visudo,可以修改sudo配置文件
在执行时使用
习题
-
使用访问控制列表( ACL)来限制 linuxprobe 用户组,使得该组中的所有成员不得在/tmp目录中写入内容。
答: 想要设置用户组的 ACL,则需要把 u 改成 g,即 setfacl -Rm g:linuxprobe:r-x /tmp。
-
查看系统日志
存储结构和磁盘划分
在 Linux 系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件, Linux 系统中的一切文件都是从“根( /)”目录开始的,并按照文件系统层次化标准( FHS) 采用树形结构来存放文件, 以及定义了常见目录的用途。
物理设备的命名规则
系统内核中的 udev 设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等。
“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为 5 的逻辑分区的设备文件”
硬盘分区原理:
硬盘设备是由大量的扇区组成的,每个扇区的容量为 512 字节。 第一个扇区保存着主引导记录与分区表信息。第一个扇区由 主引导记录需要占用 446 字节,分区表为 64 字节,结束符占用 2 字节所组成。其中分区表中每记录一个分区信息就需要 16 字节,这样一来最多只有 4 个分区信息可以写到第一个扇区中,这 4 个分区就是 4 个主分区。如果需要大于4个分区,那么就会将一个分区作为扩展分区,扩展分区可以创建多个逻辑分区
,这样就可以由多个分区了。
注意:逻辑分区从5开始。
可以看出/dev/sdb8的意思就是,序号为2的硬盘的第四个逻辑分区。
文件系统与数据资料
文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。 Linux系统支持数十种的文件系统,而最常见的文件系统如下
- Ext3: 是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。
- ext4: Ext3 的改进版本,作为 RHEL 6 系统中的默认文件管理系统,它支持的存储容量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外, Ext4 文件系统能够批量分配 block 块,从而极大地提高了读写效率。
- xfs: 是一种高性能的日志文件系统,而且是 RHEL 7 中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为 18EB。
存储原理:
日常在硬盘需要保存的数据实在太多了, 因此 Linux 系统中有一个名为 super block 的“硬
盘地图”。 Linux 并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整
个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,
而且文件内容的查询与写入速度也会变得很慢。 Linux 只是把每个文件的权限与属性记录在
inode 中,而且每个文件占用一个独立的 inode 表格,该表格的大小默认为 128 字节,里面记
录着如下信息:
- 该文件的访问权限( read、 write、 execute);
- 该文件的所有者与所属组( owner、 group);
- 该文件的大小( size);
- 该文件的创建或内容修改时间( ctime);
- 该文件的最后一次访问时间( atime);
- 该文件的修改时间( mtime);
- 文件的特殊权限( SUID、 SGID、 SBIT);
- 该文件的真实数据地址( point)。
而文件的实际内容则保存在 block 块中(大小可以是 1KB、 2KB 或 4KB),一个 inode 的默认大小仅为 128B( Ext3),记录一个 block 则消耗 4B。当文件的 inode 被写满后, Linux 系统会自动分配出一个 block 块,专门用于像 inode 那样记录其他 block 块的信息,这样把各个block 块的内容串到一起,就能够让用户读到完整的文件内容了
挂载硬件设备
当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。
mount
mount 命令用于挂载文件系统,格式为“mount 文件系统 挂载目录”。
要把设备/dev/sdb2 挂载到/backup 目录,只需要在 mount 命令中填写设备与挂载目录参数就行,系统会自动去判断要挂载文件的类型.
按照上面的方法执行 mount 命令后就能立即使用文件系统了, 但系统在重启后挂载就会失效, 也就是说我们需要每次开机后都手动挂载一下。 这肯定不是我们想要的效果,如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 自检 优先级”(各字段的意义见表 6-4)写入到/etc/fstab
文件中。
如果想将文件系统为 ext4 的硬件设备/dev/sdb2 在开机后自动挂载到/backup 目录上,并保持默认权限且无需开机自检,就需要在/etc/fstab 文件中写入下面的信息
/dev/sdb2 /backup ext4 defaults 0 0
umount
卸载文件系统就意味不再使用硬件的设备资源,因此卸载操作只需要说明想要取消关联的设备文件或挂载目录的其中一项即可。
如果当前操作目录就在这个目录,那么会导致出现target is busy
,退出这个目录即可
添加硬盘设备
通过虚拟机添加一个新的硬盘
可以看到/dev下有一块新硬盘sdb。
fdisk 分区
fdisk 命令用于
管理磁盘分区
,格式为“fdisk [磁盘名称]”
使用fdisk进行磁盘管理:
使用file查看文件属性
格式化
硬件存储设备没有进行格式化,则 Linux 系统无法得知怎么在其上写入数据。
格式化会将裸盘格式化成文件系统,操作系统才能读取文件。
挂载
df -h
将挂载信息写到/etc/fstab
du命令
该命令就是用来查看一个或多个文件占用了多大的硬盘空间
添加交换分区
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。 只有当真实的物理内存耗尽后才会调用交换分区的资源 。
在生产环境中,交换分区的大小一般为真实物理内存的 1.5~2 倍。
查看内存使用
将挂载信息保存到/etc/fstab中
磁盘容量配额
quota命令进行磁盘容量配额管理, 从而限制用户的硬盘可用容量或所能创建的最大文件个数
- 软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
- 硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
- 软限制数值必须小于等于硬限制数值
RHEL 7 如果需要支持quota磁盘配额需要在/etc/fstab中进行,在defaults后添加,uquota
后重启
此时/boot目录已经支持了quota配额限制
xfs_quota
xfs_quota 命令是一个专门针对 XFS 文件系统来管理 quota 磁盘容量配额服务而设计的命令,格式为“quota [参数] 配额 文件系统”
测试:
可以看到在创建8M的文件时被阻止了。
edquota
edquota 命令用于编辑用户的 quota 配额限制,格式为“edquota [参数] [用户] ”。
使用root用户修改quota
测试:
软硬方式链接
可以让用户从不同的位置来访问原始的文件;原文件一旦被删除或剪切到其他地方后,会导致链接文件失效
-
硬链接:
可以将它理解为一个“指向原始文件 inode 的指针”,系统不为它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只有当该文件的 inode 连接数为 0 时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件 inode 的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行
链接。 -
软链接:
仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。
ln命令
创建软链接:
可以看出硬链接会是硬盘中的连接数增加,软链接如果删除了原文件,那么该链接无法访问。
使用RAID和LVM磁盘阵列技术
RAID(独立冗余磁盘阵列)
-
RAID0
RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,类似于扩容
-
RAID1
它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上,类似于主从
-
RAID5
RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。 RAID 5 技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。parity 部分存放的就是数据的奇偶校验信息
-
RAID10
RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”,类似于扩容+主从。
创建RAID
-
添加硬盘
添加4块5G的虚拟硬盘
-
创建RAID
mdadm 命令用于管理 Linux 系统中的软件 RAID 硬盘阵列, 格式为“mdadm [模式] <RAID设备名称> [选项] [成员设备名称]”。
-
格式化与挂载
可以看到md0的容量为10G,同时需要把挂载信息写到/etc/fstab中
-
损坏与修复
-
删除RAID
磁盘阵列+备份盘
RAID10中,如果出现了RAID1中的两块磁盘都出现了问题,那么就会导致数据丢失,因此我们可以在创建RAID时添加备份盘,使用
-x
指定备份盘的数量。
删除磁盘矩阵:
LVM(逻辑卷管理器)
解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。
比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PV, Physical Volume])揉成一个大面团(卷组[VG, Volume Group]),然后再把这个大团面分割成一个个小馒头(逻辑卷[LV, Logical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PE, Physical Extent])的倍数。
创建LVM
扩容逻辑卷
由于进行了扩展,而磁盘中的文件系统的容量没有变更,所以需要进行重新设置
缩小逻辑卷
逻辑卷快照
LVM 还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原
- 快照卷的容量必须等同于逻辑卷的容量
- 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除
删除逻辑卷
RAID结合LVM
先使用RAID创建两个设备/dev/md0和/dev/md1,再通过LVM对/dev/md0和/dev/md1进行构建物理卷,卷组和逻辑卷。最后通过对逻辑卷进行挂载
iptables和firewalld防火墙
防火墙管理工具
在公网与企业内网之间充当保护屏障的防火墙,虽然有软件或硬件之分,但主要功能都是依据策略对穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。
在 RHEL 7 系统中, firewalld 防火墙取代了 iptables 防火墙。 iptables 与 firewalld 都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已, 或者说, 它们只是一种服务 。
iptables
防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误。
DROP 的动作是丢包,不响应; REJECT 是拒绝请求,同时向发送方回送拒绝信息。
firewalld
RHEL 7 系统中集成了多款防火墙管理工具, 其中 firewalld( Dynamic Firewall Manager of Linux systems, Linux 系统的动态防火墙管理器) 服务是默认的防火墙配置管理工具, 它拥有基于 CLI(命令行界面)和基于 GUI(图形用户界面)的两种管理方式。
firewalld 支持动态更新技术并加入了区域( zone)的概念。类似于windows中的专有网络,共有网络。
firewall-cmd(终端管理工具)
firewalld默认模式是运行时模式,重启就会失效,如果希望配置策略一致存在,需要使用永久(permanent)模式
设置防火墙策略时添加--permanent 参数。但是不能立即生效,需要使用firewall-cmd reload使其生效。
SNAT
是一种为了解决 IP 地址匮乏而设计的技术,它可以使得多个内网中的用户通过同一个外网 IP 接入 Internet(互联网)
服务的访问控制列表
TCP Wrappers 是 RHEL 7 系统中默认启用的一款流量监控程序, 它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作。
它是一种类似于iptables防火墙的,基于tcp协议的访问控制工具,只能对基于tcp协议的部分服务作访问控制。
iptables在网络层上通过IP过滤,阻挡网络中部分IP的恶意攻击,与网络有关。
tcp_wrapper依赖于libwrap库,会控制支持libwrap库的那部分基于tcp协议的服务,通过读取两个配置文件中配置的规则,判断该服务是否可以访问,因此它只能对本机内部的服务进行控制,跟网络无关。
判断服务是否支持tcp_wrapper
配置TCP Wrappers
- /etc/hosts.allow
- /etc/hosts.deny
配置方法:
举例:
使用ssh服务管理远程主机
配置网络服务
配置网络参数
-
使用nmtui界面工具
-
修改/etc/systemctl/
创建网络会话
RHEL 和 CentOS 系统默认使用 NetworkManager 来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。可以使用 nmcli 命令来管理 NetworkManager 服务。
RHEL7 系统支持网络会话功能,允许用户在多个配置文件中快速切换(非常类似于 firewalld 防火墙服务中的区域技术)。
每创建一个会话都会在/etc/sysconfig/network-script下创建一个ifcfg-
文件
切换到了home会话,使用的就是ifcfg-home配置文件。
绑定两块网卡
借助于网卡绑定技术,不仅可以提高网络传输速度,更重要的是,还可以确保在其中一块网卡出现故障时,依然可以正常提供网络服务。
添加另一块网卡
两块网卡使用同样的模式
设置网卡信息
可以看到新添加了一个网卡,需要注意的是,这些原本独立的网卡设备此时需要被配置成为一块“从属”网卡,服务于“主”网卡,不应该再有自己的 IP 地址等信息。
添加一个主设备ifcfg-bond0
查看DNS
让linux内核支持网卡绑定驱动
下面使用 Vim 文本编辑器创建一个用于网卡绑定的驱动文件,使得绑定后的 bond0 网卡设备能够支持绑定技术( bonding);同时定义网卡以 mode6 模式进行绑定,且出现故障时自动切换的时间为 100 毫秒。
重启网络服务后网卡绑定操作即可成功。正常情况下只有 bond0 网卡设备才会有 IP 地址等信息
查看信息
测试网卡切换
可以看出当前激活从网卡变成了eno16777736
远程控制服务
配置sshd服务
sshd 服务的配置信息保存在/etc/ssh/sshd_config 文件中
安全密钥验证
如果希望通过不需要密码就能连接到服务端ssh服务,那么需要客户端生成密钥对,并将公钥发送给服务端。
其中ssh-copy-id相当于把公钥写到服务器的/root/.ssh/authorized_keys文件中。
如果希望windows客户端工具也可以使用密钥登录,那么需要指定私钥
远程传输命令 scp
scp( secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp[参数] 本地文件 远程帐户@远程 IP 地址:远程目录”。
如果设置了上节密钥设置,那么就不需要在使用scp时需要输入密码了
可以在10.6.2.128看到上传的文件
不间断会话服务
screen 是一款能够实现多窗口远程控制的开源服务程序,简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序。
使用screen执行命令后,并不会因为ssh服务中断而结束命令。
管理远程会话
然后在screen窗口中执行的命令,尽管关闭了ssh窗口,该命令仍然在后台执行。
可以在命令前加上screen,在命令执行完成之后窗口会自动关闭。
会话共享功能
使用Apache服务部署静态网站
安装
配置
进入/etc/httpd/conf/httpd.conf可以看到想对应的配置信息
文件目录使用DocumentRoot设置,
DirectoryIndex表示默认的索引页,默认为index.html,如果没有,那么就会展示apache首页。
但是如果修改了目录DocumentRoot为/home/wwwroot/html,再创建文件夹并添加index.html并不能成功,那是因为有SELinux的存在,访问了用户的家目录所以被selinux拒绝了。将其临时关闭,即可访问。
SELinux安全子系统
SELinux( Security-Enhanced Linux)是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制( MAC, Mandatory Access Control)的安全子系统 。HEL 7 系统使用SELinux 技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
对服务程序的功能进行限制( SELinux 域限制可以确保服务程序做不了出格的事情);
对文件资源的访问限制( SELinux 安全上下文确保文件资源只能被其所属的服务程序进行访问)
SELinux有三种模式:
- enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
- permissive:遇到服务越权访问时,只发出警告而不强制拦截。
- disabled:对于越权的行为不警告也不拦截。
查看文件的安全上下文
其中SELinux 安全上下文是由用户段、角色段以及类型段等多个信息项共同组成的。
对文件资源的限制
semanage命令(需要安装)
semanage 命令用于管理 SELinux 的策略,格式为“semanage [选项] [文件]”。
如果没有该命令,可以使用
yum -y install policycoreutils-python
安装
常用参数:
-
-l 参数用于查询;
-
-a 参数用于添加;
-
-m 参数用于修改;
-
-d 参数用于删除。
没有semanage命令
chcon(不需要安装)
对程序功能进行限制
限制一个程序的功能,例如一个程序不应该监控键盘等。
对程序端口的限制
个人主页功能
如果想在系统中为每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。
添加口令功能
再次访问个人主页就需要用户名密码了,linuxprobe/123456
虚拟主机功能
Apache 的虚拟主机功能是服务器基于用户请求的不同 IP 地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术。即ip和对应的网站关联起来。
设置当前网卡绑定多个IP
使用数字后缀来表示多个ip,也可以使用mntui进行修改
设置ip和网站绑定
如果不能访问,那是因为SElinux没有对文件域
使用域名来访问
通过域名来访问获取不同的网站
如果域名和ip冲突了,以域名访问的话,那么以ServerName为准,反之以ip访问,那么就以VirtualHost为准
使用端口来访问
通过端口来访问不同的网站
需要通过SElinux 设置httpd可以访问这些端口
Apache的访问控制
Order Allow, Deny 表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求
使用vsftpd服务传输文件
FTP 是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、 21号端口,其中端口 20(数据端口)用于进行数据传输,端口 21(命令端口)用于接受客户端发出的相关 FTP 命令与参数。
vsftpd( very secure ftp daemon,非常安全的 FTP 守护进程)是一款运行在 Linux 操作系统上的 FTP 服务程序
FTP具有两种模式:
- 主动模式: FTP 服务器主动向客户端发起连接请求。
- 被动模式: FTP 服务器等待客户端发起连接请求( FTP 的默认工作模式)
安装vsftpd
配置
vsftpd的主配置文件是/etc/vsftpd/vsftpd.conf
简化配置文件
vsftpd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到 FTP 服务器上。
- 匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到 FTP 服务器。
- 本地用户模式:是通过 Linux 系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录 FTP 服务器,从而完全控制整台服务器。
- 虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为 FTP 服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
如果开启了chroot_local_user=YES,那么该主目录就会变成local_root=/var/ftp,否则会使用登录用户的主目录。
同时需要开启allow_writeable_chroot=YES,让用户具有写权限。
匿名开放模式
在 vsftpd 服务程序的匿名开放认证模式下,其账户统一为 anonymous,密码为空。
在连接到 FTP 服务器后,默认访问的是/var/ftp 目录。
在vsFTPd 3.0.2版本中,匿名用户访问不了ftp,提示 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
本地用户模式
重启服务后可以使用本地用户登录,即linux系统中所拥有的用户,但是要注意两个文件
-
/etc/vsftpd/ftpuser
如果该文件有名字的话,那么表示不允许该用户登录
-
/etc/vsftpd/user_list
如果userlist_deny=NO,那么
只允许
该列表中的用户登录。如果userlist_deny=YES,那么
不允许
该列表中的用户登录。
虚拟用户模式
使用创建的用户来登录ftp服务器
-
创建vuser.list文件作为用户名和密码,奇数行为用户名,偶数行为密码
-
使用
db_load
命令用哈希( hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。 -
修改指定虚拟用户
-
创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。
-
建立用于支持虚拟用户的 PAM 文件 ,用于校验用户名密码
-
在 vsftpd 服务程序的主配置文件中通过 pam_service_name 参数将 PAM 认证文件的名称修改为 vsftpd.vu
-
为虚拟用户设置不同的权限,使用匿名方式设置,其中张三
添加user_config_dir 参数来定义这两个虚拟用户不同权限的配置文件所存放的路径
常用配置
简单文件传输协议
简单文件传输协议( Trivial File Transfer Protocol, TFTP)是一种基于 UDP 协议在客户端和服务器之间进行简单文件传输的协议。 (可将其当作 FTP 协议的简化版本)
tftp默认使用的是/var/lib/tftpboot/目录,以下是常用参数
下载的文件会放到用户的家目录下。
使用 Samba 或 NFS 实现文件共享
FTP 文件传输服务确实可以让主机之间的文件传输变得简单方便,但是FTP 协议的本质是传输文件,而非共享文件,因此要想通过客户端直接在服务器上修改文件内容还是一件比较麻烦的事情。
Samba
服务端安装
-
创建用于访问共享资源的账户信息。
pdbedit 命令用于管理 SMB 服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。
注意:Samba 服务程序的数据库要求账户必须在当前系统中已经存在。
-
修改samba配置
-
创建目录,修改SELinux的域权限和安全上线文
-
重启
windows连接
在浏览器直接输入 \\+ip
即可连接samba服务。
在输入用户名密码后即可访问。
linux连接
linux连接samba服务需要安装支持文件共享服务的软件包( cifs-utils)
NFS(网络文件系统)
如果需要共享文件的主机都是 Linux系统,非常推荐在客户端部署 NFS 服务来共享文件。
安装
RHEL 7 系统中默认已经安装了 NFS 服务,检查系统是否已经安装NFS
配置
NFS 服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们可以按照“共享目录的路径 允许访问的 NFS 客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。
启动
由于在使用 NFS 服务进行文件共享之前,需要使用 RPC( Remote Procedure Call,远程过程调用)服务将 NFS 服务器的 IP 地址和端口号等信息发送给客户端。 需要顺带重启并启用 rpcbind 服务程序
客户端连接
客户端也需要安装nfs-utils
autofs自动挂载服务
上面的方法无论是Samba或是NFS都会在系统开机时就进行挂载,会消耗极多的资源。autofs会在使用挂载时才会自动挂载
在 autofs 服务程序的主配置文件中需要按照“挂载目录 子配置文件”的格式进行填写。 后缀必须以.misc 结束
同理自动挂载smb服务
使用bind提供域名解析服务
DNS 域名解析服务
一项用于管理和解析域名与 IP 地址对应关系的技术
服务器类型:
- 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与 IP 地址之间的对应关系。
- 从服务器:从主服务器中获得域名与 IP 地址的对应关系并进行维护,以防主服务器宕机等情况。
- 缓存服务器:通过向其他域名解析服务器查询获得域名与 IP 地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。
简单来说,主服务器是用于管理域名和 IP 地址对应关系的真正服务器,从服务器帮助主服务器“打下手”,分散部署在各个国家、省市或地区,以便让用户就近查询域名,从而减轻主服务器的负载压力。缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求。
查询方式:
- 递归查询,是指 DNS 服务器在收到用户发起的请求时,
必须向用户返回一个准确的查询结果
。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。 - 迭代查询则是指, DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,这样依次反复,直到返回查询结果。
安装 bind 服务程序
BIND( Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。
建议大家在生产环境中安装部署 bind 服务程序时加上 chroot(俗称牢笼机制)扩展包,以便有效地限制 bind 服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
设置配置
在 Linux 系统中, bind 服务程序的名称为 named。
-
主配置文件( /etc/named.conf):用来定义 bind 服务程序的运行。
可以看到其中包含了区域配置文件
将listen-on 和 allow-query 设置为any,这样可以使任意机器使用bind服务
-
区域配置文件( /etc/named.rfc1912.zones):用来保存域名和 IP 地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应 IP 地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
-
数据配置文件目录( /var/named):该目录用来保存域名和 IP 地址真实对应关系的数据配置文件。
named-checkconf 命令和 named-checkzone 命令,分别检查主配置文件与数据配置文件中语法或参数的错误。
正向解析实验
反向解析实验
部署从服务器
修改配置,设置可被从服务器修改
安装从服务器
注意:从服务器只有主服务器的DNS映射关系,主服务器如果没有该映射关系,可以通过网关访问别的DNS服务器,但是从服务器如果没有映射关系,就不会通过别的dns服务器获取。所以主服务器可以dig www.baidu.com。但是从服务器获取不到。
加密传输
TSIG 加密机制保证了 DNS 服务器之间传输域名区域信息的安全性
主服务器生成密钥
dnssec-keygen [参数]
部署缓存服务器
DNS 缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广泛
分离解析技术
修改bind主配置文件
问题
- DNS 服务器之间传输区域数据文件时,使用的是递归查询还是迭代查询?
答:DNS 服务器之间是迭代查询,用户与 DNS 服务器之间是递归查询。
- 当用户与 DNS 服务器之间传输数据配置文件时,是否可以使用 TSIG 加密机制来确保文件内容不被篡改?
答:不能, TSIG 加密机制保障的是 DNS 服务器与 DNS 服务器之间迭代查询的安全。
使用 DHCP 动态管理主机地址
动态主机配置协议( DHCP)是一种基于 UDP 协议且仅限于在局域网内部使用的网络协议,主要用于大型的局域网环境或者存在较多移动办公设备的局域网环境中,其主要用途是为局域网内部的设备或网络供应商自动分配 IP 地址等参数
安装
配置
主配置文件是/etc/dhcp/dhcpd.conf,可以根据 /usr/share/doc/dhcp*/dhcpd.conf.example 来进行查看配置示例
需要使用仅主机模式,常用配置如下:
测试
两台虚拟机使用仅主机模式,并关闭vmware的自带的dhcp服务,dhcp服务端使用ip 192.168.10.1。客户端使用BOOTSTYLE=dhcp设置网络即可
dhcp服务器上设置网卡信息
dhcp客户端设置网卡信息
分配固定的ip
根据MAC地址给电脑分配固定的ip地址
使用 Postifx 与 Dovecot 部署邮件系统
使用基于SMTP 协议的 Postfix 服务程序提供发件服务功能,并使用基于 POP3、IMAP 协议的 Dovecot 服务程序提供收件服务功能
常见邮件协议:
- 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的 25/TCP 端口。
- 邮局协议版本 3(Post Office Protocol 3,POP3):用于将电子邮件存储到本地主机,占用服务器的 110/TCP 端口。
- Internet 消息访问协议版本 4(Internet Message Access Protocol 4,IMAP4):用于在本地主机上访问邮件,占用服务器的 143/TCP 端口。
邮件投递代理( Mail Delivery Agent, MDA) :其工作职责是把来自于邮件传输代理( Mail Transfer Agent, MTA)的邮件保存到本地的收件箱中 。
MTA 的工作职责是转发处理不同电子邮件服务供应商之间的邮件
为用户收发邮件的服务器名为邮件用户代理( Mail User Agent,MUA)
配置DNS
配置 Postfix 服务程序
用于发送邮件
常用postfix配置
配置 Dovecot 服务程序
收件服务程序,为 Linux 系统提供 IMAP 和 POP3 电子邮件服务的开源服务程序
使用Foxmail连接服务器
写一封邮件
可以在邮件服务器上看到,使用mail命令可以看到当前登录用户的邮件:
设置用户别名信箱
通过设置别名来隐藏邮箱地址
使用 Squid 部署代理缓存服务
正向代理:让用户使用 Squid 代理服务器上网,还可以基于指定的 IP 地址、域名关键词、网站地址或下载文件后缀等信息,实现类似于访问控制列表的功能。
反向代理:反向代理模式可以大幅提升网站的访问速度,还可以帮助网站服务器减轻负载压力。
总结来说,正向代理模式一般用于企业局域网之中,让企业用户统一地通过 Squid 服务访问互联网资源,这样不仅可以在一定程度上减少公网带宽的开销,而且还能对用户访问的网站内容进行监管限制,一旦内网用户访问的网站内容与禁止规则相匹配,就会自动屏蔽网站。反向代理模式一般是为大中型网站提供缓存服务的,它把网站中的静态资源保存在国内多个节点机房中,当有用户发起静态资源的访问请求时,可以就近为用户分配节点并传输资源,因此在大中型网站中得到了普遍应用。
正向代理和反向代理的区别
- 网段:正向代理Proxy和Client在一个网段,感知到使用了代理,反向代理Proxy和Server一个网段,且Client不知道使用了代理。
- 配置:正向代理需要配置Client的代理服务器为Proxy,反向代理不用。
- 功能:正向代理主要用于管理Client的访问控制,反向代理主要用于降低负载,提升访问速度。
添加两块网卡
给虚拟机A添加一个仅主机模式的网卡(192.168.10.180),同时添加一个桥接模式网卡(10.6.2.131)
给虚拟机B添加一个仅主机模式的网卡(192.168.10.183)
注意:如果桥接模式网卡ping不通主机,可能是ip被占用了。
如果仅主机模式ping不通Vmnet1虚拟网卡,可以将其禁用后启用。
这样我们就得到一台可以访问外网也能访问虚拟机B的虚拟机A了。
配置 Squid 服务程序
常用的 Squid 服务程序配置参数以及作用
默认的/etc/squid/squid.conf的配置如下
其中使用acl 用于定义src,port,method 变量。http_access用户定义是否允许通过。
正向代理
标准正向代理
-
将网卡Vmnet1禁用,这样我们的主机就无法通过192.168.10网段来访问虚拟机了。主机仍然可以通过10.6.2.131进行访问,且192.168.10.180和183两台机器是可以相互ping通的。
-
在虚拟机B中启动httpd服务,同时使用虚拟机进行访问
-
打开虚拟机防火墙
-
设置浏览器代理
使用代理后可正常访问192.168.10.183
ACL控制访问
-
只允许某些机器使用Squid代理,禁止其他机器使用代理
-
禁止所有客户端访问网址中包含linux关键词的网站
-
禁止所有客户端访问某个特定的网站
-
禁止员工在企业网内部下载带有某些后缀的文件
透明正向代理(未成功)
在透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由 DHCP 服务器将网络配置信息分配给客户端主机。
反向代理
通过访问squid 服务器就可以访问指定的服务器。注意:正向代理和反向代理不可同时使用
这样我们访问10.6.2.131的网页会反向代理到192.168.10.183上的httpd服务。
使用 iSCSI 服务部署网络存储(未看)
使用 MariaDB 数据库管理系统(未看)
使用 PXE+Kickstart 无人值守安装服务(未看)
使用 LNMP 架构部署动态网站环境(未看)
命令附录:
问题解答
bash命令乱码
-
查看/etc/locale.conf,修改为
-
查看当前语言
-
更新配置:source /etc/locale.conf
ifconfig command not found
-
查找ifconfig
-
安装net-tools
新机器没有网络
配置网络
如果是虚拟机需要保证子网掩码和网关和虚拟机一致:
外网访问限制
防火墙
-
端口配置
-
服务配置
SELinux
- 域限制
- 文件上下文限制
DNS记录类型
- A记录
- AAAA记录
- NS记录
- CNAME记录
- PTR记录
虚拟机模式
-
仅主机模式
使用VMnet0网卡,仅和主机通信。
-
NAT模式
类似于SNAT技术,通过使用主机的ip进行访问互联网。
-
桥接模式
占用主机局域网ip,要和主机在同一个网段中。
-