调试 SELinux
SELinux (Security Enhanced Linux)介绍
- SELinux 的主要作用是增强 Linux 系统的安全性, 通过安全策略设置系统应用软件及用户程序对系统文件目录的访问限制
- 配置文件的位置是
/etc/selinux/config
SELINUX=enforcing
SELinux 工作模式- enforcing: 强制模式:只要是违反策略的行动都会被禁止,并作为内核信息记录
- permissive: 允许模式:违反策略的行动不会被禁止,但是会提示警告信息
- disabled: 禁用模式:禁用 SELinux
SELINUXTYPE=targeted
SELinux 策略模式- targeted:针对网络服务限制较多,如 httpd、mysqld,dhcpd 等, 但针对本地限制较少,是预设的策略;
- minimum:由 target 修订而来,只针对选择的程序来保护
- mls:完整的 SELinux 限制,限制方面较为严格
- 使用
getenforce
命令可以查看 SELinux 的工作模式,setenforce 0
命令可以临时关闭 SELinux
- 在 SELinux 当中针对进程和系统资源定义了两个基本概念:域 (domin) 和 上下文 (context),进程和文件的信息必须一致才能通过SELinux检查
- 通过
ps -Z
命令来查看当前进程的域的信息, 也就是进程的 SELinux 信息 unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
- 通过
ll -Z
命令来查看文件上下文信息, 也就是文件的 SELinux 信息 system_u:object_r:admin_home_t:s0
- 第一段代表的是用户(user)
- system_u代表系统用户
- root代表root用户
- user_u代表普通用户
- unconfined_u代表非受限用户
- 第二段代表的是角色(role)
- object_r:代表该数据是文件或目录
- system_r:代表该数据是进程
- 第三段代表的是类型(type)或域(domain)
- admin_home_t
- httpd_sys_content_t
- 等3000多钟类型,我们可以使用
seinfo
命令查看SELinux中的所有类型
- 第四段代表的是灵敏度
- 通常用s0,s1,s2代表,数值越大,代表灵敏度越高
- 第五段代表类别,不一定需要拥有
- c0.c1023
- 第一段代表的是用户(user)
- 通过
防火墙介绍
- 防火墙的主要作用是保护网络连接安全性, linux 使用 netfilter 管理防火墙,
iptables
是它的管理工具, 但它的命令十分复杂,我们通常使用更人性化的工具例如firewalld
等工具管理防火墙, 不过其底层原理依然是调用iptables
, 此外还有ebtables
等以太网桥防火墙 (数据链路层)管理工具, 我们常说的防火墙通常指网络层防火墙 - 在Redhat系Linux的新版本中firewalld取代了iptables成为了新的默认防火墙管理工具,它的管理命令是
firewall-cmd
题目详解
非标准端口 82 上运行的 web 服务器在提供内容时遇到问题,根据需要调试并解决问题,使其满足这些条件满足以下要求:
- 系统上的Web 服务器能够提供/var/www/html 中所有现有的HTML 文件(注:不要删除或以其他方式改动现有的文件内容)
- Web 服务器在端口 82 上提供此内容
- Web 服务器在系统启动时自动启动
- 题目要求在82 端口提供服务, 因此要修改httpd的配置文件
vim /etc/httpd/conf/httpd.conf
- 将 Listen 80 改为 Listen 82
- SELinux 的默认开放端口没有 82, 因此需要添加允许端口
semanage port -l | grep http
列出 SELinux 开放的端口类型, 过滤出 http 类型semanage port -a -t http_port_t -p tcp 82
添加指定端口到 SELinux 规则中
- 查看 httpd 服务存放网页的目录的安全上下文
ll -Z /var/www/html/
会发现有一个文件的安全上下文配置不正确, 我们需要修改该文件的安全上下文semanage fcontext -d -t default_t /var/www/html/file1
删除指定的默认安全上下文semanage fcontext -a -t httpd_sys_content_t:s0 '/var/www/html(/.*)?'
添加指定的默认安全上下文, 使用正则表达式应用到所有文件和目录restorecon -Rv /var/www/html
修复此目录的安全上下文设置, 递归操作并显示过程
- 修改防火墙, 允许 http 服务与 82 端口通过
firewall-cmd --list-all
查看防火墙的设置firewall-cmd --add-service=http --permanent
添加指定类型, 此处已设置过不需要再设置firewall-cmd --add-port=82/tcp --permanent
添加指定端口到防火墙允许规则中, 并永久生效firewalld-cmd --reload
重新加载防火墙
- 重启 httpd 服务, 并设为开机自启
systemctl restart httpd&&systemctl enable httpd
配置Autofs
Autofs介绍
- 我们通常使用
mount
命令进行挂载存储介质,通过编辑/etc/fstab
实现永久挂载,但如果我们使用NFS等网络文件系统将会导致挂载磁盘后占用大量的服务器资源与网络资源 - Autofs 是 Linux 的自动挂载服务, 可以实现仅在用户使用该文件系统时才动态挂载磁盘, 节省资源消耗
/etc/auto.master
是autofs的主配置文件- 按照
父挂载目录 该挂载目录的子配置文件位置
的格式添加挂载信息- 例如
/media /etc/auto.nfs
- 父挂载目录是设备挂载位置的上一级目录,该目录不需要事先存在,autofs会自己创建,当autofs检测到我们访问了此父目录时,就会自动进行挂载操作
- 子配置文件是需要我们自己创建编辑的
- 例如
- 按照
/etc/auto.nfs
在子配置文件中,我们需要添加需要挂载的目录的详细信息- 按照
挂载目录 挂载文件类型及参数 :设备名称
的格式添加 - 例如
nfsd -fstype=nfs,vers=4,rw 192.168.12.100:/root/
代表将指定远程主机的root目录以nfs4格式,可读写权限 挂载到/media/nfsd下 RHEL8 -fstype=iso9660,ro,nosuid,nodev :/dev/sr0
代表将系统中的第一块光盘以只读等权限挂载到/mnt/RHEL8下
- 按照
题目详解
按照以下要求自动挂载远程用户的家目录,要求如下:
- materials.example.com(172.25.254.254) NFS的共享目录是/rhome,此文件系统包含为用户 remoteuser 预配置的家目录
- remoteuser1 的主目录是 materials.example.com:/rhome/remoteuser1
- remoteuser1 的主目录应该自动挂载到/rhome 下的/rhome/remoteuser1
- 主目录必须可供其用户写入
- remoteuser1 的密码是 flectrag
- 安装autofs服务
dnf -y install autofs
- 配置autofs主配置文件
vim /etc/auto.master
/rhome /etc/auto.nfs
添加题目指定的信息
- 编辑autofs的子配置文件
cp /etc/auto.misc /etc/auto.nfs
复制默认的配置文件作为子配置文件vim /etc/auto.nfs
remoteuser1 -fstype=nfs,vers=4,rw materials.example.com:/rhome/remoteuser1
添加题目指定的信息
- 重启 autofs 服务, 并设为开机自启
systemctl restart autofs && systemctl enable autofs
- 切换到remoteuser1用户下,验证配置是否成功
su - remoteuser1
无任何错误提示即代表配置成功df -Th
可以查看磁盘空间情况验证一下
创建VDO卷
Parted磁盘管理工具介绍
- 我们最常用的分区工具是
fdisk
,但fdisk只支持MBR分区,限制较大,与fdisk相似的gdisk
只支持GPT分区,而parted
命令既支持MBR也支持GPT分区格式 - 需要注意的是,parted 默认单位是MB (10^n) 而不是 fdisk 的默认单位即我们常说的MiB (2^n), 而且 parted 的修改操作是实时的,误操作时无法恢复比较危险,但这种模式比fdisk更适合写成脚本执行
基本命令
parted -l
查看分区情况parted /dev/sdb
对sdb磁盘进行分区unit
设置大小单位print
打印分区表mkpart
创建新分区Partition name? []?
设置分区名字,可以不设置File system type? [ext2]?
设置分区类型Start?
开始位置,要比已知的最后一个End位置大,可以用百分比表示End?
结束位置,减去开始位置就是创建的分区的可用大小- 有时候创建结束会提示
Warning: The resulting partition is not properly aligned for best performance
, 忽略警告可以正常创建, 出现这个问题的原因是分区时磁盘块和扇区没有对齐, 未对齐分区会导致磁盘性能会稍微损失一点, 关于磁盘分区如何对齐的计算十分复杂, 比较简单的方式是直接使用百分比输入 Start 位置和 End 位置
- 有时候创建结束会提示
rm number
删除分区quit
退出partedhelp
查看帮助信息
udevadm settle
同步分区表,确保udev设备管理器的所有操作完成
VDO卷介绍
- VDO(Virtual Data Optimize):虚拟数据优化器,通过压缩或删除存储设备上的数据来优化空间
- VDO包含两个模块
- uds模块会判断写入的数据是不是重复数据,如是重复数据的话不会写入,而是创建一个指向已有数据位置的指针,在日志文件中通常有大量的重复数据
- kvdo模块会对写入的内容进行压缩,以便于存储更多数据
- VDO特性
- VDO卷同样可以格式化为所需要的文件系统类型,然后作为LVM物理卷或网络文件系统使用
- VDO卷的逻辑大小可以大于实际块设备的物理大小,Redhat官方给出的建议为真实磁盘容量的3-10倍,依据使用情况而定
- 如果未指定逻辑大小,则会将实际物理大小视为卷的逻辑大小,这种方式能提高性能,但是会降低存储空间的使用效率
- 用户只能看到正在使用的逻辑空间大小,要查看磁盘的实际使用情况,需要使用
vdostatus -verbose
命令
题目讲解
根据如下要求,创建新的VDO卷:
- 使用未分区的磁盘
- 此VDO卷的名称为vdough
- 此VDO卷的逻辑大小为50G
- 此VDO卷使用xfs文件系统格式化
- 此VDO卷在系统启动时自动挂载到/vbread目录下
- 安装vdo服务
yum -y install vdo kmod-kvdo
- 创建vdo卷
lsblk
查看哪个磁盘是未分区的vdo create --name=vdough --device=/dev/vdc --vdoLogicalSize=50G
创建一个vdo卷,名字为vdough,设备为vdc,大小为50G- 如果创建错了,可以使用
vdo remove -n name
删除创建的VDO卷
- 格式化vdo卷
mkfs.xfs -K /dev/mapper/vdough
格式化VDO卷,加上-K参数代表跳过去重分析,不加-K需要等待几分钟才能格式化完成
- 挂载vdo卷
blkid | grep vdough
mkdir /vbread
vim /etc/fstab
UUID=b5485f24-2c32-4853-bde3-fb578515107d /vbread xfs defaults,x-systemd.requires=vdo.service 0 0
x-systemd.requires=vdo.service
这个参数代表此磁盘依赖于vdo.service服务,可延迟挂载文件系统,直到vdo.service启动成功为止,一定要加上否则会导致启动失败
配置Shell脚本
有关此部分,请查看Shell脚本的基础用法介绍
Podman 容器
标签:SELinux,分区,RHCSA,etc,详解,vdo,挂载,习题,VDO From: https://www.cnblogs.com/RilyLC29/p/RHCSA_PE.html有关此部分,请查看Podman容器基础介绍