Linux就该这么学第二版.pdf

打包和压缩

tar命令

tar 命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”

参数 作用
-c 创建压缩文件
-x 解开压缩文件
-t 查看压缩包内有哪些文件
-z 用 Gzip 压缩或解压
-j 用 bzip2 压缩或解压
-v 显示压缩或解压的过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 指定解压到的目录

eg:

建立名称为etc的压缩包+

 tar -czvf etc.tar.gz /etc

解压etc文件

tar xzvf etc.tar.gz -C /root/etc

grep命令

grep 命令用于在文本中执行关键词搜索,并显示匹配的结果

格式为“grep [选项] [文件]”

参数 作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择—仅列出没有“关键词”的行

两 个最最常用的参数:-n 参数用来显示搜索到信息的行号;-v 参数用于反选信息

管道符、重定向与环境变量

输入输出重定向

符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件 1 > 文件 2 将文件 1 作为命令的标准输入并将标准输出到文件 2
符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的 后面

man bash > readme.txt
将Man bash 的参数输出到readme.txt

查看行数

wc -l < readme.txt


### 管道命令符

找出被限制登录用户的命令是 grep "/sbin/nologin" /etc/passwd;

统计文本行数的命令则是 wc -l。

grep “/sbin/nologin” /etc/passwd | wc -l


修改用户登录密码

echo “linuxprobe” | passwd –stdin root


下面这条自造的命令就结合使用了 mail 邮件命令与输入重定向的分界符,其目的是让用 户一直输入内容,直到用户输入了其自定义的分界符时,才结束输入。

[root@linuxprobe ~]# mail -s “Readme” root@linuxprobe.com << over

I think linux is very practical
I hope to learn more
can you teach me ?
over
[root@linuxprobe ~]#


### 命令行的通配符

Linux文件的命名的规则:最大为255个字符;不包括正斜号和反斜号。(可以使用转义符进行转义);以“.“开头的文件为隐藏的文件。(显示隐藏的文件使用ls -al或者ls -A进行显示)

?依旧代表模糊查找,*表示一个或者多个。

a [xyz]b表示包含其中的任意一个

a[!xyz]b表示不包含其中的任意一个。

a[1..9]b 表示包含括号的起点数值到最后的数值

a{abc,xyz,123}b 包含括号中的任意一组

### 常用的转义字符

反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。

单引号(''):转义其中所有的变量为单纯的字符串。

双引号(""):保留其中的变量属性,不进行转义处理。

反引号(``):把其中的命令执行后返回结果。

### 重要的环境变量
| 名称 | 作用 |
| --- | --- |
| HOME | 用户的主目录(即家目录) |
| SHELL | 用户在使用的 Shell 解释器名称 |
| HISTSIZE | 输出的历史命令记录条数 |
| HISTFILESIZE | 保存的历史命令记录条数 |
| MAIL | 邮件保存路径 |
| LANG | 系统语言、语系名称 |
| RANDOM | 生成一个随机数字 |
| PS1 | Bash 解释器的提示符 |
| PATH | 定义解释器搜索用户执行命令的路径 |
| EDITOR | 用户默认的文本编辑器 |


使用什么命令可以把名为 LINUX 的一般变量转换成全局变量?

答:export LINUX

## 存储结构与磁盘划分

### 一切从/开始

目录名称	应放置文件的内容

/boot	开机所需文件—-内核、开机菜单以及所需配置文件等
/dev	以文件形式存放任何设备与接口
/etc	配置文件
/home	用户家目录
/root	系统管理员家目录
/bin	存放单用户模式下还可以操作的命令
/sbin	开机过程中需要的命令
/lib	开机时用到的库函数,以及/bin和/sbin下面的命令要调用的函数
/srv	一些网络服务的数据文件目录
/media	用于挂载设备文件的目录
/opt	放置第三方的软件
/tmp	任何人均可以使用的“共享”临时目录
/proc	虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local	用户自行安装的软件
/usr/sbin	Linux系统开机时不会用到的软件、命令、脚本
/usr/share	帮助与说明文件,也课放置共享文件
/lost+found	当系统发生错误时,将一些丢失的文件片段存放在这里
/var	主要存放经常变化的文件,如日志
文件系统与数据资料

### 文件系统与数据资料

#### Ext3

是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并 能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也 会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入 动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分, 然后尝试进行修复。

#### Ext4

Ext3 的改进版本,作为 RHEL 6 系统中的默认文件管理系统,它支持的存储容 量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4 文件系 统能够批量分配 block 块,从而极大地提高了读写效率。

#### XFS

是一种高性能的日志文件系统,而且是 RHEL 7 中默认的文件管理系统,它的 优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的 日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为 18EB, 这几乎满足了所有需求

### 挂载硬件设备

#### mount 命令

mount 命令用于挂载文件系统,格式为“mount 文件系统 挂载目录”。

| 参数 | 作用 |
| --- | --- |
| -a | 挂载所有在/etc/fstab 中定义的文件系统 |
| -t | 指定文件系统的类型 |

| 字段 | 意义 |
| --- | --- |
| 设备文件 | 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier) |
| 挂载目录 | 指定要挂载到的目录,需在挂载前创建好 |
| 权限选项 | 若设置为 defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async |
| 格式类型 | 指定文件系统的格式,比如 Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 |
| 自检 | 若为 1 则开机后进行磁盘自检,为 0 则不自检 |
| 优先级 | 若“自检”字段为 1,则可对多块硬盘进行自检优先级设置 |


#### umount 命令

umount 命令用于撤销已经挂载的设备文件,格式为“umount [挂载点/设备文件]”。

### 添加硬盘设备

选择想要添加的硬件类型为“硬盘”,然后单击“下一步”按钮

选择虚拟硬盘的类型为 SCSI(默认推荐),并单击“下一步”按钮,这样虚拟机中的设 备名称过一会儿后应该为/dev/sdb,

按照前文讲 解的 udev 服务命名规则,第二个被识别的 SCSI 设备应该会被保存为/dev/sdb,这个就是硬盘 设备文件了

#### fdisk 命令

fdisk 命令用于管理磁盘 分区,格式为“fdisk [磁盘名称]”,

| 参数 | 作用 |
| --- | --- |
| m | 查看全部可用的参数 |
| n | 添加新的分区 |
| d | 删除某个分区信息 |
| l | 列出所有可用的分区类型 |
| t | 改变某个分区的类型 |
| p | 查看分区信息 |
| w | 保存并退出 |
| q | 不保存直接退出 |


使用 fdisk 命令来尝试管理/dev/sdb 硬盘设备。在看到提示信息后输入参数 p 来 查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息

输入参数 n 尝试添加新的分区。系统会要求您是选择继续输入参数 p 来创建主分区,还 是输入参数 e 来创建扩展分区。这里输入参数 p 来创建一个主分区

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p


在确认创建一个主分区后,系统要求您先输入主分区的编号。我们在前文得知,主分区的编 号范围是 1~4,因此这里输入默认的 1 就可以了。接下来系统会提示定义起始的扇区位置,这不 需要改动,我们敲击回车键保留默认设置即可

Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):此处敲击回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set


这时候千万不要直接关闭窗口, 而应该敲击参数 w 后回车

我们可以使用 file 命令查看该文件的属性

[root@zhangsan centos8]# file /dev/sdb
/dev/sdb: block special (8/16)


我们可以输入 partprobe 命令手动将分区信息同步到内核,

使用mkfs 进行格式化(tab可以查看可选项目)

mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat


要格式分区为 XFS 的文件系统,则  应为 mkfs.xfs /dev/sdb1。

进行挂载

[root@linuxprobe ~]# mkdir /newFS
[root@linuxprobe ~]# mount /dev/sdb1 /newFS/


df -h查看挂载情况



### du 命令

“du [选项]  [文件]”

