RHCSA学习笔记(RHEL8) - Part2.RH134

Chapter Ⅰ 提高命令行生产率

SHELL脚本
#/bin/bash声明使用的shell翻译器

for循环

for VAR in LIST
do
	COMMAND1
	COMMAND2
done

实验1:显示host1-5

#! /bin/bash
for host in host{1..5}
do
  echo $host
done

实验2:显示包含kernel的软件包安装时间

#! /bin/bash
for PACKAGE in $(rpm -qa | grep kernel)
do
  echo "$PACKAGE was installed on $(date -d @$(rpm -q --qf "%{INSTALLTIME}" $PACKAGE))"
done

注:date -d 可以将天数转换为标准时间

IF判断
echo $? 返回非0,测试不成功;返回为0,测试成功

两种做判断的方法

test 1 -gt 2; echo $?
[[ 1 -gt 2 ]]; echo $?
[ 1 -gt 2 ]; echo $?

在这里插入图片描述
单层IF语句

if <CONDITION> ; then
	COMMAND1
else
	COMMAND2
fi

多层嵌套IF

if <CONDITION> ; then
	COMMAND1
elsif <CONDITION2> ; then
		COMMAND2
	else
		COMMAND3
fi

实验:判断部分服务是否运行

#! /bin/bash
for SERVICE in sshd chronyd httpd
do
  systemctl is-active $SERVICE > /dev/null
  if [ $? -eq 0 ]; then
    echo "$SERVICE is running"
  else
    echo "$SERVICE is dead"
  fi
done

正则表达式
示例文档内容:
cat
caaat
coot
cot
cut
c2t
dog
concatenate
dogma
category
educated
boondoggle
vindication
chilidog

选项 说明 表达式 匹配内容
. 匹配任意单个字符 c.t cat、cot、cut、c2t、concatenate、category、educated、vindication
* 前面的项目匹配零次或多次 ca*t cat、caaat、concatenate、category、educated、vindication
{n} 前面的项目匹配n次 ca{3}t caaat

grep -v:包含
grep -e:扩展匹配,grep -e cat -e dog file1
grep -A 2 -B 3 cat file1:在file1中查找cat字符串,同时输出前三行(Before)和后两行(After)
grep -i:忽略大小写

Chapter Ⅱ 计划将来的任务

工作场景:修改防火墙前,使用定时任务恢复防火墙配置,在出问题时可以在一定时间后自动恢复

at定时任务(一次性)
systemctl status atd
直接使用at命令设置一次性执行的指令,交互式输入(ctrl+d退出)

at now + 5min     # 5分钟后执行
at 17:35               # 17:35执行

at -l  或者 atq     # 查看at的任务列表
at -c JOBID         # 查看JOBID的任务详细信息

atrm JOBID         # 删除JOBID的任务

crontab定时任务(周期性)
crontab [ -u user ] { -l | -r | -e }
-u user 是指设定指定 user 的时程表;如果不使用 -u user 的话,就是表示设定自己的时程表。

f1 f2 f3 f4 f5 program
f1表示分钟;f2表示小时;f3表示一个月份中的第几日;f4表示月份;f5表示一个星期中的第几天;program表示要执行的任务
当f1为时表示每分钟要执行program,f2为时表示每小时都要执行程序,其余类推
当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从a到b小时都要执行,其余类推
当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n时表示每n小时个时间间隔执行一次,其余类推
当f1为a,b,c…时表示第a、b、c…分钟要执行,f2为a,b,c…时表示第a、b、c…个小时要执行,其余类推
RHCSA学习笔记(RHEL8) - Part2.RH134_第1张图片
• 只需要把相应的脚本放到/etc/cron.hourly、cron.daily、cron.weekly和cron.monthly的文件夹下,即可实现定时任务,而不需要编辑crontab配置文件
• /etc/cron.deny中配置的用户,不能使用定时任务(对root用户无效)

