LinuxProbe-Exercise


第〇章

1.将系统默认的运行目标修改为“多用户的文本界面”模式,可直接用ln命令把多用户模式目标文件链接到/etc/systemd/system/目录:
[root@linuxprobe ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  2. 服务的启动、重启、停止、重载、查看状态等常用命令:
老系统命令 新系统命令 作用
service foo start systemctl start httpd 启动服务
service foo restart systemctl restart httpd 重启服务
service foo stop systemctl stop httpd 停止服务
service foo reload systemctl reload httpd 重新加载配置文件(不终止服务)
service foo status systemctl status httpd 查看服务状态
3.服务开机启动、不启动、查看各级别下服务启动状态等常用命令
老系统命令 新系统命令 作用
chkconfig foo on systemctl enable httpd 开机自动启动
chkconfig foo off systemctl disable httpd 开机不自动启动
chkconfig foo systemctl is-enabled httpd 查看特定服务是否为开机自启动
chkconfig --list systemctl list-unit-files --type=httpd 查看各个级别下服务的启动与禁用情况

第二章

1.man命令中常用按键以及作用
按键 作用
空格键 向下翻一页
PaGe down 向下翻一页
PaGe up 向上翻一页
home 直接前往首页
end 直接前往尾页
/ 从上至下搜索某个关键词,如“/linux”
? 从下至上搜索某个关键词,如“?linux”
n 定位到下一个搜索到的关键词
N 定位到上一个搜索到的关键词
q 退出帮助文档
2.man命令中帮助信息的结构以及意义
结构名称 代表意义
NAME 命令的名称
SYNOPSIS 参数的大致使用方法
DESCRIPTION 介绍说明
EXAMPLES 演示(附带简单说明)
OVERVIEW 概述
DEFAULTS 默认的功能
OPTIONS 具体的可用选项(带介绍)
ENVIRONMENT 环境变量
FILES 用到的文件
SEE ALSO 相关的资料
HISTORY 维护历史与联系方式
3.ps命令中的参数以及作用
参数 作用
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程
4.grep命令中的参数及其作用
参数 作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择——仅列出没有“关键词”的行。
5.在整个文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录中
[root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;

第三章

1.输入重定向中用到的符号及其作用
符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2
2.输出重定向中用到的符号及其作用
符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
3.通过标准输出重定向将man bash命令原本要输出到屏幕的信息写入到文件readme.txt中,然后显示readme.txt文件中的内容
[root@linuxprobe ~]# man bash > readme.txt [root@linuxprobe ~]# cat readme.txt
  4.首先通过覆盖写入模式向readme.txt文件写入多行数据(该文件中已包含上一个实验的man命令信息)
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt 
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt 
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt 
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt 
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt 
[root@linuxprobe ~]# cat readme.txt Welcome to LinuxProbe.Com
  再通过追加写入模式向readme.txt文件写入一次数据,然后在执行cat命令之后
[root@linuxprobe ~]# echo "Quality linux learning materials" >> readme.txt 
[root@linuxprobe ~]# cat readme.txt Welcome to LinuxProbe.Com Quality linux learning materials
  5.查看当前目录中某个文件的信息,这里以linuxprobe文件为例。由于这个文件是真实存在的,因此使用标准输出即可将原本要输出到屏幕的信息写入到文件中,而错误的输出重定向则依然把信息输出到了屏幕上。
[root@linuxprobe ~]# ls -l linuxprobe > /root/stderr.txt 
[root@linuxprobe ~]# ls -l linuxprobe 2> /root/stderr.txt
-rw-r--r--. 1 root root 0 Mar 1 13:30 linuxprobe
  以一个不存在的文件进行实验演示
[root@linuxprobe ~]# ls -l xxxxxx > /root/stderr.txt 
cannot access xxxxxx: No such file or directory 
[root@linuxprobe ~]# ls -l xxxxxx 2> /root/stderr.txt [root@linuxprobe ~]# cat /root/stderr.txt 
ls: cannot access xxxxxx: No such file or directory
  6.不区分标准输出和错误输出,只要命令有输出信息则全部追加写入到文件中
[root@linuxprobe ~]# ls -l linuxprobe &>> readme.txt 
[root@linuxprobe ~]# ls -l xxxxxx &>> readme.txt -rw-r--r--. 1 root root 0 Mar 1 13:30 linuxprobe cannot access xxxxxx: No such file or directory
  7.使用输入重定向把readme.txt文件导入给wc -l命令,统计一下文件中的内容行数
[root@linuxprobe ~]# wc -l < readme.txt 2

第四章

1.搭建并配置软件仓库   进入/etc/yum.repos.d目录后创建软件仓库的配置文件:
[root@linuxprobe ~]# cd /etc/yum.repos.d/ 
[root@linuxprobe yum.repos.d]# vim rhel8.repo
  创建挂载点后进行挂载操作,并设置成开机自动挂载
[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom 
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
  尝试使用软件仓库的dnf命令来安装Web服务,软件包名称为httpd,安装后出现“Complete!”则代表配置正确
[root@linuxprobe ~]# dnf install httpd -y
  2.假设在每周一、三、五的凌晨3:25,都需要使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。   使用crontab -e命令来创建计划任务,为自己创建计划任务时无须使用-u参数。   crontab –e命令的具体实现效果和crontab -l命令的结果如下
[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
  3.如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。   例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨1点自动清空/tmp目录内的所有文件。   尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询
[root@linuxprobe ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@linuxprobe ~]# crontab -e
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0  1 * * 1-5   /usr/bin/rm -rf /tmp/*

第五章

1.用户的解释器被设置为nologin,则代表该用户不能登录到系统中
[root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxdown
[root@linuxprobe ~]# id linuxdown
uid=8888(linuxdown) gid=8888(linuxdown) groups=8888(linuxdown)
2.将用户linuxprobe加入到root用户组中
[root@linuxprobe ~]# usermod -G root linuxprobe
3.文件的隐藏属性                                               chattr命令中的参数及其作用
参数 作用
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容在变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A 不再修改这个文件或目录的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
x 可以直接访问压缩文件中的内容
 
[root@linuxprobe ~]# echo "for Test" > linuxprobe
[root@linuxprobe ~]# chattr +a linuxprobe
[root@linuxprobe ~]# rm linuxprobe
rm: remove regular file ‘linuxprobe’? y
rm: cannot remove ‘linuxprobe’: Operation not permitted

第六章

第七章

1.部署RAID磁盘阵列。   其中,-C参数代表创建一个RAID阵列卡;     -v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;     -n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;     -l 10参数则代表RAID 10方案;     最后再加上4块硬盘设备的名称
[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  可以用-D参数进行查看。也可以用-Q参数查看简要信息
[root@linuxprobe ~]# mdadm -Q /dev/md0
  把制作好的RAID磁盘阵列格式化为Ext4格式
[root@linuxprobe ~]# mkfs.ext4 /dev/md0
  创建挂载点,将硬盘设备进行挂载操作
[root@linuxprobe ~]# mkdir /RAID
[root@linuxprobe ~]# mount /dev/md0 /RAID
[root@linuxprobe ~]# df -h
  查看/dev/md0磁盘阵列设备的详细信息,确认RAID级别(Raid Level)、阵列大小(Array Size)和总硬盘数(Total Devices)都是否正确
[root@linuxprobe ~]# mdadm -D /dev/md0
  如果想让创建好的RAID磁盘阵列能够一直提供服务,不会因每次的重启操作而取消,那么一定要记得将信息添加到/etc/fstab文件中
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
[root@linuxprobe ~]# cat /etc/fstab
...
2. 损坏磁盘阵列及修复   在确认有一块物理硬盘设备出现损坏而不能再继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态
[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@linuxprobe ~]# mdadm -D /dev/md0
  刚刚使用的-f参数是让硬盘模拟损坏的效果。为了能够彻底地将故障盘移除,还要再执行一步操作
[root@linuxprobe ~]# mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
  更换硬盘后再次使用-a参数进行添加操作,系统默认会自动开始数据的同步工作。使用-D参数即可看到整个过程和进度(用百分比表示)
[root@linuxprobe ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
[root@linuxprobe ~]# mdadm -D /dev/md0
3.创建一个RAID 5磁盘阵列+备份盘。   参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候,就能看到有一块备份盘在等待中了。
[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
...
[root@linuxprobe ~]# mdadm -D /dev/md0
...
  现在将部署好的RAID 5磁盘阵列格式化为Ext4文件格式,然后挂载到目录上,之后就能够使用了
[root@linuxprobe ~]# mkfs.ext4 /dev/md0
...
[root@linuxprobe ~]# mkdir /RAID
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
  由3块硬盘组成的RAID 5磁盘阵列,其对应的可用空间是n-1,也就是40GB。   4.根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成Ext4文件系统后挂载使用。   第1步:让新添加的两块硬盘设备支持LVM技术。
[root@linuxprobe ~]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
  第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。 [root@linuxprobe ~]# vgcreate storage /dev/sdb /dev/sdc Volume group "storage" successfully created [root@linuxprobe ~]# vgdisplay ...   第3步:再切割出一个约为150MB的逻辑卷设备。     在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。
[root@linuxprobe ~]# lvcreate -n vo -l 37 storage
 Logical volume "vo" created.
[root@linuxprobe ~]# lvdisplay 
...
  第4步:把生成好的逻辑卷进行格式化,然后挂载使用。 Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。
[root@linuxprobe ~]# mkfs.ext4 /dev/storage/vo 
...
[root@linuxprobe ~]# mkdir /linuxprobe
[root@linuxprobe ~]# mount /dev/storage/vo /linuxprobe
  第5步:查看挂载状态,并写入配置文件,使其永久生效。
[root@linuxprobe ~]# df -h
...
[root@linuxprobe ~]# echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab
[root@linuxprobe ~]# cat /etc/fstab
...
5.扩容逻辑卷   扩容前请一定要记得卸载设备和挂载点的关联。
[root@linuxprobe ~]# umount /linuxprobe
  第1步:把上一个实验中的逻辑卷vo扩展至290MB。
[root@linuxprobe ~]# lvextend -L 290M /dev/storage/vo
...
  第2步:检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。
[root@linuxprobe ~]# e2fsck -f /dev/storage/vo
  第3步:重置设备在系统中的容量。刚刚是对LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。
[root@linuxprobe ~]# resize2fs /dev/storage/vo
  第4步:重新挂载硬盘设备并查看挂载状态。
[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
...
6.缩小逻辑卷   在执行缩容操作前记得先把文件系统卸载掉。
[root@linuxprobe ~]# umount /linuxprobe
  第1步:检查文件系统的完整性。
[root@linuxprobe ~]# e2fsck -f /dev/storage/vo 
...
  第2步:通知系统内核将逻辑卷vo的容量减小到120MB。
[root@linuxprobe ~]# resize2fs /dev/storage/vo 120M
  第3步:将LV逻辑卷的容量修改为120M。
[root@linuxprobe ~]# lvreduce -L 120M /dev/storage/vo
  第4步:重新挂载文件系统并查看系统状态。
[root@linuxprobe ~]# mount -a 
[root@linuxprobe ~]# df -h 
...
  7.逻辑卷快照 在正式操作前,先看看VG(卷组)中的容量是否够用:
[root@linuxprobe ~]# vgdisplay
第1步:使使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。   另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作,稍后数据也会还原到这个相应的设备上。
[root@linuxprobe ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo Logical volume "SNAP" created 
[root@linuxprobe ~]# lvdisplay ...
第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了。
[root@linuxprobe ~]# dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M 1+0 records in 1+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 0.312057 s, 336 MB/s 
[root@linuxprobe ~]# lvdisplay ...
第3步:为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。 lvconvert命令用于管理逻辑卷的快照,语法格式为“lvconvert [参数]快照卷名称”。
[root@linuxprobe ~]# umount /linuxprobe 
[root@linuxprobe ~]# lvconvert --merge /dev/storage/SNAP Merging of volume storage/SNAP started. storage/vo: Merged: 36.41% storage/vo: Merged: 100.00%
第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。
[root@linuxprobe ~]# mount -a 
[root@linuxprobe ~]# cd /linuxprobe/ 
[root@linuxprobe linuxprobe]# ls lost+found readme.txt [root@linuxprobe linuxprobe]# cat readme.txt 
Welcome to Linuxprobe.com
8. 删除逻辑卷 第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
[root@linuxprobe ~]# umount /linuxprobe 
[root@linuxprobe ~]# vim /etc/fstab
第2步:删除逻辑卷设备,需要输入y来确认操作。
[root@linuxprobe ~]# lvremove /dev/storage/vo
第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
[root@linuxprobe ~]# vgremove storage Volume group "storage" successfully removed
第4步:删除物理卷设备。
[root@linuxprobe ~]# pvremove /dev/sdb /dev/sdc 
Labels on physical volume "/dev/sdb" successfully wiped. 
Labels on physical volume "/dev/sdc" successfully wiped.

第八章

Iptables

1.在iptables命令后添加-L参数查看已有的防火墙规则链。
[root@linuxprobe ~]# iptables -L
2.在iptables命令后添加-F参数清空已有的防火墙规则链。
[root@linuxprobe ~]# iptables -F
3.把INPUT规则链的默认策略设置为拒绝。
[root@linuxprobe ~]# iptables -P INPUT DROP
4.向INPUT链中添加允许ICMP流量进入的策略规则。
[root@linuxprobe ~]# iptables -I INPUT -p icmp -j ACCEPT
5.删除INPUT规则链中刚刚加入的那条策略(允许ICMP流量),并把默认策略设置为允许。
[root@linuxprobe ~]# iptables -D INPUT 1 
[root@linuxprobe ~]# iptables -P INPUT ACCEPT
6.将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量。 要对某台主机进行匹配,可直接写出它的IP地址;如需对网段进行匹配,则需要写为子网掩码的形式(比如192.168.10.0/24)。
[root@linuxprobe ~]# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT 
[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
7.向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则。
[root@linuxprobe ~]# iptables -I INPUT -p tcp --dport 12345 -j REJECT 
[root@linuxprobe ~]# iptables -I INPUT -p udp --dport 12345 -j REJECT
8.向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口(Web服务)的策略规则。
[root@linuxprobe ~]# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
9.向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则。 前面在添加防火墙策略时,使用的是-I参数,它默认会把规则添加到最上面的位置,因此优先级是最高的。如果工作中需要添加一条最后“兜底”的规则,那就用-A参数
[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT 
[root@linuxprobe ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
10.使用iptables命令配置的防火墙规则默认会在系统下一次重启时失效,如果想让配置的防火墙策略永久生效,还要执行保存命令
[root@linuxprobe ~]# iptables-save

FIrewalld

1.查看firewalld服务当前所使用的区域。
[root@linuxprobe ~]# firewall-cmd --get-default-zone public
2.查询指定网卡在firewalld服务中绑定的区域。
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=ens160 public
3.把网卡默认区域修改为external,并在系统重启后生效。
[root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface=ens160 The interface is under control of NetworkManager, setting zone to 'external'. 
success
[root@linuxprobe ~]# firewall-cmd --permanent --get-zone-of-interface=ens160
external
4.把firewalld服务的默认区域设置为public。 默认区域也叫全局配置,指的是对所有网卡都生效的配置,优先级较低。在下面的代码中可以看到,当前默认区域为public,而ens160网卡的区域为external。此时便是以网卡的区域名称为准。
[root@linuxprobe ~]# firewall-cmd --set-default-zone=public 
Warning: ZONE_ALREADY_SET: public success [root@linuxprobe ~]# firewall-cmd --get-default-zone public
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=ens160 externa
5.启动和关闭firewalld防火墙服务的应急状况模式。 使用--panic-on参数会立即切断一切网络连接,而使用--panic-off则会恢复网络连接。
[root@linuxprobe ~]# firewall-cmd --panic-on success 
[root@linuxprobe ~]# firewall-cmd --panic-off success
6.查询SSH和HTTPS协议的流量是否允许放行。
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh yes 
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https no
7.把HTTPS协议的流量设置为永久允许放行,并立即生效。
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https 
success 
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https 
no
不想重启服务器的话,就用--reload参数
[root@linuxprobe ~]# firewall-cmd --reload 
success 
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https 
yes
8.把HTTP协议的流量设置为永久拒绝,并立即生效。
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-service=http 
Warning: NOT_ENABLED: http success
[root@linuxprobe ~]# firewall-cmd --reload 
success
9.把访问8080和8081端口的流量策略设置为允许,但仅限当前生效。
[root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp 
success 
[root@linuxprobe ~]# firewall-cmd --zone=public --list-ports 8080-8081/tcp
10.把原本访问本机888端口的流量转发到22端口,要且求当前和长期均有效。
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10 
success 
[root@linuxprobe ~]# firewall-cmd --reload 
success
11.在firewalld服务中配置一条富规则,使其拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口)
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject" 
success 
[root@linuxprobe ~]# firewall-cmd --reload 
success

第九章

1.使用nmcli命令来配置网卡设备的绑定参数 创建出一个bond网卡 使用nmcli命令配置网络信息有一定的难度,所以咱们放到了第9章才开始讲解。首先使用如下命令创建一个bond网卡。其中,命令与参数的意思是创建一个类型为bond(绑定)、名称为bond0、网卡名为bond0的绑定设备,绑定模式为balance-rr:
[root@linuxprobe ~]# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=balance-rr" 
Connection 'bond0' (b37b720d-c5fa-43f8-8578-820d19811f32) 
 successfully added.
  向bond0添加从属网卡
[root@linuxprobe ~]# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname ens160 master bond0 
Connection 'bond0-port1' (8a2f77ee-cc92-4c11-9292-d577ccf8753d) successfully added. 
[root@linuxprobe ~]# nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname ens192 master bond0 
Connection 'bond0-port2' (b1ca9c47-3051-480a-9623-fbe4bf731a89) successfully added.
配置bond0设备的网卡信息
[root@linuxprobe ~]# nmcli connection modify bond0 ipv4.addresses 192.168.10.10/24 
[root@linuxprobe ~]# nmcli connection modify bond0 ipv4.gateway 192.168.10.1 
[root@linuxprobe ~]# nmcli connection modify bond0 ipv4.dns 192.168.10.1 
[root@linuxprobe ~]# nmcli connection modify bond0 ipv4.dns-search linuxprobe.com 
[root@linuxprobe ~]# nmcli connection modify bond0 ipv4.method manual
启动
[root@linuxprobe ~]# nmcli connection up bond0 
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/22) 
[root@linuxprobe ~]# nmcli device status ...
2.安全密钥验证 第1步:在客户端主机中生成“密钥对”,记住是客户端
[root@Client ~]# ssh-keygen
 ...
第2步:把客户端主机中生成的公钥文件传送至远程服务器。
[root@Client ~]# ssh-copy-id 192.168.10.10
第3步:对服务器进行设置,使其只允许密钥验证,拒绝传统的密码验证方式。记得在修改配置文件后保存并重启sshd服务程序
[root@Server ~]# vim /etc/ssh/sshd_config  
………………省略部分输出信息……………… 
70 # To disable tunneled clear text passwords, change to no here! 71 #PasswordAuthentication yes 
72 #PermitEmptyPasswords no 
73 PasswordAuthentication no 
74 
………………省略部分输出信息……………… 
[root@Server ~]# systemctl restart sshd
第4步:客户端尝试登录到服务器,此时无须输入密码也可成功登录
[root@Client ~]# ssh 192.168.10.10

第十章

1.基于IP地址 第1步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。
[root@linuxprobe ~]# mkdir -p /home/wwwroot/10 
[root@linuxprobe ~]# mkdir -p /home/wwwroot/20
[root@linuxprobe ~]# mkdir -p /home/wwwroot/30
[root@linuxprobe ~]# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html [root@linuxprobe ~]# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html [root@linuxprobe ~]# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html
第2步:从httpd服务的配置文件中大约第132行处开始,分别追加写入3个基于IP地址的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf 
………………省略部分输出信息……………… 
132 192.168.10.10> 
133 DocumentRoot /home/wwwroot/10 
134 ServerName www.linuxprobe.com 
135 10> 
136 AllowOverride None 
137 Require all granted 
138  
139     
140 192.168.10.20> 
141 DocumentRoot /home/wwwroot/20 
142 ServerName www.linuxcool.com 
143 20> 
144 AllowOverride None 
145 Require all granted 
146  
147     
148 192.168.10.30> 
149 DocumentRoot /home/wwwroot/30 
150 ServerName www.linuxdown.com 
151 30> 
152 AllowOverride None 
153 Require all granted 
154  
155  
………………省略部分输出信息……………… 
[root@linuxprobe ~]# systemctl restart httpd
第3步:此时访问网站,则会看到httpd服务程序的默认首页面中显示“权限不足”。手动把新的网站数据目录的SELinux安全上下文设置正确(见前文的实验),并使用restorecon命令让新设置的SELinux安全上下文立即生效。
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/* 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/* 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/* 
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot
2.基于主机域名 (这里以192.168.10.10为例) 第1步:手动定义IP地址与域名之间对应关系的配置文件,保存并退出后会立即生效。可以通过分别ping这些域名来验证域名是否已经成功解析为IP地址。
[root@linuxprobe ~]# vim /etc/hosts 
127.0.0.1 localhost 
localhost.localdomain 
localhost4 
localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 
localhost6.localdomain6 192.168.10.10 www.linuxprobe.com www.linuxcool.com www.linuxdown.com
第2步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。
[root@linuxprobe ~]# mkdir -p /home/wwwroot/linuxprobe 
[root@linuxprobe ~]# mkdir -p /home/wwwroot/linuxcool
[root@linuxprobe ~]# mkdir -p /home/wwwroot/linuxdown
[root@linuxprobe ~]# echo "www.linuxprobe.com" > /home/wwwroot/linuxprobe/index.html [root@linuxprobe ~]# echo "www.linuxcool.com" > /home/wwwroot/linuxcool/index.html [root@linuxprobe ~]# echo "www.linuxdown.com" > /home/wwwroot/linuxdown/index.html
第3步:从httpd服务的配置文件中大约第132行处开始,分别追加写入3个基于主机名的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf 
………………省略部分输出信息……………… 
132 192.168.10.10> 
133 Documentroot /home/wwwroot/linuxprobe 
134 ServerName www.linuxprobe.com 
135  
136 AllowOverride None 
137 Require all granted 
138  
139    
140 192.168.10.10> 
141 Documentroot /home/wwwroot/linuxcool 
142 ServerName www.linuxcool.com 
143  
144 AllowOverride None 
145 Require all granted 
146  
147    
148 192.168.10.10> 
149 Documentroot /home/wwwroot/linuxdown 
150 ServerName www.linuxdown.com 
151  
152 AllowOverride None 
153 Require all granted 
154  
155  
………………省略部分输出信息……………… 
[root@linuxprobe ~]# systemctl restart httpd
第4步:因为当前的网站数据目录还是在/home/wwwroot目录中,因此还是必须要正确设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合。最后记得用restorecon命令让新配置的SELinux安全上下文立即生效,这样就可以立即访问到虚拟主机网站了
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe/* 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool/* 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown/* 
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot
3.基于端口号 第1步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。
[root@linuxprobe ~]# mkdir -p /home/wwwroot/6111 
[root@linuxprobe ~]# mkdir -p /home/wwwroot/6222
[root@linuxprobe ~]# mkdir -p /home/wwwroot/6333
[root@linuxprobe ~]# echo "port:6111" > /home/wwwroot/6111/index.html [root@linuxprobe ~]# echo "port:6222" > /home/wwwroot/6222/index.html [root@linuxprobe ~]# echo "port:6333" > /home/wwwroot/6333/index.html
第2步:在httpd服务配置文件的第46行~48行分别添加用于监听6111、6222和6333端口的参数。
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf  
………………省略部分输出信息……………… 
37 # Listen: Allows you to bind Apache to specific IP addresses and/or 
38 # ports, instead of the default. See also the 
39 # directive. 
40 # 
41 # Change this to Listen on specific IP addresses as shown below to 
42 # prevent Apache from glomming onto all bound IP addresses. 
43 # 
44 #Listen 12.34.56.78:80 
45 Listen 80 
46 Listen 6111 
47 Listen 6222 
48 Listen 6333 
………………省略部分输出信息……………… 
第3步:从httpd服务的配置文件中大约第134行处开始,分别追加写入3个基于端口号的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf 
………………省略部分输出信息……………… 
134 192.168.10.10:6111> 
135 DocumentRoot /home/wwwroot/6111 
136 ServerName www.linuxprobe.com 
137 6111> 
138 AllowOverride None 
139 Require all granted 
140  
141  
142 192.168.10.10:6222> 
143 DocumentRoot /home/wwwroot/6222 
144 ServerName www.linuxcool.com 
145 6222> 
146 AllowOverride None 
147 Require all granted 
148  
149  
150 192.168.10.10:6333> 
151 DocumentRoot /home/wwwroot/6333 
152 ServerName www.linuxdown.com 
153 6333> 
154 AllowOverride None 
155 Require all granted 
156  
157 
 ………………省略部分输出信息………………
第4步:因为我们把网站数据目录存放在/home/wwwroot目录中,因此还是必须要正确设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合。最后记得用restorecon命令让新配置的SELinux安全上下文立即生效。
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/* 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/* 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333 
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/* 
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
可以使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表。
[root@linuxprobe ~]# semanage port -l | grep http 
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
第5步:SELinux允许的与HTTP协议相关的端口号中默认没有包含6111、6222和6333,因此需要将这3个端口号手动添加进去。该操作会立即生效,而且在系统重启过后依然有效。设置好后再重启httpd服务程序,然后就可以看到网页内容了。
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111 
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6333
[root@linuxprobe ~]# semanage port -l | grep http
4.Apache的访问控制 第1步:先在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含Successful单词的首页文件。
[root@linuxprobe ~]# mkdir /var/www/html/server 
[root@linuxprobe ~]# echo "Successful" > /var/www/html/server/index.html
第2步:打开httpd服务的配置文件,在第161行后面添加下述规则来限制源主机的访问。这段规则的含义是允许使用Firefox浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf 
………………省略部分输出信息……………… 
161 "/var/www/html/server"> 
162 SetEnvIf User-Agent "Firefox" ff=1 
163 Order allow,deny 
164 Allow from env=ff 
165  
………………省略部分输出信息……………… 
[root@linuxprobe ~]# systemctl restart httpd 
[root@linuxprobe ~]# firefox

第十一章

1.把FTP协议添加到firewalld服务的允许列表中
[root@linuxprobe ~]# iptables -F 
[root@linuxprobe ~]# iptables-save 
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=ftp success 
[root@linuxprobe ~]# firewall-cmd --reload success
2.向匿名用户开放的权限参数以及作用
参数 作用
anonymous_enable=YES 允许匿名访问模式
anon_umask=022 匿名用户上传文件的umask值
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户创建目录
anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录
 
[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf 
1 anonymous_enable=YES 
2 anon_umask=022 
3 anon_upload_enable=YES 
4 anon_mkdir_write_enable=YES 
5 anon_other_write_enable=YES 
6 local_enable=YES 
7 write_enable=YES 
8 local_umask=022 
9 dirmessage_enable=YES 
10 xferlog_enable=YES 
11 connect_from_port_20=YES 
12 xferlog_std_format=YES 
13 listen=NO 
14 listen_ipv6=YES 
15 pam_service_name=vsftpd 
16 userlist_enable=YES
3.本地用户模式使用的权限参数以及作用
参数 作用
anonymous_enable=NO 禁止匿名访问模式
local_enable=YES 允许本地用户模式
write_enable=YES 设置可写权限
local_umask=022 本地用户模式创建文件的umask值
userlist_deny=YES 启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_enable=YES 开启用户作用名单文件功能
 
[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf 
1 anonymous_enable=NO 
2 local_enable=YES 
3 write_enable=YES 
4 local_umask=022 
5 dirmessage_enable=YES 
6 xferlog_enable=YES 
7 connect_from_port_20=YES 
8 xferlog_std_format=YES 
9 listen=NO 
10 listen_ipv6=YES 
11 pam_service_name=vsftpd 
12 userlist_enable=YES
4.利用PAM文件进行认证时使用的参数以及作用
参数 作用
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 write_enable=YES 
4 guest_enable=YES 
5 guest_username=virtual 
6 allow_writeable_chroot=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

第十二章

第十三章

第十四章

自动管理IP地址 “机房运营部门:明天会有100名学员自带笔记本电脑来我司培训学习,请保证他们能够使用机房的本地DHCP服务器自动获取IP地址并正常上网”。    机房所用的网络地址以及参数信息
参数名称
默认租约时间 21600秒
最大租约时间 43200秒
IP地址范围 192.168.10.50~192.168.10.150
子网掩码 255.255.255.0
网关地址 192.168.10.1
DNS服务器地址 192.168.10.1
搜索域 linuxprobe.com
 
[root@linuxprobe ~]# 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 "linuxprobe.com"; 
option domain-name-servers 192.168.10.1; 
default-lease-time 21600; 
max-lease-time 43200; }

第十五章

第十六章

第十七章

第十八章

数据库的备份及恢复
[root@linuxprobe ~]# mysqldump -u root -p linuxprobe > /root/linuxprobeDB.dump

第十九章

第二十章