du -sh /*命令来查看在 Linux 系统根目录下所有一级目录分别占用的空间大小。

复制前边新建的硬盘文件,使用du -sh 进行查看存储空间的大小

[root@linuxprobe ~]# cp -rf /etc/* /newFS/
[root@linuxprobe ~]# ls /newFS/
abrt hosts pulse
adjtime hosts.allow purple
aliases hosts.deny qemu-ga
aliases.db hp qemu-kvm
alsa idmapd.conf radvd.conf
alternatives init.d rc0.d
anacrontab inittab rc1.d
………………省略部分输入信息………………
[root@linuxprobe ~]# du -sh /newFS/
33M /newFS/


如果想让这个设备文件的挂载永久有效,则需要把挂载 的信息写入到配置文件中:

[root@linuxprobe ~]# vim /etc/fstab
/etc/fstab
Created by anaconda on Wed May 4 19:26:23 2017
Accessible filesystems, by reference, are maintained under ‘/dev/disk’
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs


### 添加交换分区

SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常 用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用

fdisk /dev/sdb #磁盘的建立


使用 SWAP 分区专用的格式化命令 mkswap,对新建的主分区进行格式化操作

mkswap /dev/sdb2


为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关信息写入 到配置文件中

[root@linuxprobe ~]# vim /etc/fstab

/etc/fstab
Created by anaconda on Wed May 4 19:26:23 2017
Accessible filesystems, by reference, are maintained under ‘/dev/disk’
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0


### 磁盘容量配额

quota 命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数

进入配置文件

vim /etc/fstab


进行修改

UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b/boot xfs defaults,uquota 1 2


重启

reboot


进行挂载

mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)


接下来创建一个用于检查 quota 磁盘容量配额效果的用户 tom,并针对/boot 目录增加其 他人的写权限,保证用户能够正常写入数据

useradd tom


chmod -Rf o+w /boot


#### xfs_quota 命令

xfs_quota 命令是一个专门针对 XFS 文件系统来管理 quota 磁盘容量配额服务而设计的命令, 格式为“quota [参数] 配额 文件系统”。其中,-c 参数用于以参数的形式设置要执行的命令;-x 参数是专家模式

使用 xfs_quota 命令来设置用户 tom 对/boot 目录的 quota 磁盘容量配额。具体的限额控制包括:硬盘使用量的软 限制和硬限制分别为 3MB 和 6MB;创建文件数量的软限制和硬限制分别为 3 个和 6 个

xfs_quota -x -c ‘limit bsoft=3m bhard=6m isoft=3 ihard=6
tom’ /boot


root@linuxprobe ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1) Blocks
User ID Used Soft Hard Warn/Grace


root 95084 0 0 00 [——–]
tom 0 3072 6144 00 [——–]


#### edquota 命令

dquota 命令用于编辑用户的 quota 配额限制,格式为“edquota [参数] [用户] ”

,-u 参数表示要针对哪个用户进行设置;-g 参数表示要针对哪个用户组进行设置

下面把用户 tom 的硬盘使用 量的硬限额从 5MB 提升到 8MB:

[root@linuxprobe ~]# edquota -u tom
Disk quotas for user tom (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda 6144 3072 8192 1 3 6
[root@linuxprobe ~]# su – tom
Last login: Mon Sep 7 16:43:12 CST 2017 on pts/0
[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB) copied, 0.0268044 s, 313 MB/s
[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=10M count=1
dd: error writing ‘/boot/tom’: Disk quota exceeded
1+0 records in
0+0 records out
8388608 bytes (8.4 MB) copied, 0.167529 s, 50.1 MB/s


### 软硬方式链接

### ln 命令

ln 命令用于创建链接文件,格式为“ln [选项] 目标”

| 参数 | 作用 |
| --- | --- |
| -s | 创建“符号链接”(如果不带-s 参数,则默认创建硬链接) |
| -f | 强制创建文件或目录的链接 |
| -i | 覆盖前先询问 |
| -v | 显示创建链接的过程 |
|  |  |


硬链接就不依赖于原始文件的名称等信息,也不会 因为原始文件的删除而导致无法读取

### 使用 RAID 与 LVM 磁盘阵列技术

RAID(独立冗余磁盘阵列)

#### RAID 0

RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成 一个大的卷组,并将数据依次写入到各个物理硬盘中

能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错 误修复能力。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/29649025/1658674430606-35f0fa56-1e77-4fd6-b997-af4e3f5cd892.png#averageHue=%23e4e4e4&clientId=u43f67731-a62a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=144&id=u154ebf31&margin=%5Bobject%20Object%5D&name=image.png&originHeight=180&originWidth=322&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28315&status=done&style=none&taskId=u8d07b6e0-f7d6-41cd-bc26-7cd0d12c9b4&title=&width=257.6)

#### RAID 1

把多块设备进行捆绑

RAID 1 技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数 据,因此硬盘设备的利用率得以下降
![image.png](https://cdn.nlark.com/yuque/0/2022/png/29649025/1658674523557-a4500ed1-9ed3-4298-b485-776a32b9cbfd.png#averageHue=%23eaeaea&clientId=u43f67731-a62a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=167&id=u04281a85&margin=%5Bobject%20Object%5D&name=image.png&originHeight=209&originWidth=351&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28910&status=done&style=none&taskId=u48fa295f-b069-43d6-95f1-5ef43f97809&title=&width=280.8)
#### RAID 5

 RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。 RAID 5 磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到 除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命 缺陷;图 中 parity 部分存放的就是数据的奇偶校验信息,换句话说,就是 RAID 5 技术实 际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试 重建损坏的数据。RAID 这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性 与存储成本问题  
![image.png](https://cdn.nlark.com/yuque/0/2022/png/29649025/1658674467085-4d8dfa4b-9fe4-418d-a50b-245ab6d524ff.png#averageHue=%23cecece&clientId=u43f67731-a62a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=144&id=uc5277ba6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=180&originWidth=388&originalType=binary&ratio=1&rotation=0&showTitle=false&size=48674&status=done&style=none&taskId=ue07ac27f-4bb2-4467-ab69-ea31715cbca&title=&width=310.4)
#### RAID 10
  RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”  
 RAID 10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保 证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设 备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损 坏 50%的硬盘设备而不丢失数据。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID 1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能都超过了 RAID 5,因此当前成 7.1 RAID(独立冗余磁盘阵列) 137 为广泛使用的一种存储技术。  

![image.png](https://cdn.nlark.com/yuque/0/2022/png/29649025/1658674599375-a0ef3a79-37cd-4868-b5e3-186b6d5c02ff.png#averageHue=%23dbdbdb&clientId=u43f67731-a62a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=173&id=ua6178c13&margin=%5Bobject%20Object%5D&name=image.png&originHeight=216&originWidth=490&originalType=binary&ratio=1&rotation=0&showTitle=false&size=60873&status=done&style=none&taskId=ue940da9b-08f6-47d7-acf9-b199b26fe55&title=&width=392)
###  部署磁盘阵列  
 在虚拟机中添加 4 块硬盘设备来制作一个 RAID 10 磁盘阵列  
![image.png](https://cdn.nlark.com/yuque/0/2022/png/29649025/1658674714121-166e1ce3-d6e5-4fc9-8536-a2777e8c6601.png#averageHue=%23f0f0f0&clientId=u43f67731-a62a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=348&id=u1915dbaf&margin=%5Bobject%20Object%5D&name=image.png&originHeight=435&originWidth=484&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85279&status=done&style=none&taskId=ue17846a7-b46b-4b4d-a365-b27c757b1fa&title=&width=387.2)
 mdadm 命令用于管理 Linux 系统中的软件 RAID 硬盘阵列,格式为“mdadm [模式]  [选项] [成员设备名称]” 
 mdadm 命令的常用参数和作用
:::tips
-a 检测设备名称 
-n 指定设备数量 
-l 指定 RAID 级别 
-C 创建 
-v 显示过程 
-f 模拟设备损坏 -
r 移除设备
 -Q 查看摘要信息 -
D 查看详细信息 -
S 停止 RAID 磁盘阵列  
:::
 接下来,使用 mdadm 命令创建 RAID 10,名称为“/dev/md0”  
 此时,就需要使用 mdadm 中的参数了。其中,-C 参数代表创建一个 RAID 阵列卡;-v 参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0 就是创建后的 RAID 磁盘阵列的名称;-a yes 参数代表自动创建设备文件;-n 4 参数代表使用 4 块硬盘来部 署这个 RAID 磁盘阵列;而-l 10 参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称 就搞定了  
```powershell
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc 
/dev/sdd /dev/sde 

其次,把制作好的 RAID 磁盘阵列格式化为 ext4 格式

 mkfs.ext4 /dev/md0

创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为 40GB。

mkdir /RAID 
mount /dev/md0 /RAID 
df -h 

最后,查看/dev/md0 磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久 生效。

mdadm -D /dev/md0   查看详细信息
echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab 永久挂载

损坏磁盘阵列及修复

在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用 mdadm 命令将其 移除,然后查看 RAID 磁盘阵列的状态,可以发现状态已经改变

mdadm /dev/md0 -f /dev/sdb  设备损坏
 mdadm -D /dev/md0    查看信息

在 RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID 10 磁盘阵列的使用。当购买了新的硬盘设备后再使用 mdadm 命令来予以替换即可,在此期间 我们可以在/RAID 目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先 重启系统,然后再把新的硬盘添加到 RAID 磁盘阵列中。

 umount /RAID 
 mdadm /dev/md0 -a /dev/sdb 
 mdadm -D /dev/md0 

磁盘阵列+备份盘

部署RAID5
部署 RAID 5 磁盘阵列时,至少需要用 到 3 块硬盘,还需要再加一块备份硬盘,所以总计需要在虚拟机中模拟 4 块硬盘设备
image.png
现在创建一个 RAID 5 磁盘阵列+备份盘。在下面的命令中,参数-n 3 代表创建这个 RAID 5 磁盘阵列所需的硬盘数,参数-l 5 代表 RAID 的级别,而参数-x 1 则代表有一块备 份盘。当查看/dev/md0(即 RAID 5 磁盘阵列的名称)磁盘阵列的时候就能看到有一块备 份盘在等待中了

mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde 

现在将部署好的 RAID 5 磁盘阵列格式化为 ext4 文件格式,然后挂载到目录上,之后就 可以使用了

mkfs.ext4 /dev/md0 
 echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab 

最后是见证奇迹的时刻!我们再次把硬盘设备/dev/sdb 移出磁盘阵列,然后迅速查看 /dev/md0 磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。

 mdadm /dev/md0 -f /dev/sdb
 mdadm -D /dev/md0 

LVM(逻辑卷管理器)

逻辑卷管理器是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建 初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进 行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬 盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行 卷组合并。这样一来,用户不必关心物理硬盘设备的低层架构和布局,就可以实现对硬盘分 区的动态调整
image.png

部署逻辑卷

image.png
第1步:让新添加的两块硬盘设备支持 LVM 技术

pvcreate /dev/sdb /dev/sdc 


 Physical volume "/dev/sdb" successfully created 
 Physical volume "/dev/sdc" successfully created

image.png
第2步:把两块硬盘设备加入到 storage 卷组中,然后查看卷组的状态。

vgcreate storage /dev/sdb /dev/sdc
# Volume group "storage" successfully created 
vgdisplay 
#--- Volume group --- 
 VG Name storage 
 System ID 
 Format lvm2 
 Metadata Areas 2 
 Metadata Sequence No 1 
 VG Access read/write 
 VG Status resizable 
 MAX LV 0 
 Cur LV 0 
 Open LV 0 
 Max PV 0 
 Cur PV 2 
 Act PV 2 
 VG Size 39.99 GiB 
 PE Size 4.00 MiB 
 Total PE 10238 
 Alloc PE / Size 0 / 0 Free PE / Size 10238 / 39.99 GiB
 VG UUID KUeAMF-qMLh-XjQy-ArUo-LCQI-YF0o-pScxm1 
………………省略部分输出信息………………

第3步:切割出一个约为 150MB 的逻辑卷设备
这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容 量为单位,所使用的参数为-L。例如,使用-L 150M 生成一个大小为 150MB 的逻辑卷。另外 一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为 4MB。例 如,使用-l 37 可以生成一个大小为 37×4MB=148MB 的逻辑卷。

lvcreate -n vo -l 37 storage 
# Logical volume "vo" created 
lvdisplay
 #--- Logical volume --- 
 LV Path /dev/storage/vo 
 LV Name vo 
 VG Name storage 
 LV UUID D09HYI-BHBl-iXGr-X2n4-HEzo-FAQH-HRcM2I 
 LV Write Access read/write 
 LV Creation host, time localhost.localdomain, 2017-02-01 01:22:54 -0500 
 LV Status available 
 # open 0 
 LV Size 148.00 MiB
 Current LE 37 
 Segments 1 
 Allocation inherit 
 Read ahead sectors auto 
 - currently set to 8192 
 Block device 253:2 
………………省略部分输出信息………………

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。 Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上是做了一个符号链 接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组 名称/逻辑卷名称)

# mkfs.ext4 /dev/storage/vo

第5步:查看挂载状态,并写入到配置文件,使其永久生效

df -ch

echo "/dev/storage/vo /zhangsan ext4 defaults 0 0" >> / etc/fstab

扩容逻辑卷

第1步:把上一个实验中的逻辑卷 vo 扩展至 290M

 lvextend -L 290M /dev/storage/vo

第2步:检查硬盘完整性,并重置硬盘容量。

 e2fsck -f /dev/storage/vo
 
 esize2fs /dev/storage/vo 

第3步:重新挂载硬盘设备并查看挂载状

mount -a

df -ch

缩小逻辑卷

第1步:检查文件系统的完整性

 e2fsck -f /dev/storage/vo
 

第2步:把逻辑卷 vo 的容量减小到 120MB。

resize2fs /dev/storage/vo 120M 

lvreduce -L 120M /dev/storage/vo

第3步:重新挂载文件系统并查看系统状态。

mount -a

df -ch

逻辑卷快照

首先查看卷组的信息。

 vgdisplay 
 #--- Volume group --- 
 VG Name storage 
 System ID 
 Format lvm2 
 Metadata Areas 2 
 Metadata Sequence No 4 
 VG Access read/write 
 VG Status resizable 
 MAX LV 0 
 Cur LV 1 
 Open LV 1 
 Max PV 0 
 Cur PV 2 
 Act PV 2 
 VG Size 39.99 GiB 
 PE Size 4.00 MiB 
 Total PE 10238 
 Alloc PE / Size 30 / 120.00 MiB Free PE / Size 10208 / 39.88 GiB
 VG UUID CTaHAK-0TQv-Abdb-R83O-RU6V-YYkx-8o2R0e 
………………省略部分输出信息……………… 

通过卷组的输出信息可以清晰看到,卷组中已经使用了 120MB 的容量,空闲容量还有 39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件

echo "Welcome to zhangsan.com" > /zhangsan/readme.txt 
[root@linuxprobe ~]# ls -l /zhangsan
total 14 
drwx------. 2 root root 12288 Feb 1 07:18 lost+found 
-rw-r--r--. 1 root root 26 Feb 1 07:38 readme.txt 

第1步:使用-s 参数生成一个快照卷,使用-L 参数指定切割的大小。另外,还需要在命 令后面写上是针对哪个逻辑卷执行的快照操作。

lvcreate -L 120M -s -n SNAP /dev/storage/vo 

 lvdisplay 

第2步:在逻辑卷所挂载的目录中创建一个 100MB 的垃圾文件,然后再查看快照卷的状 态。可以发现存储空间占的用量上升了

dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M

第3步:为了校验 SNAP 快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记 得先卸载掉逻辑卷设备与目录的挂载

 umount /zhangsan
 
 lvconvert --merge /dev/storage/SNAP 

第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来 的 100MB 的垃圾文件也被清除了

mount -a 
 ls /linuxprobe/ 

删除逻辑卷

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数

umount /zhangsan
 vim /etc/fstab 
# 
# /etc/fstab 
# Created by anaconda on Fri Feb 19 22:08:59 2017 
# 
# Accessible filesystems, by reference, are maintained under '/dev/disk' 
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info 
# 
/dev/mapper/rhel-root / xfs defaults 1 1 
UUID=50591e35-d47a-4aeb-a0ca-1b4e8336d9b1 /boot xfs defaults 1 2 
/dev/mapper /rhel-swap swap swap defaults 0 0 
/dev/cdrom /media/cdrom iso9660 defaults 0 0

第2步:删除逻辑卷设备,需要输入 y 来确认操作。

lvremove /dev/storage/vo 

#Do you really want to remove active logical volume vo? [y/n]: y
 Logical volume "vo" successfully removed 

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径

vgremove storage 
# Volume group "storage" successfully removed

第4步:删除物理卷设备

 pvremove /dev/sdb /dev/sdc 

iptables 与 firewalld 防火墙

iptables

ptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则 链,而规则链则依据数据包处理位置的不同进行分类,具体如下:

在进行路由选择前处理数据包(PREROUTING);

处理流入的数据包(INPUT);

处理流出的数据包(OUTPUT);

处理转发的数据包(FORWARD);

在进行路由选择后处理数据包(POSTROUTING)。

参数 作用
-P 设置默认策略
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址 IP/MASK,加叹号“!”表示除这个 IP 外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如 TCP、UDP、ICMP
–dport num –sport num 匹配目标端口号 匹配来源端口号

在 iptables 命令后添加-L 参数查看已有的防火墙规则链

eg:

把 INPUT 规则链的默认策略设置为拒绝

[root@linuxprobe ~]# iptables -P INPUT DROP 
[root@linuxprobe ~]# iptables -L 
Chain INPUT (policy DROP) 
target prot opt source destination

向 INPUT 链中添加允许 ICMP 流量进入的策略规则

iptables -I INPUT -p icmp -j ACCEPT
#允许了这种 ping 命令检
测行为

对修改的进行永久的保存

service iptables save

firewalld 防火墙

参数 作用
trusted 允许所有的数据包
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、mdns、ipp-client、 amba-client 与 dhcpv6-client 服务相关,则允许流量
internal 等同于 home 区域
work 拒绝流入的流量,除非与流出的流量数相关;而如果流量与 ssh、ipp-client 与 dhcpv6-client 服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、dhcpv6-client 服务 相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量 dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关 drop 拒绝流入的流量,除非与流出的流量相关

终端执行命令

firewall -cmd [参数]

–get-default-zone 查询默认的区域名称
–set-default-zone=<区域名称> 设置默认的区域,使其永久生效
–get-zones 显示可用的区域
-get-services 显示预先定义的服务
–get-active-zones 显示当前正在使用的区域与网卡名称
–reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规
–panic-on 开启应急状况模
–panic-off 关闭应急状况模式

图形化工具 firewalld-config

服务的访问控制列表

tcp wrappers

TCP Wrappers 服务则是能允许或 禁止 Linux 系统提供服务的防火墙,从而在更高层面保护了 Linux 系统的安全运行

配置文件

vim /etc/hosts.deny

下面编写拒绝策略规则文件,禁止访问本机 sshd 服务的所有流量(无须/etc/hosts.deny 文 件中修改原有的注释信息)

[root@linuxprobe ~]# vim /etc/hosts.deny 
# 
# hosts.deny This file contains access rules which are used to 
# deny connections to network services that either use 
# the tcp_wrappers library or that have been 
# started through a tcp_wrappers-enabled xinetd. 
# 
# The rules in this file can also be set up in 
# /etc/hosts.allow with a 'deny' option instead. 
# 
# See 'man 5 hosts_options' and 'man 5 hosts_access' 
# for information on rule syntax. 
# See 'man tcpd' for information on tcp_wrappers 
sshd:* 
[root@linuxprobe ~]# ssh 192.168.10.10 
ssh_exchange_identification: read: Connection reset by peer

使用 ssh 服务管理远程主机

配置网络服务

配置网络服务

nmtui 命令

# vim /etc/sysconfig/network-scripts/ifcfg-ens33   #将onboot参数修改为yes

TYPE=Ethernet 
BOOTPROTO=none 
DEFROUTE=yes 
IPV4_FAILURE_FATAL=no 
IPV6INIT=yes 
IPV6_AUTOCONF=yes 
IPV6_DEFROUTE=yes 
IPV6_FAILURE_FATAL=no 
NAME=eno16777736 
UUID=ec77579b-2ced-481f-9c09-f562b321e268 
ONBOOT=yes
IPADDR0=192.168.10.10

在配置成功之后需要对服务进行重启

systemctl restart netwrok
创建网络会话

查看状态

nmcli connection show

查看指定的网卡

nmcli connection show ens33

创建网络会话

nmcli connection add con-name type ifname 
#需要记得使用autoconnect进行激活

eg:建立名称为company的会话,并进行ip的配置

nmcli connection add con-name  company ifname ens33 autoconnect no type  ethernet 192.168.10.10 gw4 192.168.10.1

eg:建立名称为house的会话

nmcli connection add con-name housre ens33 type ethernet  ifname ens33

对house进行激活

nmcli connection up house

绑定两块网卡

再建立一个网卡,确保两个网卡的连接模式相同

然后进行配置上的修改

[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 
TYPE=Ethernet 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
DEVICE=eno16777736 
MASTER=bond0 
SLAVE=yes
[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554968 
TYPE=Ethernet 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
DEVICE=eno33554968 
MASTER=bond0 
SLAVE=yes

还需要将绑定后的设备命名为 bond0 并把 IP 地址等信息填写进去,这样当用户访问相应 服务的时候,实际上就是由这两块网卡设备在共同提供服务

[root@linuxprobe ~]# vim/etc/sysconfig/network-scripts/ifcfg-bond0 
TYPE=Ethernet 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
DEVICE=bond0 
IPADDR=192.168.10.10 
PREFIX=24 
DNS=192.168.10.1 
NM_CONTROLLED=no

让 Linux 内核支持网卡绑定驱动。常见的网卡绑定驱动有三种模式—mode0、mode1 和 mode6。

mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地 网卡相连的交换机设备上进行端口聚合来支持绑定技术。

mode1(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。

mode6(平衡负载模式):平时两块网卡均工作,且自动备援,无须交换机设备提供辅 助支持。

绑定后的 bond0 网卡 设备能够支持绑定技术(bonding);同时定义网卡以 mode6 模式进行绑定,且出现故障时自 动切换的时间为 100 毫秒

[root@linuxprobe ~]# vim /etc/modprobe.d/bond.conf 
alias bond0 bonding 
options bond0 miimon=100 mode=6

然后进行重启服务

systemctl resatrt netwrok

远程控制服务

sshd 服务的配置信息保存在/etc/ssh/sshd_config 文 件中。

 sshd 服务配置文件中包含的参数以及作用
Port 22 默认的 sshd 服务端口 L
istenAddress 0.0.0.0 设定 sshd 服务器监听的 IP 地址
Protocol 2 SSH 协议的版本号
HostKey /etc/ssh/ssh_host_key SSH 协议版本为 1 时,DES 私钥存放的位置
HostKey /etc/ssh/ssh_host_rsa_key SSH 协议版本为 2 时,RSA 私钥存放的位置
HostKey /etc/ssh/ssh_host_dsa_key SSH 协议版本为 2 时,DSA 私钥存放的位置
PermitRootLogin yes 设定是否允许 root 管理员直接登录
StrictModes yes 当远程用户的私钥改变时直接拒绝连接
MaxAuthTries 6 最大密码尝试次数
MaxSessions 10 最大终端数
PasswordAuthentication yes 是否允许密码验证
PermitEmptyPasswords no 是否允许空密码登录(很不安全
Port 22 默认的 sshd 服务端口

删除配置文件前边的#再进行参数的的修改

进行重启或者开启的操作就可以生效了

systemctl restart sshd
systemctl enable sshd

安全密钥验证

ssh-keygen

生成密钥的配对

具体看例子

[root@linuxprobe ~]# ssh-keygen 
Generating public/private rsa key pair. 
Enter file in which to save the key (/root/.ssh/id_rsa):按回车键或设置密钥的存储路径
Created directory '/root/.ssh'. 
Enter passphrase (empty for no passphrase): 直接按回车键或设置密钥的密码
Enter same passphrase again: 再次按回车键或设置密钥的密码
Your identification has been saved in /root/.ssh/id_rsa. 
Your public key has been saved in /root/.ssh/id_rsa.pub. 
The key fingerprint is: 
40:32:48:18:e4:ac:c0:c3:c1:ba:7c:6c:3a:a8:b5:22 root@linuxprobe.com 
The key's randomart image is: 
+--[ RSA 2048]----+ 
|+*..o . | 
|*.o + | 
|o* . | 
|+ . . | 
|o.. S | 
|.. + | 
|. = | 
|E+ . | 
|+.o | 
+-----------------+

把客户端主机中生成的公钥文件传送至远程主机

ssh-copy-id 远程主机地址

具体看例子

[root@linuxprobe ~]# ssh-copy-id 192.168.10.10 
The authenticity of host '192.168.10.20 (192.168.10.10)' can't be established. 
ECDSA key fingerprint is 4f:a7:91:9e:8d:6f:b9:48:02:32:61:95:48:ed:1e:3f. 
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter 
out any that are already installed 
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are 
prompted now it is to install the new keys 
root@192.168.10.10's password:此处输入远程服务器密码
Number of key(s) added: 1 
Now try logging into the machine, with: "ssh '192.168.10.10'" 
and check to make sure that only the key(s) you wanted were added.

对服务器进行设置,使其只允许密钥验证,拒绝传统的口令验证方式。记得在 修改配置文件后保存并重启 sshd 服务程序

vi 、etc/ssh/sshd_config
[root@linuxprobe ~]# vim /etc/ssh/sshd_config 
 ………………省略部分输出信息……………… 
 74 
 75 # To disable tunneled clear text passwords, change to no here! 
 76 #PasswordAuthentication yes 
 77 #PermitEmptyPasswords no 
 78 PasswordAuthentication no
 79 
 ………………省略部分输出信息……………… 
[root@linuxprobe ~]# systemctl restart sshd
SCP远程传输命令

scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录”

常用的参数

参数 作用
-v 显示详细的连接进度
-P 指定远程主机的 sshd 端口号
-r 用于传送文件夹
-6 使用 IPv6 协议

eg:

[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt 
[root@linuxprobe ~]# scp /root/readme.txt 192.168.10.20:/home 
root@192.168.10.20's password:此处输入远程服务器中 root 管理员的密码
readme.txt 100% 26 0.0KB/s 00:00

eg:

[root@linuxprobe ~]# scp 192.168.10.20:/etc/redhat-release /root 
root@192.168.10.20's password:此处输入远程服务器中 root 管理员的密码
redhat-release 100% 52 0.1KB/s 00:00 
[root@linuxprobe ~]# cat redhat-release 
Red Hat Enterprise Linux Server release 7.0 (Maipo)
不间断会话服务

creen 是一款能够实现多窗口远程控制的开源服务程序,简单来说就是为了解决网络异 常中断或为了同时控制多个远程终端窗口而设计的程序。用户还可以使用 screen 服务程序同 时在多个远程会话中自由切换,能够做到实现如下功能。

会话恢复:即便网络中断,也可让会话随时恢复,确保用户不会失去对远程会话 的控制。

多窗口:每个会话都是独立运行的,拥有各自独立的输入输出终端窗口,终端窗口内显示 过的信息也将被分开隔离保存,以便下次使用时依然能看到之前的操作记录。

会话共享:当多个用户同时登录到远程服务器时,便可以使用会话共享功能让用户之 间的输入输出信息共享

进行挂载

[root@linuxprobe ~]# mkdir -p /media/cdrom 
[root@linuxprobe ~]# mount /dev/cdrom /media/cdrom 
mount: /dev/sr0 is write-protected, mounting read-only

使用 Apache 服务部署静态网站

网站服务程序

apache安装

将文件挂载到/media/cdrom目录

mkdir -p  /media/cdrom
mount /dev/cdrom/media/cdrom

安装apache

yum install httpd

启动apache

systemctl start httpd

设置为开机启动

systemctl enable httpd
配置服务文件的参数
配置文件 目录
服务目录 /etc/httpd
主配置文件 /etc/hettpd/conf/http.conf
网站数据文件 /var/www/html
访问日志 /var/log/httpd/acces_log
错误日志 /var/log/httpd/error_log

在 httpd 服务程序的主配置文件中,存在三种类型的信息:注释行信息、全局配置、区域 配置

常见的参数和意义

最常用参数 用途描述
ServerRoot 服务目录
ServerAdmin 管理员邮箱
User 运行服务的用户
Group 运行服务的用户组
ServerName 网站服务器的域名
DocumentRoot 网站数据目录
Listen 监听的IP地址与端口号
DirectoryIndex 默认的索引页页面
ErrorLog 错误日志文件
CustomLog 访问日志文件
Timeout 网页超时时间,默认为300秒

eg:

在默认情况下,网站数据是保存在 /var/www/html 目录中,而如果想把保存网站数据的目录修改为/home/wwwroot 目录

mkdir /home/wwwroot
echo 'The New Web Directory' > /home/wwwroot/index.html

同时修改配置文件的参数

vi/ etc/httpd/conf/httpd.conf

将约第 119 行用于定义网站数据保存路径的 参数 DocumentRoot 修改为/home/wwwroot,同时还需要将约第 124 行用于定义目录权限的参 数 Directory 后面的路径也修改为/home/wwwroot。

113 
114 # 
115 # DocumentRoot: The directory out of which you will serve your 
116 # documents. By default, all requests are taken from this directory, but 
117 # symbolic links and aliases may be used to point to other locations. 
118 # 
119 DocumentRoot "/home/wwwroot" 
120 
121 # 
122 # Relax access to content within /var/www. 
123 # 
124 <Directory "/home/wwwroot"> 
125 AllowOverride None 
126 # Allow open access: 
127 Require all granted 
128 </Directory>

SELinux 安全子系统

SELinux 服务有三种配置模式,具体如下。

enforcing:强制启用安全策略模式,将拦截服务的不合法请求。

permissive:遇到服务越权访问时,只发出警告而不强制拦截。

disabled:对于越权的行为不警告也不拦截

配置文件所在目录

/etc/selinux/config

使用命令getenforce查看当前selinux的运行状态

[root@zhangsan ~]# getenforce
Enforcing

对运行状态进行修改(只是临时的),0为开启,1为禁止

setenforce 0
setenforce 1
semanage 命令

semanage 命令用于管理 SELinux 的策略,

格式为“semanage [选项] [文件]”。

-l 参数用于查询;

-a 参数用于添加;

-m 参数用于修改;

-d 参数用于删除

使用 restorecon 命令时,可以加上-Rv 参数对指定的目录 进行递归操作,以及显示 SELinux 安全上下文的修改过程

个人用户主页功能

vi /etc/httpd/conf/conf.d/usrdir.conf

后在第 17 行的 UserDir disabled 参数前面加上井号(#),表示让 httpd 服务 程序开启个人用户主页功能;同时再把第 24 行的 UserDir public_html 参数前面的井号(#) 去掉(UserDir 参数表示网站数据在用户家目录中的保存目录名称,即 public_html 目录)

在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把 家目录的权限修改为 755,

mkdir public_html
echo 'yutoujun yyds' > pb=ublic_html
chomd -Rf 755 /home/public_html

如果出现报错的情况,就是selinux的权限的限制

getsbool -a|grep httpd#查看权限方面

开启个人主页功能

 setsebool -P httpd_enable_homedirs=on

进行密码的设置

htppaaswd -c /etc/httpd/passwd centos8
[root@zhangsan wwwroot]# htpasswd -c /etc/httpd/passwd centos8
New password:  #输入密码
Re-type new password:   #再次确定
Adding password for user centos8

修改配置文件

vim /etc/httpd/conf.d/userdir.conf

Directory “/home/*/public_html”>