systemd提供的计时timer(周期性)
一般和其他服务结合使用,比如应用在清理临时文件
定时器systemd-tmpfiles-clean.timer:定义了多久运行一次定时器,以及定时到期后唤起哪个clean清理服务
清理服务systemd-tmpfiles:定义了清理的位置,以及多久未使用的文件会被清理
RHCSA学习笔记(RHEL8) - Part2.RH134_第2张图片
1、定时器
systemctl daemon-reload– 重新加载systemd的定时器配置文件(每个服务对应自己的timer定时器配置文件)

[root@localhost ~]# systemctl cat systemd-tmpfiles-clean.timer
# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

OnBootSec:开机后多久开始计时
OnUnitActiveSec:定时的时间间隔

2、清理服务
systemd-tmpfiles --create /etc/tmpfiles.d/tmp.conf–指定创建清理服务
systemd-tmpfiles --clean /etc/tmpfiles.d/tmp.conf–按照配置文件定义开始清理

Chapter Ⅲ 调优系统性能

系统调优tuned
systemctl status tuned

tuned-adm list或tuned-adm profile # 列出可用的优化列表
tuned-adm recommand # 显示推荐的优化配置
tuned-adm profile xxx # 设置优化配置为xxx
tuned-adm active # 显示当前在用的优化配置
tuned-adm off # 关闭系统调优

调优配置文件

调优配置文件 用途
balanced 性能和节能间的折衷
desktop 优化图形化界面的性能
latency-performance 侧重于延迟
network-latency 侧重于更低的网络延迟
network-throughput 侧重于网络吞吐量
powersave 省电,强制CPU尽可能使用最低的时钟频率
throughput-performance 侧重于吞吐量
virtual-guest 当系统在虚拟机上运行时,调优系统以获得最高性能
virtual-host 当系统当虚拟机的主机时,调优系统以获得最高性能
[root@localhost ~]# tuned-adm profile
Available profiles:
- balanced                    - General non-specialized tuned profile
- desktop                     - Optimize for the desktop use-case
- hpc-compute                 - Optimize for HPC compute workloads
- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- powersave                   - Optimize for low power consumption
- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest               - Optimize for running inside a virtual guest
- virtual-host                - Optimize for running KVM guests
Current active profile: virtual-guest

进程调优nice
进程调度程序针对不同的进程采用不同的调度策略,该策略为运行的进程指定相对优先级,这个优先级成为nice值
nice取值范围为-20(最高)到19(最低),默认值为0

  • nice值越高,表示优先级越低,该进程容易将其CPU使用量让给其他进程
  • nice值越低,表示优先级越高,该进程更加不倾向于让出CPU
  • 如果不存在资源争用,nice值没有意义

1、使用top查看运行进程的nice值
NI列显示进程的nice值,PR列显示其调度优先级(PR=NI+20)
RHCSA学习笔记(RHEL8) - Part2.RH134_第3张图片
2、使用ps查看进程的nice
ps axo pid,comm,nice,cls --sort=-nice
RHCSA学习笔记(RHEL8) - Part2.RH134_第4张图片
3、启动具有不同nice级别的进程
nice -n 数字 指令(默认为0)
在这里插入图片描述
4、更改现有进程的nice级别
renice -n 数字 PID

Chapter Ⅳ 使用ACL控制对文件的访问

单独对某个用户或组进行的文件访问权限控制

1、查看文件ACL
getfacl file
没有ACL的情况
RHCSA学习笔记(RHEL8) - Part2.RH134_第5张图片
有ACL的情况
RHCSA学习笔记(RHEL8) - Part2.RH134_第6张图片
2、查看目录ACL
getfacl directory
RHCSA学习笔记(RHEL8) - Part2.RH134_第7张图片
优先级
一般情况:所属者 > 所属组 > 其他(3个权限只有一个有效,判断一个权限满足后不会再判断后面的权限)
ACL情况:所属者 > ACL权限.用户 > 所属组 > ACL权限.组 > 其他(只要满足一个就不会往下判断)

3、修改ACL
setfacl -m u:devops:rwx,g:wheel:rw-,o::- 2.txt
也可以使用getfacl作为输入
getfacl 2.txt | setfacl --set-file=- 3.txt
其中–set-file选项可接受来自文件或stdin的输入,短划线字符(-)指定使用stdin