AllowOverride all
刚刚生成出来的密码验证文件保存路径
authuserfile “/etc/httpd/passwd”
当用户尝试访问个人用户网站时的提示信息
authname “My privately website”
authtype basic
用户进行账户密码登录时需要验证的用户名称
require user centos8

虚拟主机功能

使用 vsftpd 服务传输文件

安装
yum install -y vsftpd

对ftp进行设置

systemctl restart  vsftpd
systemctl enable vsftpd

进行ftp的连接

ftp ip地址

登录名称为anonymous 默认情况没有密码

清除iptables的设置

iptables -F

保存配置

service iptables  save

配置文件位置

/etc/vsftp/vsftp.conf

image-20220529005316525.png

sftpd服务程序常用参数以及作用

(1)listen=[YES|NO]:是否以独立运行的方式监听服务

(2)listen_address=IP地址:设置要监听的IP地址

(3)listen_port=21:设置FTP服务的监听端口

(4)download_enable=[YES|NO]:是否允许下载文件

(5)userlist_enable=[YES|NO],userlist_deny=[YES|NO]:设置用户列表为“允许”还是“禁止”操作

(6)max_clients=0:最大客户端连接数,0为不限制

(7)max_per_ip=0:同一IP地址的最大连接数,0为不限制

(8)anonymous_enable=[YES|NO]:是否允许匿名用户访问

(9)anon_upload_enable=[YES|NO]:是否允许匿名用户上传文件

(10)anon_umask=022:匿名用户上传文件的umask值

(11)anon_root=/var/ftp:匿名用户的FTP根目录

(12)anon_mkdir_write_enable=[YES|NO]:是否允许匿名用户创建目录

(13)anon_other_write_enable=[YES|NO]:是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)

(14)anon_max_rate=0:匿名用户的最大传输速率(字节/秒),0 为不限制

(15)local_enable=[YES|NO]:是否允许本地用户登录FTP

(16)local_umask=022:本地用户上传文件的umask值

(17)local_root=/var/ftp:本地用户的FTP根目录

(18)chroot_local_user=[YES|NO]:是否将用户权限禁锢在FTP目录,以确保安全

(19)local_max_rate=0:本地用户最大传输速率(字节/秒),0 为不限制

vsftpd 服务程序
匿名开放模式

anonymous_enable=YES 允许匿名访问模式 anon_umask=022 匿名用户上传文件的 umask 值 anon_upload_enable=YES 允许匿名用户上传文件 anon_mkdir_write_enable=YES 允许匿名用户创建目录 anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录

本地用户模式

anonymous_enable=NO 禁止匿名访问模式 local_enable=YES 允许本地用户模式

write_enable=YES 设置可写权限

local_umask=022 本地用户模式创建文件的 umask 值 userlist_enable=YES 启用“禁止用户名单”,名单文件为 ftpusers 和 user_list

userlist_deny=YES 开启用户作用名单文件功能

虚拟用户模式

第1步:创建用于进行 FTP 认证的用户数据库文件,其中奇数行为账户名,偶数行为密 码。例如,我们分别创建出 zhangsan 和 lisi 两个用户,密码均为 redhat:

[root@linuxprobe ~]# cd /etc/vsftpd/ 
[root@linuxprobe vsftpd]# vim vuser.list
zhangsan 
redhat 
lisi 
redhat

但是,明文信息既不安全,也不符合让 vsftpd 服务程序直接加载的格式,因此需要使 用 db_load 命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低 数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件 删除