4、删除ACL
setfacl -x u:name,g:name file

5、默认权限
为了确保在目录中创建的文件和目录继承特定的ACL,需要在目录上使用默认ACL
setfacl -m d:u:name:rx directory

对父目录dir1设置默认权限,在里面新建子目录dir2,将继承父目录的默认权限
setfacl d:u:devops:- dir1

RHCSA学习笔记(RHEL8) - Part2.RH134_第8张图片
RHCSA学习笔记(RHEL8) - Part2.RH134_第9张图片
使用setfacl -k /home/student/dir1的默认权限后,在里面新建子目录dir22,将不再继承
RHCSA学习笔记(RHEL8) - Part2.RH134_第10张图片

Chapter Ⅴ 管理SELinux安全性

SELinux(Security Enhanced Linux):控制进程可以访问哪些文件或目录
三种模式 = { e n f o r c i n g :强制执行访问控制规则 p e r m i s s i v e :只监测发告警但不控制 d i s a b l e : S E L i n u x 关闭 三种模式=\left\{ \begin{matrix} enforcing:强制执行访问控制规则 \\ permissive:只监测发告警但不控制 \\ disable:SELinux关闭 \end{matrix} \right. 三种模式= enforcing:强制执行访问控制规则permissive:只监测发告警但不控制disableSELinux关闭

RHCSA学习笔记(RHEL8) - Part2.RH134_第11张图片

SELinux文件上下文
在这里插入图片描述
进程有个标签,文件也有标签,两者的标签匹配上了进程才可以访问文件
比如Apache的标签为httpd_t,/var/www/html的标签为httpd_sys_content_t,匹配上,所以apache进程可以访问该目录
RHCSA学习笔记(RHEL8) - Part2.RH134_第12张图片
查看进程的标签:ps auxZ或者 ps -ZC进程
查看文件或目录的标签:ls -Z或者ls -dZ
RHCSA学习笔记(RHEL8) - Part2.RH134_第13张图片
临时关闭SELinux

setenforce 0 关闭
setenforce 1 开启
getenforce 查询

永久关闭SELinux

/etc/selinux/config

临时修改标签

chcon -t 标签值 文件名

恢复默认值

restorecon -Rv 文件名

永久修改标签

semanage fcontext -at 标签值 文件名
semanage fcontext -l  查看
fcontext最常用的扩展正则表达式是(/.*)?,表示匹配目录及该目录中的所有内容

不同操作对标签值的影响

操作 标签值的变化
创建 继承父目录的标签值
复制 继承复制到的目录的标签值
剪切 保留原有标签值

实验:创建一个新目录,并将apache的访问目录指定这个目录,修改标签值查看curl访问结果
1、在/data下创建一个index.html,其标签继承了父目录的标签default_t
RHCSA学习笔记(RHEL8) - Part2.RH134_第14张图片
2、修改apache配置文件,将缺省目录指定在/data,并查询httpd进程的标签为httpd_t
RHCSA学习笔记(RHEL8) - Part2.RH134_第15张图片
3、在workstation上访问失败
RHCSA学习笔记(RHEL8) - Part2.RH134_第16张图片

4、修改/data/的SELinux属性
在这里插入图片描述
在这里插入图片描述
5、在workstation上再次访问,已经正常
RHCSA学习笔记(RHEL8) - Part2.RH134_第17张图片
SEBOOL值
部分系统自定义好的参数(比如FTP是否上传),SEBOOL和SELinux都允许的情况才可以
sebool可以自定义,但非常麻烦
查询:getsebool
临时关闭:setsebool virt_use_usb off
永久关闭:setsebool -P virt_use_usb off
查看sebool列表:semanage boolean -l

触发的SELinux日志
/var/log/messages,以sealert开头

Chapter Ⅵ 管理基本存储

1、分区方案
MBR:最多支持4个主分区,通过扩展分区最多可扩展到15个,大小最大为2TB
GPT:最多支持128个分区,大小最大为8ZB

2、parted分区命令

  • 向磁盘写入分区表
    写入MBR磁盘标签: parted /dev/sdb mklabel msdos
    写入GPT磁盘标签: parted /dev/sdb mklabel gpt

  • 创建分区
    parted /dev/sdb mkpart primary ext4 2048s 1000MB

    • primary:对于MBR分区,超过四个分区时,可以创建三个主分区和一个扩展分区,扩展分区上可以创建多个逻辑分区;对于GPT分区,指定分区的自定义名字即可
    • ext4:指示要在分区上创建的文件系统类型,并不会在分区上创建,仅仅作为指示
    • 2048s:起始值,s标识扇区,也可以使用MB、GB等,对于大多数磁盘而言,假设起始扇区为2048的倍数可以保证分区对齐,较为安全
    • 1000MB:分区的结束值

删除分区:parted /dev/sdb rm 2
查看分区:parted /dev/sdb print
打标记: parted /dev/sdb set 2 flag FLAGS

创建文件系统
mkfs.ext4
mkfs.xfs
临时挂载,用mount;永久挂载在/etc/fstab中修改(建议用UUID),挂载后,可以用mount /dev/sdb1的指令进行验证,通过systemctl daemon-reload加载fstab文件

lsblk -f可以查看文件系统,-p查看全路径
RHCSA学习笔记(RHEL8) - Part2.RH134_第18张图片
交换分区
在磁盘上划分出一部分空间,当内存不够用时,将此部分空间当作内存使用。
由于交换分区位于磁盘上,所以与RAM相比,交换会比较慢。虽然是用于增加系统RAM,但对于RAM不足以满足工作负载需求的问题,不应将交换空间视为可持续性的解决方案
RHCSA学习笔记(RHEL8) - Part2.RH134_第19张图片
将分区格式化成swap格式
mkswap /dev/sdb1

swapon /dev/sdb1在sdb1上开启交换分区
swapoff /dev/sdb1关闭sdb1的交换分区

swapon --show查看

/etc/fstab上永久生效
UUID swap swap defaults 0 0
注:第一个swap是挂载点,但交换分区没有挂载点,所以用swap字段占位

Chapter Ⅶ 管理逻辑卷

PV-VG-LV的关系
RHCSA学习笔记(RHEL8) - Part2.RH134_第20张图片
1、创建物理卷pvcreate
pvcreate会将物理卷分成若干固定大小的物理区块(PE),如4MB
pvdisplay
RHCSA学习笔记(RHEL8) - Part2.RH134_第21张图片
- PV NAME:映射到设备名称
- VG NAME:显示将PV分配到的卷组
- PV Size:显示PV的物理大小,包括任何不可用的空间
- PE Size:物理区块大小,是逻辑卷中可分配的最小大小
- Free PE:显示有多少PE单位可用于分配给新逻辑卷

2、创建卷组vgcreate
使用vgcreate将一个或多个物理卷PV结合为一个卷组VG
- VG Name:卷组的名称
- VG Size:存储池可用于逻辑卷分配的总大小
- Total PE:以PE单位表示的总大小
- Free PE/Size:显示VG中有多少空间可用于分配给新LV或扩展现有LV

3、创建逻辑卷lvcreate
使用lvcreate可根据VG中的可用物理块创建新的逻辑卷LV
lvcreate -n指定LV的名字
lvcreate -L指定LV的大小
lvcreate -l指定LV都少个PE

lvdisplay
RHCSA学习笔记(RHEL8) - Part2.RH134_第22张图片
- LV Path:显示逻辑卷的设备名称
- VG Name:显示从其分配LV的卷组
- LV Size:显示LV的总大小,使用文件系统工具确定可用空间喝数据存储的已用空间
- Current LE:显示此LV使用的逻辑区块数。LE通常映射到VG中的物理区块,并因此映射到物理卷

4、创建LV的文件系统
mkfs -t xfs /dev/mapper/vg01-lv01
mkfs -t xfs /dev/vg01/lv01
两种方式均可

逻辑卷的扩展
1、扩展卷组:vgextend
2、缩减卷组:pvreduce
3、扩展逻辑卷:lvextend

扩展完逻辑卷后,还需要调整文件系统大小
1、xfs:xfs_growfs /mnt/data(挂载点)
2、ext4: resize2fs /dev/vg01/lv01(逻辑卷)
注意:
xfs可扩,ext4可扩可缩

逻辑卷的迁移
pvmove 迁移PV 目的PV

Chapter Ⅷ 实施高级存储功能

Stratis
将物理磁盘划分成资源池,然后在上面做出多个文件系统,实现灵活管理
RHCSA学习笔记(RHEL8) - Part2.RH134_第23张图片

yum install stratisd stratis-cli

1、池
创建:stratis pool create test_pool /dev/sdb
增加:stratis pool add-data test_pool /dev/sdc
查看:stratis pool list

2、文件系统
创建:stratis filesystem create test_pool test_fs
查看:stratis filesystem list

VDO,虚拟数据优化器
两个内核模块:kvdo模块用于以透明的方式控制数据压缩;uds用于重复数据删除
RHCSA学习笔记(RHEL8) - Part2.RH134_第24张图片
安装vdo:yum install vdo kmod-kvdo
创建vdo卷:vdo create --name=vdo1 --device=/dev/vdd --vdoLogicalSize=50G
管理vdo卷:vdo start --name=vdo1
vdo stop --name=vdo1
vdo status --name=vdo1
查看统计信息:vdostats --human-readable

实验:通过向vdo卷内copy相同的文件副本,理解压缩和删除重复数据的概念
创建vdo_test卷后,压缩和删除重复的功能会自动开启
在这里插入图片描述
RHCSA学习笔记(RHEL8) - Part2.RH134_第25张图片
将/mnt/ 挂载到/dev/mapper/vdo_test上,并逐步将副本copy到此

初始状态下,vdo_test,总大小5G,已用3G(VDO保留),此时可用2G,压缩率99%
在这里插入图片描述
将副本1拷贝后,压缩率降至50%
RHCSA学习笔记(RHEL8) - Part2.RH134_第26张图片
将相同内容的副本2拷贝后,压缩率变为67%(因为副本1和副本2相同,所以vdo删除了重复的内容)
在这里插入图片描述
注:创建指定大小的文件,dd if=/dev/urandom of=/root/install.img bs=1M count=1024

永久挂载fstab
挂载选项 ,x-systemd.requires=vdo.service 意思为可延迟挂在文件系统,直到vdo.service启动为止

Chapter Ⅸ 访问网络附加存储

NFS,网络文件系统
- 服务端:共享目录
主配置文件:/etc/exports
自定义配置文件:/etc/exports.d/

/share_remote 172.25.250*(rw,sync,no_roo_squash) serverb(ro,root_squash)

/share_remote:共享的目录
172.25.250(rw,sync,no_root_squash)*:定义了172.25.250.*的访问者的权限
- no_root_squash:登录NFS主机使用分享目录的使用者,如果是root的话,那么对于这个分享的目录来说,他就具有root权限。极不安全,不建议使用
- root_squash:登录NFS主机使用分享目录的使用者如果是root时,那么这个使用者的权限会被压缩成为匿名使用者 nfsnobody,通常他的UDI和GID都会变成nobody这个系统账号的身份

使用exportfs -a使修改生效

防火墙修改:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd

- 客户端:挂载目录
配置文件/etc/nfs.conf
RHCSA学习笔记(RHEL8) - Part2.RH134_第27张图片

nfsconf --get nfsd tcp
nfsconf --set nfsd tcp
nfsconf --unset nfsd tcp

将挂载目录挂载到nfs共享目录上
mount serverb:/shares /mnt/public(mount nfs服务端:共享目录 挂载目录)

showmount命令用于查询NFS服务器的相关信息(showmount -e serverb)
-e或–exports:显示NFS服务器的共享目录

autofs,自动挂载网络附加存储
根据需要(进入目录)自动挂载NFS共享,并将在不再使用NFS共享时自动卸载共享

yum install autofs

主配置文件/etc/auto.master
自定义配置文件/etc/auto.master.d/

以自定义配置文件为例,在auto.master.d文件夹下,必须以.autofs作为扩展名;

/rhel	/etc/auto.test

/rhel为间接自动挂载的基础目录,/etc/auto.test包含挂载详细信息

/etc/auto.test,test反应了映射关系

user1	-rw,sync	workstation:/rhel/user1

安全挂载点是/rhel/user1;rw表示具有读/写权限;sync表示写入操作期间服务器会立即同步;最后一部分是服务端的挂载点

验证:
在未进入挂载点时,df -h看不到挂载点,cd进入后激活autofs,df -h可以看到挂载点
RHCSA学习笔记(RHEL8) - Part2.RH134_第28张图片

Chapter Ⅹ 控制启动过程

- 重启和关机
poweroff:停止所有的服务,卸载所有文件系统,然后关闭系统
halt:用于停止系统,与poweroff不通的是不会关闭系统,而是让系统进入能安全手动关闭的状态
reboot:停止所有的服务,卸载所有文件系统,然后重启系统
shutdown:默认一分钟后关机
shutdown -c :取消关机

- SYSTEMD Target

Target 用途
graphical.target 图形化
multi-user.target 命令行
rescue.target 救援模式
emergency.target 紧急模式

查看所有的Target:systemctl list-units --all --type=target
查看缺省的Target:systemctl get-default
设置缺省Target:systemctl set-default multi-user.target
切换至图形化:systemctl isolate grahpical.target

- 进入救援(rescue)模式
在启动内核界面,按e进入编辑模式,然后在启动参数处添加 systemd.unit=rescue.target,并按Ctrl+x启动
RHCSA学习笔记(RHEL8) - Part2.RH134_第29张图片
进入后输入root口令,通过mount查看,可以发现/根目录是ro权限
通过mount -o remount,rw /改为rw权限
RHCSA学习笔记(RHEL8) - Part2.RH134_第30张图片

- 进入紧急(emergence)模式
与救援模式类似,参数为systemd.unit=emergence.target;进入系统后,用mount查询,发现/根目录为只读权限,无法进行应急操作,可以下面的指令改为读写权限

mount -o remount,rw /

- 重置root密码
1、在启动参数上,末尾添加rd.break,按Ctrl+x启动

2、/sysroot为启动的临时根目录,以读写形式重新挂载该目录
mount -o remount,rw /sysroot
RHCSA学习笔记(RHEL8) - Part2.RH134_第31张图片
3、切换为chroot存放位置,其中/sysroot被视为文件系统树的根
chroot /sysroot

4、设置root密码
passwd root

5、将系统配置为在启动后自动执行完整SELinux重新标记
touch /.autorelabel

6、继续启动系统
键入两次exit或者按两次Ctrl+d
RHCSA学习笔记(RHEL8) - Part2.RH134_第32张图片

Chapter Ⅺ 管理网络安全

在CentOS 7及之前版本中,iptables也提供了类似firewalld的daemon,用户可以选择iptables或firewalld daemon其一。CentOS 8已弃用iptables,只用nftables。
nftables和iptables负责的应该属于数据包过滤框架,iptables实际由iptables、ip6tables、arptables和ebtables构成。
RHCSA学习笔记(RHEL8) - Part2.RH134_第33张图片
▪ 查看所有zone和默认zone
firewall-cmd --get-default-zone

[root@localhost ~]# firewall-cmd --get-default-zone
public

firewall-cmd --get-zones

[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

firewalld区域默认配置

区域名称 默认配置
trusted 允许所有流入流量
home 续费于传出流量相关,或与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量
internal 除非与传出流量相关,或与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量(一开始与home区域相同)
work 除非与传出流量相关,或与ssh、ipp-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量
public 除非与传出流量相关,或与ssh或dhcpv6-client预定义服务匹配,否则拒绝传入流量
external 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。通过此区域转发的IPv4传出流量将进行伪装,以使其看起来像是来自传出完了过接口的IPv4地址
dmz 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量
block 除非与传出流量相关,否则拒绝所有传入流量
drop 除非与传出流量相关,否则拒绝所有丢弃流量(甚至不产生包含ICMP错误的响应)

▪ 添加策略
firewall-cmd --permanent --add-port=9090/tcp

[root@localhost ~]# firewall-cmd --permanent --add-
--add-forward-port=                --add-lockdown-whitelist-command=  --add-masquerade                   --add-service=
--add-icmp-block=                  --add-lockdown-whitelist-context=  --add-port=                        --add-source=
--add-icmp-block-inversion         --add-lockdown-whitelist-uid=      --add-protocol=                    --add-source-port=
--add-interface=                   --add-lockdown-whitelist-user=     --add-rich-rule=

▪ 重新加载
firewall-cmd --reload

// 先移除默认开启的没有访问限制的ssh服务
firewall-cmd --permanent --remove-service=ssh
// 添加复杂规则,只允许指定IP段访问22端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'

Chapter Ⅻ Podman

容器发展历史

  • LXC(Linux containers):最早的容器技术,Google 公司
  • docker:以 LXC 为基础,开源、最为流行的容器技术,docker 公司(初创公司)
  • rkt(Rocket):CoreOS公司主导,得到了Redhat、Google、Vmware等公司的支持
  • Podman:开源容器技术,区别于 docker,进程化和非 root 管理,Redhat 公司
  • Kubernetes:对容器的管理技术,通过标准化的 CRI 接口对容器进行管理,目前已经宣布不再支持 docker;Google 公司
  • OpenShift:管理和编排 Kubernetes ,Redhat 公司
    RHCSA学习笔记(RHEL8) - Part2.RH134_第34张图片
    RHCSA学习笔记(RHEL8) - Part2.RH134_第35张图片
    容器化与虚拟化的区别
    容器和虚拟机与硬件和底层操作系统交互方式不同
    ▪ 虚拟化:
    • 可以在单一硬件平台运行多操作系统
    • 使用 hypervisor 将硬件拆分成多个虚拟硬件,允许多个操作系统并行运行
    • 需要完整的操作系统来支持应用运行
    • 隔离性更好
      ▪ 容器化:
    • 在操作系统上直接运行,容器之间分享硬件和操作资源,容器中应用轻量化和快速并行运行
    • 共享操作系统内核,将容器化的应用程序进程与系统的其余部分隔离,并使用与该内核兼容的任何软件
    • 比虚拟化要求更少的硬件资源,可以快速启动和停止,减少存储需求;可快速(上千台)批量秒级部署
    • 代码与系统分离,升级方便
    • 适用于测试/迭代上线/版本演进
    • 网络互通问题存在问题(上千台容器共有网络的分配;上千台容器间的网络互访 等)
      RHCSA学习笔记(RHEL8) - Part2.RH134_第36张图片
      容器核心技术
    • Control Groups(cgroups):资源管理
    • NameSpace:进程隔离
    • SElinux和Seccomp(Secure Computing mode)加强安全边界

容器利用 NameSpace 为资源(如进程、网络通信和卷)提供独立的、隔离的环境;在容器中运行的进程与主机上的所有其他进程是隔离的
RHCSA学习笔记(RHEL8) - Part2.RH134_第37张图片
容器核心要素

  • images(映像):提供已经封装的文件,容器都是从 images 复制而来
    • 自己做
    • 官方提供:registry.hub.docker.com
    • 第三方:redhat、阿里等
  • Tag(标记):用于区分 image 版本,如果 image 名称中不含有 tag,将默认使用 latest tag

registry_name/user_name/image_name:tag

  • registry_name:是存储 image 的 registry 名称,一般是registry 的域名
  • user_name:是 image 所属的用户或组织
  • image_name:必须在用户 userspace 中唯一

Podman
含义:Pod Manager
三大组件
RHCSA学习笔记(RHEL8) - Part2.RH134_第38张图片

配置步骤
1、安装 container 软件包

yum  module  install  container-tools

2、修改配置文件

vim /etc/containers/registries.conf
# 使用本地库
[registries.search]
registries = [' registry.access.redhat.com', ' registry.redhat.io']

# 使用远程库,insecure表示不做安全检查
[registries.search]
registries = ['workstation.lab.example.com:5000']
[registries.insecure]
registries = ['workstation.lab.example.com:5000']

3、查看库
本地库:podman images
远程库:podman search workstation.lab.example.com:5000/

4、下载 PULL 容器映像 images
使用 Podman pull 从 registry 中下载 images,应始终使用完整的 image 名称
podman pull 命令从 registry 中提取指定的 image 并保存到本地
下载后可以通过 podman images 查看下载到本地 image
RHCSA学习笔记(RHEL8) - Part2.RH134_第39张图片
也可以通过 podman rmi IMAGE-ID 删除下载后的映像
在这里插入图片描述
5、运行容器

podman run --privileged -d  --name registry  -p 5000:5000 -v /var/lib/registry/:/var/lib/registry 

主要参数列表

参数 说明
–privilege Give extended privileges to container
-d 后台运行
Run container in background and print container ID
-it 将终端分配给容器,并允许向其发送键盘指令
–name 容器名称
-p 本地端口:容器端口
Publish a container’s port, or a range of ports, to the host (default [])
-v 本地目录:容器目录
Bind mount a volume into the container (default [])
-e 传递环境变量
Set environment variables in container

5、停止/删除容器
podman stop 容器id
podman rm 容器id

6、查看容器运行情况
查看所有容器:podman ps -a
查看运行容器:podman ps
RHCSA学习笔记(RHEL8) - Part2.RH134_第40张图片
容器随系统启动
▪ 当数据库或 web 服务器等服务部署为容器时,通常希望这些容器与服务器一起自启动
▪ 通过为无根(rootless)容器创建 systemd user unit 文件,可使 systemctl 命令管理,类似常规服务
▪ 如果容器以 rootless 模式运行,可以用非 root 账户管理这些服务,提高安全性
▪ 要对许多基于容器的应用程序和服务进行更复杂的伸缩和编排,可使用基于 Kubernetes 的企业编排平台,如 RedHat Openshift Container Platform(少量容器的不需要扩展的小型部署可以使用 systemd unit管理)

配置步骤:
1、定义 systemd user service
创建 ~/.config/systemd/user/ 目录来存储 unit 文件
2、创建 unit 文件
podman generate --name web --files --new
–name container_name:指定容器名称,用作模板来生成 unit 文件;生成文件名称为 containers-container_name.service
–files:指示 Podman 在当前目录中生成 unit 文件;没有这个选项,Podman 将在标准输出中显示该文件
–new:指示 Podman 配置 systemd 服务,以便在服务启动时创建容器,并在服务停止时删除。在这种模式下,容器是临时的,通过需要持久存储来保存数据。没有 --new 选项,Podman 配置服务启动和停止现有的容器,而不删除
3、使用 systemd 启动和停止容器
systemd监视容器状态,并在它们失败时重新启动它们,不要使用 podman 命令来启动或停止这些容器,否则会干扰systemd监视

systemctl --user start container-web
systemctl --user stop container-web
systemctl --user status container-web

4、激活用户实例
激活的用户实例 systemd user unit,只有在用户登录会话后,才会运行。
如果要让用户实例 systemd user unit 随系统自动启动,需要再执行命令:

loginctl enable-linger

配置系统和用户服务

Storing custom unit files System services /etc/systemd/system/unit.service
User services ~/.config/systemd/user/unit.service
Reloading unit files System services # systemctl daemon-reload
User services $ systemctl --user daemon-reload
Starting and stopping a service System services # systemctl start UNIT
# systemctl stop UNIT
User services $ systemctl --user start UNIT
$ systemctl --user stop UNIT
Starting a service when the machine starts System services # systemctl enable UNIT
User services $ loginctl enable-linger
$ systemctl --user enable UNIT

你可能感兴趣的:(运维,linux)