[root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db 
[root@linuxprobe vsftpd]# file vuser.db 
vuser.db: Berkeley DB (Hash, version 9, native byte-order) 
[root@linuxprobe vsftpd]# chmod 600 vuser.db 
[root@linuxprobe vsftpd]# rm -f vuser.list

第2步:创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地 用户。

[root@linuxprobe ~]# useradd -d /var/ftproot -s /sbin/nologin virtual 
[root@linuxprobe ~]# ls -ld /var/ftproot/ 
drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/ 
[root@linuxprobe ~]# chmod -Rf 755 /var/ftproot/

第3步:建立用于支持虚拟用户的 PAM 文件

[root@linuxprobe ~]# vim /etc/pam.d/vsftpd.vu 
auth required pam_userdb.so db=/etc/vsftpd/vuser 

account required pam_userdb.sodb=/etc/vsftpd/vuser

第4步:在 vsftpd 服务程序的主配置文件中通过 pam_service_name 参数将 PAM 认证 文件的名称修改为 vsftpd.vu

anonymous_enable=NO 禁止匿名开放模式 local_enable=YES 允许本地用户模式

guest_enable=YES 开启虚拟用户模式 guest_username=virtual 指定虚拟用户账户 pam_service_name=vsftpd.vu 指定 PAM 文件 allow_writeable_chroot=YES 允许对禁锢的FTP 根目录执行写入操作,而且不拒绝用户的登录请求

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf 
1 anonymous_enable=NO 
2 local_enable=YES
3 guest_enable=YES
4 guest_username=virtual
5 allow_writeable_chroot=YES
6 write_enable=YES 
7 local_umask=022 
8 dirmessage_enable=YES 
9 xferlog_enable=YES 
10 connect_from_port_20=YES 
11 xferlog_std_format=YES 
12 listen=NO 
13 listen_ipv6=YES 
14 pam_service_name=vsftpd.vu
15 userlist_enable=YES 
16 tcp_wrappers=YES

第5步:为虚拟用户设置不同的权限。

[root@linuxprobe ~]# mkdir /etc/vsftpd/vusers_dir/ 
[root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/ 
[root@linuxprobe vusers_dir]# touch lisi 
[root@linuxprobe vusers_dir]# vim zhangsan 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES 
anon_other_write_enable=YES

然后再次修改 vsftpd 主配置文件,通过添加 user_config_dir 参数来定义这两个虚拟用户 不同权限的配置文件所存放的路径。为了让修改后的参数立即生效,需要重启 vsftpd 服务程 序并将该服务添加到开机启动项中:

简单文件传输协议

 yum install tftp-server tftp
yum install xinetd

进行配置的修改

xinetd 服务程序中将其开启,把默认的禁用(disable)参数修改为 no:

vim /etc/xinetd.d/tftp 

service tftp 
{ 
 socket_type = dgram 
 protocol = udp 
 wait = yes 
 user = root 
 server = /usr/sbin/in.tftpd 
 server_args = -s /var/lib/tftpboot 
 disable = no
 per_source = 11 
 cps = 100 2 
 flags = IPv4

重启 xinetd 服务并将它添加到系统的开机启动项中,以确保 TFTP 服务在系统重 启后依然处于运行状态。考虑到有些系统的防火墙默认没有允许 UDP 协议的 69 端口,因此 需要手动将该端口号加入到防火墙的允许策略中

# systemctl restart xinetd 
# systemctl enable xinetd 
# firewall-cmd --permanent --add-port=69/udp 
success 
# firewall-cmd --reload 
success

tftp 命令中可用的参数

?帮助信息

put 上传文件

get 下载文件

verbose 显示详细的处理信息

status 显示当前的状态信息

binary 使用二进制进行传输

ascii 使用 ASCII 码进行传输

timeout 设置重传的超时时间

quit 退出

使用 Samba 或 NFS 实现文件共享

Samba 文件共享服务

安装配置
yum insatll -y samba #安装samba
cat /etc/samba/smb.conf 查看配置文件
[global]  #全局设置
        workgroup = SAMBA #工作组名称
        security = user #安全验证方式

        passdb backend = tdbsam #定义用户后台的类型

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes] #共享参顺
        comment = Home Directories #描述信息
        valid users = %S, %D%w%S
        browseable = No #指定共享用户是否存在“网上邻居“
        read only = No
        inherit acls = Yes

[printers] 打印输出参数
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]  #
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775

再在 grep 命令后面添加-v 参数(反向选择),分别去掉所有以井号(#)和分号(;)开头的注释信 息行,对于剩余的空白行可以使用^$参数来表示并进行反选过滤,最后把过滤后的可用参 数信息通过重定向符覆盖写入到原始文件名称中

mv /etc/samba/smb.conf /etc/samba/smb.conf.bak 
#对文件进行移动
 cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v "; " | grep -v "^$" >/etc/samba/smb.conf 
 #grep -v反向选择 去掉分号和# ,^$表示反选过滤
配置共享资源

[database] 共享名称为 database

comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库

path = /home/database 共享目录为/home/database

public = no 关闭“所有人可见”

writable = yes 允许写入操作

第一步 进行用户的建立
id centos8  # id    主机名称
pdbedit -a -u    centos8  #建立用户

-a 用户名 建立 Samba 账户 –

x 用户名 删除 Samba 账户

-L 列出账户列表

-Lv 列出账户详细信息的列表

第2步:创建用于共享资源的文件目录
mkdir /home/database   #建立目录
chown -Rf centos8 : centos8 /home/databse  #进行权限归属的设置
semanage fcontext -a -t samba_share_t /home/database     #修改安全权限
restorecon -Rv /home/database     #应用于
目录的新 SELinux 安全上下文立即生效
第3步:设置 SELinux 服务与策略,
getsetbool -a |grep samba  #查看selinux的权限
setsebool -P samb _enable_dirs on #进行权限开启
第4步:在 Samba 服务程序的主配置文件中,
写入共享信息。 在原始的配置文件中
第5步:Samba 服务程序的配置工作基本完毕。
systemctl restart smb  #重启samba
systemctl enale smb  #添加到开机自动启动
iptables -F    #清除iotables的策略
service iptables  save   #对配置进行保存
Windows 访问文件共享服务

使用win+r 呼出运行面板

然后\虚拟机的ip地址

按照 Samba 服务的用户名、密码、共享域的顺序将相关信息写入到一 个认证文件中。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅 root 管 理员才能够读写

 vi auth.smb
username=smbuser 
password=redhat 
domain=MYGROUP
chmod 600 auth.smb   #对文件设置权限

在 Linux 客户端上创建一个用于挂载 Samba 服务共享资源的目录,并把挂载信息 写入到/etc/fstab 文件中

mkdir /database #创建文件夹
vim /etc/fstab   #写入挂载信息
# 
# /etc/fstab 
# Created by anaconda on Wed May 4 19:26:23 2017 
# 
# Accessible filesystems, by reference, are maintained under '/dev/disk' 
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info 
# 
/dev/mapper/rhel-root / xfs defaults 1 1 
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2 
/dev/mapper /rhel-swap swap swap defaults 0 0 
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
//192.168.88.130/database /database cifs credentials=/root/auth.smb 0 0#本次配置为这一行

进行挂载

mount  -a

Linux 客户端成功地挂载了 Samba 服务的共享资源。进入到挂载目录/database 后就可以 看到 Windows 系统访问 Samba 服务程序时留下来的文件了(即文件 Memo.txt)。当然,我们 也可以对该文件进行读写操作并保存

 cat /database/Memo.txt

NFS(网络文件系统)

yum install nfs-utils
第1步

:为了检验 NFS 服务配置的效果,我们需要使用两台 Linux 主机(一台充当 NFS 服务器,一台充当 NFS 客户端)

两台 Linux 主机所使用的操作系统以及 IP 地址

主机名称 操作系统 IP 地址

NFS 服务器 RHEL 7 192.168.10.10

NFS 客户端 RHEL 7 192.168.10.20

清空 NFS 服务器上面 iptables 防火墙的默认策略,以免默认的防火墙策 略禁止正常的 NFS 共享服务。

iptables -F
service iptables save
第2步

在 NFS 服务器上建立用于 NFS 文件共享的目录,并设置足够的权限确保其他 人也有写入权限。

mkdir /nfsfile
chmod -Rf 777 /nfsfile
echo "welcome to linuxprobe.com" > /nfsfile/readme
第3步:

NFS 服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们 可以按照“共享目录的路径 允许访问的 NFS 客户端(共享权限参数)”的格式,定义要共享 的目录与相应的权限

用于配置 NFS 服务程序配置文件的参数

参数 作用

ro 只读

rw 读写

root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户 no_root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员

all_squash 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户

sync 同时将数据写入到内存与硬盘中,保证不丢失数据

async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢 失数据

/sy

请注意,NFS 客户端地址与权限之间没有空格。

vim /etc/exports
/nfsfile 192.168.10.*(rw,sync,root_squash)
第4步:

启动和启用 NFS 服务程序。由于在使用 NFS 服务进行文件共享之前,需要使 用 RPC(Remote Procedure Call,远程过程调用)服务将 NFS 服务器的 IP 地址和端口号等信 息发送给客户端。因此,在启动 NFS 服务之前,还需要顺带重启并启用 rpcbind 服务程序, 并将这两个服务一并加入开机启动项

# systemctl restart rpcbind 
# systemctl enable rpcbind 
# systemctl start nfs-server 
# systemctl enable nfs-server 

# systemctl enable --now n
NFS的挂载

showmount 命令中可用的参数以及作用

参数 作用

-e 显示 NFS 服务器的共享列表

-a 显示本机挂载的文件资源的情况

-v 显示版本号

showmount -e 192.168.130.88 #显示NTF共享列表

客户端创建一个挂载目录。使用 mount 命令并结合-t 参数,指定要挂载的文 件系统的类型,并在命令后面写上服务器的 IP 地址、服务器上的共享目录以及要挂载到本地 系统(即客户端)的目录。

# mkdir /nfsfile    #建立文件夹
 mount -t nfs 192.168.10.10:/nfsfile /nfsfile   
 #进行挂载

挂载成功后就应该能够顺利地看到在执行前面的操作时写入的文件内容了。如果希望 NFS 文件共享服务能一直有效,则需要将其写入到 fstab 文件中:

[root@linuxprobe ~]# cat /nfsfile/readme 
welcome to linuxprobe.com 
[root@linuxprobe ~]# vim /etc/fstab 
# 
# /etc/fstab 
# Created by anaconda on Wed May 4 19:26:23 2017 
# 
# Accessible filesystems, by reference, are maintained under '/dev/disk' 
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info 
# 
/dev/mapper/rhel-root / xfs defaults 1 1 
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2 
/dev/mapper /rhel-swap swap swap defaults 0 0 
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0
#最后一行为添加的内容
autofs 自动挂载服务
yum install autofs

修改配置文件

vim /etc/auto.master

在子配置文件中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。

例如,要把光盘设备挂载到/media/iso 目录中,可将挂载目录写为 iso,而-ftype 为文件系统格式参 数,iso9660 为光盘设备格式,ro、nosuid 及 nodev 为光盘设备具体的权限参数,/dev/cdrom 则是 定义要挂载的设备名称。配置完成后再顺手将 autofs 服务程序启动并加入到系统启动项中:

# vim /etc/iso.misc 
iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
#对子配置文件的配置
systemctl start autofs #重启服务
 systemctl enable autofs #添加到启动项

接下来将发生一件非常有趣的事情。我们先查看当前的光盘设备挂载情况,确认光盘设备没 有被挂载上,而且/media 目录中根本就没有 iso 子目录。但是,我们却可以使用 cd 命令切换到这 个 iso 子目录中,而且光盘设备会被立即自动挂载上。我们也就能顺利查看光盘内的内容了

df -h
cd /media
ls
 cd iso
ls -l

使用 BIND 提供域名解析服务

DNS 域名解析服务

主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与 IP 地址之间的对 应关系。

从服务器:从主服务器中获得域名与 IP 地址的对应关系并进行维护,以防主服务器 宕机等情况。

缓存服务器:通过向其他域名解析服务器查询获得域名与 IP 地址的对应关系,并 将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。

安装 bind 服务程序

yum insatll bind_chroot

DHCP服务

部署 dhcpd 服务程序

安装dhcp

yum install dhcp

或者

yum insatll dhcp-*

查看 dhcpd 服务程序的配置文件内容。

cat /etc/dhcp.dhcp.conf

dhcpd 服务程序配置文件中使用的常见参数以及作用
image.png

自动管理 IP 地址

在确认 DHCP 服务器的 IP 地址等网络信息配置妥当后就可以配置 dhcpd 服务程序了。请 注意,在配置 dhcpd 服务程序时,配置文件中的每行参数后面都需要以分号(;)结尾,这是 规定

vim /etc/dhcp/dhcpd.conf 
ddns-update-style none; 
ignore client-updates; 
subnet 192.168.10.0 netmask 255.255.255.0 { 
range 192.168.10.50 192.168.10.150; 
option subnet-mask 255.255.255.0; 
option routers 192.168.10.1; 
option domain-name "zhansgan.com"; 
option domain-name-servers 192.168.10.1; 
default-lease-time 21600; 
max-lease-time 43200; 
}

** dhcpd 服务程序配置文件中使用的参数以及作用 **
image.png
在红帽认证考试以及生产环境中,都需要把配置过的 dhcpd 服务加入到开机启动项中,以确保 当服务器下次开机后 dhcpd 服务依然能自动启动,并顺利地为客户端分配 IP 地址等信息。

systemctl start dhcpd 
systemctl enable dhcpd 

image.png

分配固定 IP 地址

在 DHCP 协议中有个术语是“预约”,它用来确保局域网中特定的设备总是获取到固定的 IP 地址。换句话说,就是 dhcpd 服务程序会把某个 IP 地址私藏下来,只将其用于相匹配的特定设备。 要想把某个 IP 地址与某台主机进行绑定,就需要用到这台主机的 MAC 地址。MAC 地址是网 卡上面的一串独立的标识符,具备唯一性,因此不会存在冲突的情况,
image.png
在 Linux 系统或 Windows 系统中,都可以通过查看网卡的状态来获知主机的 MAC 地址。 在 dhcpd 服务程序的配置文件中,按照如下格式将 IP 地址与 MAC 地址进行绑定。
image.png
如果不方便查看主机的 MAC 地址,该怎么办呢?
查看日志文件,就可以获悉主机的 MAC 地址了

tail -f /var/log/messages 

在 Linux 系统中,MAC 地址的间隔符则变成了冒号(:)。

vim /etc/dhcp/dhcpd.conf 
 1 ddns-update-style none; 
 2 ignore client-updates; 
 3 subnet 192.168.10.0 netmask 255.255.255.0 { 
 4 range 192.168.10.50 192.168.10.150; 
 5 option subnet-mask 255.255.255.0; 
 6 option routers 192.168.10.1; 
 7 option domain-name "linuxprobe.com"; 
 8 option domain-name-servers 192.168.10.1; 
 9 default-lease-time 21600; 
 10 max-lease-time 43200; 
11 host linuxprobe { 
12 hardware ethernet 00:0c:29:27:c6:12; 
13 fixed-address 192.168.10.88; 
 14 }
 15 }

确认参数填写正确后就可以保存退出配置文件,然后就可以重启 dhcpd 服务程序了。

systemctl restart dhcpd

使用 Postifx 与 Dovecot 部署邮件系统

电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有下面这些。

¾ 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出 的电子邮件,占用服务器的 25/TCP 端口。

¾ 邮局协议版本 3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服 务器的 110/TCP 端口。

¾ Internet 消息访问协议版本 4(Internet Message Access Protocol 4):用于在本地主 机上访问邮件,占用服务器的 143/TCP 端口。

部署基础的电子邮件系统

第1步:配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致

 vim /etc/hostname

hostname 

第2步:清空 iptables 防火墙默认策略,并保存策略状态,避免因防火墙中默认存在的 策略阻止了客户端 DNS 解析域名及收发邮件:

iptables -F 
service iptables save

第3步:为电子邮件系统提供域名解析

vim   /etc/named.conf 
systemctl restart named 
systemctl enable named

配置 Postfix 服务程序

第1步:安装 Postfix 服务程序。这一步在 RHEL7 系统中是多余的。刘遄老师之所以还 要写上这一步骤,其目的是让大家在学完本书之后不但能掌握 RHEL 系统,还能立即上手 Fedora、CentOS 等主流 Linux 系统。这样,既然这些系统没有默认安装 Postfix 服务程序,我 们也可以自行搞定。在安装完 Postfix 服务程序后,需要禁用 iptables 防火墙,否则外部用户 无法访问电子邮件系统。

 yum install postfix
 
 systemctl disable iptables 

第2步:配置 Postfix 服务程序。
:::tips
/etc/ postfix/main.cf
:::
** Postfix 服务程序主配置文件中的重要参数 **
image.png
在 Postfix 服务程序的主配置文件中,总计需要修改 5 处。首先是在第 76 行定义一个名 为 myhostname 的变量,用来保存服务器的主机名称

vim /etc/postfix/main.cf
68 # INTERNET HOST AND DOMAIN NAMES 
69 # 
70 # The myhostname parameter specifies the internet hostname of this 
71 # mail system. The default is to use the fully-qualified domain name 
72 # from gethostname(). $myhostname is used as a default value for many 
73 # other configuration parameters. 
74 # 
75 #myhostname = host.domain.tld 
76 myhostname = mail.zhansgan.com

在第 83 行定义一个名为 mydomain 的变量,用来保存邮件域的名称

78 # The mydomain parameter specifies the local internet domain name. 
79 # The default is to use $myhostname minus the first component. 
80 # $mydomain is used as a default value for many other configuration 
81 # parameters. 
82 # 
83 mydomain = zhangsan.com

在第 99 行调用前面的 mydomain 变量,用来定义发出邮件的域。调用变量的好处是避免 重复写入信息,以及便于日后统一修改

85 # SENDING MAIL 
86 # 
87 # The myorigin parameter specifies the domain that locally-posted 
88 # mail appears to come from. The default is to append $myhostname, 
89 # which is fine for small sites. If you run a domain with multiple 
90 # machines, you should (1) change this to $mydomain and (2) set up 
91 # a domain-wide alias database that aliases each user to 
92 # user@that.users.mailhost. 
93 # 
94 # For the sake of consistency between sender and recipient addresses, 
95 # myorigin also specifies the default domain name that is appended 
96 # to recipient addresses that have no @domain part. 
97 # 
98 #myorigin = $myhostname 
99 myorigin = $mydomain

第 4 处修改是在第 116 行定义网卡监听地址。可以指定要使用服务器的哪些 IP 地址对外 提供电子邮件服务;也可以干脆写成 all,代表所有 IP 地址都能提供电子邮件服务

103 # The inet_interfaces parameter specifies the network interface 
104 # addresses that this mail system receives mail on. By default, 
105 # the software claims all active interfaces on the machine. The 
106 # parameter also controls delivery of mail to user@[ip.address]. 
107 # 
108 # See also the proxy_interfaces parameter, for network addresses that 
109 # are forwarded to us via a proxy or network address translator. 
110 # 
111 # Note: you need to stop/start Postfix when this parameter changes. 
112 # 
113 #inet_interfaces = all 
114 #inet_interfaces = $myhostname 
115 #inet_interfaces = $myhostname, localhost 
116 inet_interfaces = all

最后一处修改是在第 164 行定义可接收邮件的主机名或域名列表。这里可以直接调 用前面定义好的 myhostname 和 mydomain 变量(如果不想调用变量,也可以直接调用变 量中的值):

162 # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS". 
163 # 
164 mydestination = $myhostname , $mydomain 
165 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 
166 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, 

第3步:创建电子邮件系统的登录账户。Postfix 与 vsftpd 服务程序一样,都可以调用本 地系统的账户和密码,因此在本地系统创建常规账户即可。最后重启配置妥当的 postfix 服务 程序,并将其添加到开机启动项中。

[root@centos ~] # useradd boss 
[root@lcentos ~] # echo "linuxprobe" | passwd --stdin boss 
Changing password for user boss. passwd: all authentication tokens updated 
successfully. 
[root@centos ~] # systemctl restart postfix 
[root@centos ~] # systemctl enable postfix 
ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user. 
target.wants/postfix.service' 

配置 Dovecot 服务程序

第1步:安装 Dovecot 服务程序软件包。大家可自行配置 Yum 软件仓库、挂载光盘镜像 到指定目录,然后输入要安装的 dovecot 软件包名称即可:

yum install dovecot

第2步:配置部署 Dovecot 服务程序。在 Dovecot 服务程序的主配置文件中进行如下修 改。首先是第 24 行,把 Dovecot 服务程序支持的电子邮件协议修改为 imap、pop3 和 lmtp。 然后在这一行下面添加一行参数,允许用户使用明文进行密码验证。之所以这样操作,是因 为 Dovecot 服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登录, 而由于当前还没有加密系统,因此需要添加该参数来允许用户的明文登录

[root@centos ~] # vim /etc/dovecot/dovecot.conf 
………………省略部分输出信息……………… 
23 # Protocols we want to be serving. 
24 protocols = imap pop3 lmtp 
25 disable_plaintext_auth = no 
………………省略部分输出信息……………… 

在主配置文件中的第 48 行,设置允许登录的网段地址,也就是说我们可以在这里限制只有 来自于某个网段的用户才能使用电子邮件系统。如果想允许所有人都能使用,则不用修改本参数:

44 # Space separated list of trusted network ranges. Connections from these 
45 # IPs are allowed to override their IP addresses and ports (for logging and 
46 # for authentication checks). disable_plaintext_auth is also ignored for 
47 # these networks. Typically you'd specify your IMAP proxy servers here. 
48 login_trusted_networks = 192.168.10.0/24

第3步:配置邮件格式与存储路径。在 Dovecot 服务程序单独的子配置文件中,定义一 个路径,用于指定要将收到的邮件存放到服务器本地的哪个位置。
这个路径默认已经定义好 了,我们只需要将该配置文件中第 24 行前面的井号(#)删除即可

[root@centos ~] # vim /etc/dovecot/conf.d/10-mail.conf 
1 ## 
2 ## Mailbox locations and namespaces 
3 ## 
4 # Location for users' mailboxes. The default is empty, which means that Dovecot 
5 # tries to find the mailboxes automatically. This won't work if the user 
6 # doesn't yet have any mail, so you should explicitly tell Dovecot the full 
7 # location. 
8 # 
9 # If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u) 
10 # isn't enough. You'll also need to tell Dovecot where the other mailboxes are 
11 # kept. This is called the "root mail directory", and it must be the first 
12 # path given in the mail_location setting. 
13 # 
14 # There are a few special variables you can use, eg.: 
15 # 
16 # %u - username 
17 # %n - user part in user@domain, same as %u if there's no domain 
18 # %d - domain part in user@domain, empty if there's no domain 
19 # %h - home directory 
20 # 
21 # See doc/wiki/Variables.txt for full list. Some examples: 
22 # 
23 # mail_location = maildir:~/Maildir 
24 mail_location = mbox:~/mail:INBOX=/var/mail/%u
25 # mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n 

然后切换到配置 Postfix 服务程序时创建的 boss 账户,并在家目录中建立用于保存邮件的 目录。记得要重启 Dovecot 服务并将其添加到开机启动项中。

[root@centos ~] # su - boss 
Last login: Sat Aug 15 16:15:58 CST 2017 on pts/1 
[boss@mail ~]$ mkdir -p mail/.imap/INBOX 
[boss@mail ~]$ exit 
[root@centos ~] # systemctl restart dovecot 
[root@centos ~] # systemctl enable dovecot 
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user. 
target.wants/dovecot.service'

使用 Squid 部署代理缓存服务

Squid 服务程序

quid服务程序是一款在类Unix系统中最为流行的高性能代理服务软件,通常会被当作网站的前置缓存服务,用于替代用户向网站服务器请求页面数据并进行缓存,通俗来讲,Squid服务程序会接收用户的请求,然后自动去下载指定数据(如网页)并存储在服务器内,当以后的用户再来请求相同数据时,则直接将刚刚储存在服务器本地的数据交给用户,减少了用户的等待时间。
Squid服务程序配置起来相对简单,效率高、支持如HTTP、FTP、SSL等多种协议的数据缓存,还支持基于ACL访问控制列表和ARL访问权限列表功能的内容过滤与权限管理功能,禁止用户访问存在威胁或不适宜的网站资源,保证内网安全的同时还整体的提高了客户机的访问速度,帮助节省网络带宽,尤其适合安装在内存大、硬盘转速快的服务器上。
image.png
从作用上分为正向代理和反向代理:
正向代理让用户可以通过Squid服务程序获取网站页面等数据,具体工作形式又分为标准代理模式与透明代理模式。
标准正向代理模式:
将网站的数据缓存在服务器本地,提高数据资源被再次访问时的效率,但用户必需在上网时指定代理服务器的IP地址与端口号,否则将不使用Squid服务。
透明正向代理模式:
功能作用与标准正向代理模式完全相同,但用户不需要指定代理服务器的IP地址与端口号,所以这种代理服务对于用户来讲是完全透明的。
image.png
反向代理则是为了降低网站服务器负载而设计的,反向代理服务器负责回应用户对原始网站服务器的静态页面请求,即如果反向代理服务器中正巧有用户要访问的静态资源则直接将缓存的内容发送给用户,减少了对原始服务器的部分数据资源请求。
image.png
所以对于正向代理一般用于企业的局域网内,让员工通过Squid服务程序来代理上网,不但能节省网络带宽资源还能限制访问的页面,而反向代理则大多搭建在网站架构中,用于缓存网站的静态数据(如图片、HTML静态网页、JS、CSS框架文件等)。

配置Squid服务程序

本小节将为大家演示如何部署Squid服务的正向代理与反向代理,首先我们需要再添加一块网卡设备(桥接模式):
image.png
按照下面的表单配置IP地址:

主机名称 操作系统 IP地址
服务端 红帽RHEL7操作系统 外网卡:桥接DHCP模式
内网卡:192.168.10.10
用户端 微软Windows7操作系统 192.168.10.20

测试是否能够访问互联网:

[root@centos ~]# ping zhangsan.com 
PING www.l.com (162.159.211.33) 56(84) bytes of data. 64 bytes from 162.159.211.33: icmp_seq=1 ttl=45 time=166 ms 64 bytes from 162.159.211.33: icmp_seq=2 ttl=45 time=168 ms 64 bytes from 162.159.211.33: icmp_seq=3 ttl=45 time=167 ms 64 bytes from 162.159.211.33: icmp_seq=4 ttl=45 time=166 ms ^C --- www.linuxprobe.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3006ms rtt min/avg/max/mdev = 166.361/167.039/168.109/0.836 ms 

安装squid服务程序:
[root@centos ~]# yum install squid Loaded plugins: langpacks, product-id, subscription-manager ………………省略部分安装过程……………… Installing: squid x86_64 7:3.3.8-11.el7 rhel7 2.6 M Installing for dependencies: libecap x86_64 0.2.0-8.el7 rhel7 20 k perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 rhel7 32 k perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 rhel7 57 k perl-DBI x86_64 1.627-4.el7 rhel7 802 k perl-Data-Dumper x86_64 2.145-3.el7 rhel7 47 k perl-Digest noarch 1.17-245.el7 rhel7 23 k perl-Digest-MD5 x86_64 2.52-3.el7 rhel7 30 k perl-IO-Compress noarch 2.061-2.el7 rhel7 260 k perl-Net-Daemon noarch 0.48-5.el7 rhel7 51 k perl-PlRPC noarch 0.2020-14.el7 rhel7 36 k ………………省略部分安装过程……………… Complete!

squid服务程序的主要文件

主服务程序 /usr/sbin/squid
配置文件目录 /etc/squid
主配置文件 /etc/squid/squid.conf
访问日志文件 /var/log/squid/access.log
缓存日志文件 /var/log/squid/cache.log

squid服务程序中常用的参数

参数 作用
http_port 3128 监听的端口号。
cache_mem 64M 内存缓冲区的大小。
cache_dir ufs /var/spool/squid 2000 16 256 硬盘缓冲区的大小。
cache_effective_user squid 设置缓存的有效用户。
cache_effective_group squid 设置缓存的有效用户组。
dns_nameservers IP地址 一般不设置,用服务器默认的DNS地址。
cache_access_log /var/log/squid/access.log 访问日志文件的保存路径。
cache_log /var/log/squid/cache.log 缓存日志文件的保存路径。
visible_hostname linuxprobe.com 设置Squid服务主机的名称。

启动squid服务程序并加入到开机启动项:
[root@centos ~]# systemctl restart squid
[root@centos ~]# systemctl enable squid
ln -s ‘/usr/lib/systemd/system/squid.service’ ‘/etc/systemd/system/multi-user.target.wants/squid.service’

正向代理

当Squid服务程序顺利启动后,默认即可使用标准正向代理模式啦,在Windows7系统中打开浏览器后依次点击:
image.png
在网络选项中点击“连接”→“局域网设置”:
image.png
填写Squid服务器的IP地址与端口号
image.png
尝试访问网站:
image.png
Squid服务程序默认会占用3128、3401与4827端口,我们也可以将端口号修改为其他的哦, 编辑配置文件(修改第59行):
[root@centos ~]# vim /etc/squid/squid.conf http_port 10000
使用setsebool命令来限制squid服务只能使用自定义的端口号:
[root@centos~]# setsebool -P squid_connect_any 0
查看当前SElinux允许的服务端口:
[root@centos ~]# semanage port -l | grep -w -i squid_port_t squid_port_t tcp 3128, 3401, 4827 squid_port_t udp 3401, 4827
添加SELinux对10000端口的允许策略:
[root@centos~]# semanage port -a -t squid_port_t -p tcp 10000
[root@centos~]# semanage port -l | grep -w -i squid_port_t squid_port_t tcp 10000, 3128, 3401, 4827 squid_port_t udp 3401, 4827
重启squid服务程序后即可生效:
[root@centos ~]# systemctl restart squid

透明正向代理

如果要想实现透明正向代理,则必需将用户的网关IP指向Squid服务器,而此后便无需再修改浏览器选项:
image.png
尝试访问网站失败:
image.png
在命令提示符中ping下域名:
ping www.linuxprobe.com Ping 请求找不到主机 www.linuxprobe.com。请检查该名称,然后重试。
原来Squid服务程序是不支持DNS解析代理的,这个就需要配置SNAT啦。如果忘记SNAT技术了,没关系,回去再看下防火墙的章节吧,-o 参数后面写外网出口的网卡名称:
[root@centos~]# iptables -t nat -A POSTROUTING -p udp –dport 53 -o eno33554968 -j MASQUERADE
开启Ipv4的转发策略:
[root@centos ~]# echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf [root@linuxprobe ~]# sysctl -p net.ipv4.ip_forward = 1
再次尝试Ping下网站域名:
ping www.linuxprobe.com
正在 Ping www.linuxprobe.com [116.31.127.233]
具有 32 字节的数据: 请求超时。
请求超时。 请求超时。 请求超时。
116.31.127.233 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
不错哦~现在DNS已经能够正常工作啦,来配置透明正向代理吧,编辑配置文件:
[root@centos ~]# vim /etc/squid/squid.conf //在第59行后面添加参数transparent **http_port 3128 transparent **
判断配置文件是否有错误(会有很多输出值):
[root@centos ~]# squid -k parse
重新启动squid服务程序:
[root@centos ~]# systemctl restart squid
将用户对80端口的请求转发至3128端口:
[root@centos ~]# iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-port 3128
[root@centos ~]# iptables -t nat -R PREROUTING 1 -i eno33554968 -p tcp –dport 80 -j REDIRECT –to-port 3128
快去客户机尝试访问网站吧:
image.png

反向代理

反向代理的作用是将网站中的静态资源本地化,也就是将一部分本应该由原始服务器处理的请求交给Squid缓存服务处理。
编辑Squid服务程序的配置文件(正向代理与反向代理不能同时使用,请还原您前面修改过的参数):
[root@centos~]# vim /etc/squid/squid.conf
//第59行,修改格式为:http_port Squid服务器地址:监听端口号 vhost http_port 192.168.10.10:80 vhost
//第60行,添加格式为:cache_peer 原网站服务器地址 parent 服务器端口号 0 originserver cache_peer 106.184.1.125 parent 80 0 originserver
然后使用客户机去访问网站:
image.png

ACL访问控制

Squid服务的ACL访问控制是非常有用的功能,可以根据特定条件来进行数据缓存或限制用户的访问,ACL元素的定义语法为:
acl aclname acltype string acl aclname acltype “file”
src定义来源地址(即用户的客户机IP地址):
acl aclname src ip-address/netmask acl aclname src addr1-addr2/netmask
dst定义目标地址(即用户请求的网站IP地址):
acl aclname dst ip-address/netmask
port用于指定访问端口:
acl aclname port 80 1024 acl aclname port 0-1024
url_regex用于限制网址中的关键词:
acl aclname url_regex [-i] pattern
proto用于定义要代理的协议:
acl aclname proto HTTP FTP
method用于指定请求的方法:
acl aclname method GET POST
访问控制列表由多个规则条目组成的,根据指定的条件来允许或限制访问请求,匹配顺序会由上至下,一旦匹配则立即结束,通常会在控制列表的最下面写上“deny all”或者“allow all”来避免安全隐患。
仅允许192.168.10.20的主机使用本地Squid服务,拒绝其余主机:
acl client src 192.168.10.20 http_access allow client http_access deny all
image.png
拒绝客户机使用代理服务器访问带有关键词“linux”的网站:
acl deny_keyword url_regex -i linux http_access deny deny_keyword
image.png
拒绝客户机使用代理服务器访问《Linux就该这么学》的网站:
acl deny_url url_regex http://www.linuxprobe.com http_access deny deny_url
image.png
禁止客户机使用代理服务器下载以mp3与rar为后缀的文件:
acl badfile urlpath_regex -i .mp3$ .rar$ http_access deny badfile
image.png

使用 iSCSI 服务部署网络存储

iSCSI 技术概述

硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对 服务器的整体性能造成影响。第 6 章、第 7 章讲解的硬盘存储结构、RAID 磁盘阵列技术 以及 LVM 技术等都是用于存储设备的技术,尽管这些技术有软件层面和硬件层面之分, 但是它们都旨在解决硬盘存储设备的读写速度问题,或者竭力保障存储数据的安全。 为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的 接口协议。
当前的硬盘接口类型主要有 IDE、SCSI 和 SATA 这 3 种。
IDE 是一种成熟稳定、价格便宜的并行传输接口。
SATA 是一种传输速度更快、数据校验更完整的串行传输接口。
SCSI 是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统 资源占用率低、转速高、传输速度快等优点

创建 RAID 磁盘阵列

首先在虚拟机中添加 4 块新硬盘,用于创建 RAID 5 磁盘阵列和备份盘
使用 mdadm 命令创建 RAID 磁盘阵列。其中,-Cv 参数为创建阵列并 显示过程,/dev/md0 为生成的阵列组名称,-n 3 参数为创建 RAID 5 磁盘阵列所需的硬盘个数, -l 5 参数为 RAID 磁盘阵列的级别,-x 1 参数为磁盘阵列的备份盘个数。在命令后面要逐一写 上使用的硬盘名称。

[root@
centos~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/ 
sdd /dev/sde 
mdadm: layout defaults to left-symmetric 
mdadm: layout defaults to left-symmetric 
mdadm: chunk size defaults to 512K 
mdadm: size set to 20954624K 
mdadm: Defaulting to version 1.2 metadata 
mdadm: array /dev/md0 started.

在上述命令成功执行之后,得到一块名称为/dev/md0 的新设备,这是一块 RAID 5 级别 的磁盘阵列,并且还有一块备份盘为硬盘数据保驾护航。

配置 iSCSI 服务端

image.png
第1步:配置好 Yum 软件仓库后安装 iSCSI 服务端程序以及配置命令工具。

yum -y install targetd targetcli 

安装完成后启动 iSCSI 的服务端程序 targetd,然后把这个服务程序加入到开机启动项中, 以便下次在服务器重启后依然能够为用户提供 iSCSI 共享存储资源服务

[root@centos~]# systemctl start targetd 
[root@centos ~]# systemctl enable targetd 
ln -s '/usr/lib/systemd/system/targetd.service' '/etc/systemd/system/multi-user. 
target.wants/targetd.service' 

第2步:配置 iSCSI 服务端共享资源。targetcli 是用于管理 iSCSI 服务端存储资源的专用 配置命令,它能够提供类似于 fdisk 命令的交互式配置功能,将 iSCSI 共享资源的配置内容抽 象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可
在执行 targetcli 命令后就能看到交互式的配置界面了。在该界面中可以使用很多 Linux 命令,比如利用 ls 查看目录参数的结构,使用 cd 切换到不同的目录中。/backstores/block 是 iSCSI 服务端配置共享设备的位置。我们需要把刚刚创建的 RAID 5 磁盘阵列 md0 文件加入到 配置共享设备的“资源池”中,并将该文件重新命名为 disk0,这样用户就不会知道是由服务 器中的哪块硬盘来提供共享存储资源,而只会看到一个名为 disk0 的存储设备

[root@centos ~]# targetcli 
Warning: Could not load preferences file /root/.targetcli/prefs.bin. 
targetcli shell version 2.1.fb34 
Copyright 2011-2013 by Datera, Inc and others. 
For help on commands, type 'help'. 
/> ls 
o- / ................................................................... [...] 
o- backstores ........................................................ [...] 
| o- block ............................................ [Storage Objects: 0] 
| o- fileio ........................................... [Storage Objects: 0] 
| o- pscsi ............................................ [Storage Objects: 0] 
| o- ramdisk .......................................... [Storage Objects: 0] 
o- iscsi ...................................................... [Targets: 0] 
o- loopback ................................................... [Targets: 0 
/> cd /backstores/block 
/backstores/block> create disk0 /dev/md0 
Created block storage object disk0 using /dev/md0. 
/backstores/block> cd / 
/> ls 
o- / ................... ............................................... [...] 
 o- backstores ........................................................ [...] 
 | o- block ........................................... [Storage Objects: 1] 
 | | o- disk0 .................. [/dev/md0 (40.0GiB) write-thru deactivated] 
 | o- fileio .......................................... [Storage Objects: 0] 
 | o- pscsi ........................................... [Storage Objects: 0] 
 | o- ramdisk ......................................... [Storage Objects: 0] 
 o- iscsi ..................................................... [Targets: 0] 
 o- loopback .................................................. [Targets: 0] 

第3步:创建 iSCSI target 名称及配置共享资源。iSCSI target 名称是由系统自动生成的, 这是一串用于描述共享资源的唯一字符串。稍后用户在扫描 iSCSI 服务端时即可看到这个字 符串,因此我们不需要记住它。系统在生成这个 target 名称后,还会在/iscsi 参数目录中创建 一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到 iSCSI 共享资 源池中的硬盘设备添加到这个新目录中,这样用户在登录 iSCSI 服务端后,即可默认使用这 硬盘设备提供的共享存储资源了

/> cd iscsi 
/iscsi> 
/iscsi> create 
Created target iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80.
Created TPG 1. 
/iscsi> cd iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80/ 
/iscsi/iqn.20....d497c356ad80> ls 
o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 .... [TPGs: 1] 
 o- tpg1 ............................................. [no-gen-acls, no-auth] 
 o- acls ........................................................ [ACLs: 0] 
 o- luns ........................................................ [LUNs: 0] 
 o- portals .................................................. [Portals: 0] 
/iscsi/iqn.20....d497c356ad80> cd tpg1/luns 
/iscsi/iqn.20...d80/tpg1/luns> create /backstores/block/disk0 
Created LUN 0.

第4步:设置访问控制列表(ACL)。iSCSI 协议是通过客户端名称进行验证的,也就是 说,用户在访问存储共享资源时不需要输入密码,只要 iSCSI 客户端的名称与服务端中设置 的访问控制列表中某一名称条目一致即可,因此需要在 iSCSI 服务端的配置文件中写入一串 能够验证用户信息的名称。acls 参数目录用于存放能够访问 iSCSI 服务端共享存储资源的客户 端名称。刘遄老师推荐在刚刚系统生成的 iSCSI target 后面追加上类似于:client 的参数,这样 既能保证客户端的名称具有唯一性,又非常便于管理和阅读

/iscsi/iqn.20...d80/tpg1/luns> cd .. 
/iscsi/iqn.20...c356ad80/tpg1> cd acls 
/iscsi/iqn.20...d80/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe. 
x8664:sn.d497c356ad80:client 
Created Node ACL for iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80: 
client 
Created mapped LUN 0. 

第5步:设置 iSCSI 服务端的监听 IP 地址和端口号。位于生产环境中的服务器上可能有 多块网卡,那么到底是由哪个网卡或 IP 地址对外提供共享存储资源呢?这就需要我们在配置 文件中手动定义 iSCSI 服务端的信息,即在 portals 参数目录中写上服务器的 IP 地址。接下来 将由系统自动开启服务器 192.168.10.10 的 3260 端口将向外提供 iSCSI 共享存储资源服务:

/iscsi/iqn.20...d80/tpg1/acls> cd .. 
/iscsi/iqn.20...c356ad80/tpg1> cd portals 
/iscsi/iqn.20.../tpg1/portals> create 192.168.10.10 
Using default IP port 3260 
Created network portal 192.168.10.10:3260.

第6步:配置妥当后检查配置信息,重启 iSCSI 服务端程序并配置防火墙策略。在参数 文件配置妥当后,可以浏览刚刚配置的信息,确保与下面的信息基本一致。在确认信息无误 后输入 exit 命令来退出配置。注意,千万不要习惯性地按 Ctrl + C 组合键结束进程,这样不 会保存配置文件,我们的工作也就白费了。最后重启 iSCSI 服务端程序,再设置 firewalld 防 火墙策略,使其放行 3260/tcp 端口号的流量

/iscsi/iqn.20.../tpg1/portals> ls / 
o- / ........................... [...] 
 o- backstores................. [...] 
 | o- block ................... [Storage Objects: 1] 
 | | o- disk0 ................. [/dev/md0 (40.0GiB) write-thru activated]
 | o- fileio .................. [Storage Objects: 0] 
 | o- pscsi ................... [Storage Objects: 0] 
 | o- ramdisk ................. [Storage Objects: 0] 
 o- iscsi ..................... [Targets: 1] 
 | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 ... [TPGs: 1] 
 | o- tpg1 .................. [no-gen-acls, no-auth] 
 | o- acls ............................................... [ACLs: 1] 
 | | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client 
 [Mapped LUNs: 1] 
 | | o- mapped_lun0 .......................... [lun0 block/disk0 (rw)] 
 o- luns .................... [LUNs: 1] 
 | | o- lun0 .............. [block/disk0 (/dev/md0)] 
 | o- portals ............. [Portals: 1] 
 | o- 192.168.10.10:3260 [OK]
 o- loopback .................. [Targets: 0] 
/> exit 
Global pref auto_save_on_exit=true 
Last 10 configs saved in /etc/target/backup. 
Configuration saved to /etc/target/saveconfig.json 
[root@centos ~]# systemctl restart targetd 
[root@centos ~]# firewall-cmd --permanent --add-port=3260/tcp 
success 
[root@centos ~]# firewall-cmd --reload 
success

配置 Linux 客户端

[root@centos ~]# yum install iscsi-initiator-utils 
Loaded plugins: langpacks, product-id, subscription-manager 
Package iscsi-initiator-utils-6.2.0.873-21.el7.x86_64 already installed and 
latest version 
Nothing to do

把服务端的访问控制列表名称填写进 来,然后重启客户端 iscsid 服务程序并将其加入到开机启动项中:

[root@centos ~]# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client 
[root@centos~]# systemctl restart iscsid 
[root@centos ~]# systemctl enable iscsid 
ln -s '/usr/lib/systemd/system/iscsid.service' '/etc/systemd/system/multi-user. 
target.wants/iscsid.service'

iSCSI 客户端访问并使用共享存储资源的步骤很简单,只需要记住刘遄老师的一个小口 诀“先发现,再登录,最后挂载并使用”。iscsiadm 是用于管理、查询、插入、更新或删除 iSCSI 数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程 iSCSI 服务端,然后 查看找到的服务端上有哪些可用的共享存储资源。其中,-m discovery 参数的目的是扫描并发 现可用的存储资源,-t st 参数为执行扫描操作的类型,-p 192.168.10.10 参数为 iSCSI 服务端的 IP 地址

[root@centos ~]# iscsiadm -m discovery -t st -p 192.168.10.10 
192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 

在使用 iscsiadm 命令发现了远程服务器上可用的存储资源后,接下来准备登录 iSCSI 服 务端。其中,-m node 参数为将客户端所在主机作为一台节点服务器,-T iqn.2003-01. org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 参数为要使用的存储资源(大家可以直接复制 前面命令中扫描发现的结果,以免录入错误),-p 192.168.10.10 参数依然为对方 iSCSI 服务端 的 IP 地址。最后使用–login 或-l 参数进行登录验证

[root@centos~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe. 
x8664:sn.d497c356ad80 -p 192.168.10.10 --login 
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe. 
x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] (multiple) 
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664: 
sn.d497c356ad80, portal: 192.168.10.10,3260] successful.

在 iSCSI 客户端成功登录之后,会在客户端主机上多出一块名为/dev/sdb 的设备

[root@centos ~]# file /dev/sdb 
/dev/sdb: block special

下面进入标准的磁盘操作流程。

[root@centos ~]# mkfs.xfs /dev/sdb 
log stripe unit (524288 bytes) is too large (maximum is 256KiB) 
log stripe unit adjusted to 32KiB 
meta-data=/dev/sdb isize=256 agcount=16, agsize=654720 blks 
 = sectsz=512 attr=2, projid32bit=1 
 = crc=0 
data = bsize=4096 blocks=10475520, imaxpct=25 
 = sunit=128 swidth=256 blks 
naming =version 2 bsize=4096 ascii-ci=0 ftype=0 
log =internal log bsize=4096 blocks=5120, version=2 
 = sectsz=512 sunit=8 blks, lazy-count=1 
realtime =none extsz=4096 blocks=0, rtextents=0 
[root@centos ~]# mkdir /iscsi 
[root@centos ~]# mount /dev/sdb /iscsi 
[root@centos ~]# df -h 
Filesystem Size Used Avail Use% Mounted on 
/dev/mapper/rhel-root 18G 3.4G 15G 20% / 
devtmpfs 734M 0 734M 0% /dev 
tmpfs 742M 176K 742M 1% /dev/shm 
tmpfs 742M 8.8M 734M 2% /run 
tmpfs 742M 0 742M 0% /sys/fs/cgroup 
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom 
/dev/sda1 497M 119M 379M 24% /boot 

从此以后,这个设备文件就如同是客户端本机主机上的硬盘那样工作。需要提醒大家的 是,由于 udev 服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使 用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中 的文件也将随之混乱。为了防止发生这样的问题,我们应该在/etc/fstab 配置文件中使用设备 的 UUID 唯一标识符进行挂载,这样,不论远程设备资源的识别顺序再怎么变化,系统也能 正确找到设备所对应的目录。 blkid 命令用于查看设备的名称、文件系统及 UUID。可以使用管道符进 行过滤,只显示与/dev/sdb 设备相关的信息:

[root@centos ~]# blkid | grep /dev/sdb 
/dev/sdb: UUID="eb9cbf2f-fce8-413a-b770-8b0f243e8ad6" TYPE="xfs"

由于 /dev/sdb 是一块网络存储设备,而 iSCSI 协议是基于 TCP/IP 网络传输数据的,因此必须在/etc/fstab 配置文件中添加上_netdev 参数,表示当系统联 网后再进行挂载操作,以免系统开机时间过长或开机失败

[root@centos~]# vim /etc/fstab 
# 
# /etc/fstab 
# Created by anaconda on Wed May 4 19:26:23 2017 
# 
# Accessible filesystems, by reference, are maintained under '/dev/disk' 
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info 
# 
/dev/mapper/rhel-root / xfs defaults 1 1 
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2 
/dev/mapper /rhel-swap swap swap defaults 0 0 
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /iscsi xfs defaults,_netdev 0 0

如果我们不再需要使用 iSCSI 共享设备资源了,可以用 iscsiadm 命令的-u 参数将其设备 卸载

root@centose ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe. 
x8664:sn.d497c356ad80 -u 
Logging out of session [sid: 7, target : iqn.2003-01.org.linux-iscsi.linuxprobe. 
x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] 
Logout of [sid: 7, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn. 
d497c356ad80,portal:192.168.10.10,3260] successful. 

原文地址:http://www.cnblogs.com/yutoujun/p/16914783.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性