返回信息流没想到这次是低分飘过了,比预期中差了好多,但毕竟是过了。
中间有几道题考的和我写的不太一样,还多了一道没有的题,之后更新一下
考完觉得很空虚,没什么卵用,学习的过程反而有意思得多。
我是直接报考试(因为考试比培训便宜,培训的钱够考4次)
============================================
心血来潮报了红帽的考试,然后初级居然没有一次过。。。
这次写了一份笔记
题外必备知识:
1. ```man```
```bash
man -k KEYWORD # 搜索关键词
man [1-8] command # 查看特定章节
#常用的两个章节编号:1:命令怎么用 5:配置文件写法
#在man程序内用 /KEYWORD 来搜索,按h显示帮助
#大部分操作最好都看看man里面的说明再写
```
2. 命令参数
在看```man```的时候,能看到参数描述会给出类似:```-v, --version```这种描述,其中单横线单字母为unix风格,双横行全称为GNU风格。
在答题时,推荐能用GNU风格的参数,毕竟可以tab补全,防止敲错。
如果写脚本也推荐用GNU风格,方便排查错误。
日常随手干活的时候,当然能少敲就少敲。
3. tty界面里面shift + PgUP/PgDn 上下翻页
### 考试环境
去注册一个红帽官网的账号,可以免费下载镜像,并拿这个账号密码激活15台红帽系统,拿来搭实验环境肯定是够了。
这个账号也能用在后面podman那里用,不```podman login registry.redhat.io```会出现rsyslog pull不下来的问题。
||||
|---|---|---|
|hostname|IP|角色|
|servera.lab.example.com|172.25.250.10|考试做题机a|
|serverb.lab.example.com|172.25.250.11|考试做题机b|
考试环境最外面让你操作那台机器有图形界面,可以控制两台机器启停和回滚,及其用来看man。
考试的时候会发一张草稿纸,没带笔会借你一根笔。
## 考试第一部分:ServerA上的操作:
### 一、配置网络地址
虚拟机servera的root密码为PASSWORD,请为此虚拟机配置以下网络参数
|||
|---|---|
|主机名|servera.lab.example.com|
|IP地址|172.25.250.10/24|
|默认网关|172.25.250.254|
|DNS服务器|172.25.250.254|
各路网上答案都是如何用nmcli配置,背一下没坏(yong)处。
但是也有偷懒的办法,亲测考试环境里```nmtui```能用,可以填空配置。
```Bash
nmtui #需要哪里点哪里
```
操作完需要在```activate a connection```那项开关一下,操作类似命令```nmcli connection down CON_NAME && nmcli connection up CON_NAME```
### 二、配置软件仓库
- 请配置虚拟机的yum仓库,地址如下
- http://content.example.com/rhel8/x86_64/dvd/BaseOS
- http://content.example.com/rhel8/x86_64/dvd/AppStream
这一题日常用Centos配置其实已经很熟练了,但实际上场时这一题卡了我很久:
因为考试环境里没有平时自带的例子可以改用,需要对着man凭空写。
突如其来要凭空写,```man yum```没有可以参考,```man 5 yum```又没有内容。
```man -k yum```发现,原来有个叫yum.conf的条目。
repo文件里必备格式:
```
[NAME]
baseurl=URL
enabled=1
gpgcheck=0
```
```Bash
man 5 yum.conf
vim /etc/yum.repo.d/baseos.repo
cp /etc/yum.repo.d/baseos.repo /etc/yum.repo.d/appstream.repo
vim /etc/yum.repo.d/appstream.repo
yum update
```
### 三、调试SELinux
- 配置httpd在82端口上提供Web服务,满足以下要求:
1. 在/var/www/html/ 下添加index.html文件
2. 此Web服务器在系统启动时自启动
3. 确保SELinux保护机制运行在Enforcing模式
SELinux是个有意思的安全软件,但我觉得这道题控制服务端口是在抢防火墙的活,而且考试里并没有firewall-cmd的操作也很奇怪。
这道题要先去看```semanage port -l```里面给http的type怎么写的
```Bash
man httpd
vim /etc/httpd/conf/httpd.conf
# listen 82
echo "Hello World!" > /var/www/html/index.html
semanage port -l | grep http
# http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 90000
semanage port --add --type http_port_t --proto tcp 82
semanage port -l | grep http
# http_port_t tcp 82, 80, 81, 443, 488, 8008, 8009, 8443, 90000
systemctl enable httpd
systemctl start httpd
curl http://127.0.0.1:82
# Hello World!
setenforce enforcing
getenforce
```
### 四、创建用户账户
1. 创建名为admins的组
2. 创建用户A,其附属组为admins
3. 创建用户B,其附属组为admins
4. 创建用户C,没有可交互的登录Shell,不属于admins组
5. 用户A、B、C密码都是PASSWORD
直球题,没什么想解读的。
```Bash
groupadd admins
useradd --gid admins A
useradd --gid admins B
useradd --shell /sbin/nologin C
echo PASSWORD | passwd --stdin A #为防敲错还要费二遍事,考试就直接echo明文写
echo PASSWORD | passwd --stdin B
echo PASSWORD | passwd --stdin C
```
之所以不在useradd那里直接``` --password PASSWORD``` 是因为手册这里这个参数要求是“The encrypted password” ,如果加了``` --password PASSWORD```,PASSWORD会直接塞进```/etc/shadow```(shadow存的是加密后的密码)的那行,并不能直接用来密码登录。(想用-p还没深入研究chpasswd)
### 五、配置cron计划任务
- 配置计划任务,以用户A的身份每5分钟执行一次命令echo hello。
直球题,考察crontab用法。
(定时执行不一定非要用crontab,还可以用```at```,但这道题用不了。
```Bash
cron -u A -e #编辑crontab
*/5 * * * * echo hello #分 时 日 月 周 命令
cron -u A -l #检查一下成功了没
```
### 六、创建共享目录
1. 创建目录/home/tools,所有组是admins
2. 此目录能被admins组的成员读写、写入和访问、除root外其他用户没有这些权限
3. 在此目录下创建的文件,其组的所有权自动设置为admins组
有意思的题:考察了目录的SETGID位的知识点,关于SETUID、SETGID、STICKY位的内容可以在```man chmod```里面看到
- SETUID位配置给可执行文件时```chmod u+s```: 让执行的用户以文件所属用户的身份执行:如/bin/passwd命令,用来让passwd以root身份操作/etc/shadow文件
- SETGID位配置给可执行文件时```chmod g+s```: 让执行的用户以文件所属组的身份执行:如/bin/locate命令,可以在/var/lib/mlocate/mlocate.db里面查找文件
- SETGID位配置给目录时```chmod g+s```: 在目录下新建的文件所属组会默认继承该目录所属组
- Sticky位```chmod +t```: 配置给目录或文件,该目录或文件只能被所有者或root删掉
```Bash
mkdir /home/tools
chgrp admins /home/tools
chmod g+s /home/tools
touch /home/tools/test
ls -l /home/tools
# -rw-r--r--. 1 root admins Jul 15 17:00 test
rm /home/tools/test
```
### 七、配置NTP时间客户端
- 配置系统使NTP与classroom.example.com同步时间
直球题,没有太多要求,考试环境里用的是chrony。
```Bash
man 5 chrony # 写之前看一眼man确定一下
vim /etc/chrony/chrony.conf
# server classroom.example.com iburst
chronyc sources
```
### 八、配置autofs
- 配置autofs自动挂载
1. serverb通过NFS共享目录/rhome到你的系统,此文件系统中包括用户D预配置的家目录
2. 用户D的家目录应自动挂载到本地的/rhome/D目录
3. 用户D的家目录是serverb.lab.example.com:/rhome/D
4. 用户D的家目录应自动挂载到本地的/rhome/D目录
5. 挂载后的家目录可读写
不知道有什么用的题,可能是我日常NFS用到地方太少了。
看了一下autofs的配置文件写法,推荐是在/etc/auto.master上面注册子配置文件,然后在子配置文件里写挂载详情。
autofs也可以用来挂载硬盘空间,但是没必要。
```Bash
man 5 auto.master
man 5 autofs
vim /etc/auto.master
# /rhome /etc/auto.master.d/auto.nfs
vim /etc/auto.master.d/auto.nfs
# D -rw serverb.lab.example.com:/rhome/D
systemctl restart autofs
```
### 九、配置文件权限
- 将文件/etc/fstab复制到/var/tmp/,并按下述要求配置/var/tmp/fstab的权限
1. 文件/var/tmp/fstab属于root用户
2. 文件/var/tmp/fstab属于root组
3. 任何用户对/var/tmp/fstab都没有可执行权限
4. 用户A能读写/var/tmp/fstab文件
5. 用户B无法读写/var/tap/fstab文件
6. 其他用户(包括未来创建的新用户)只读/var/tmp/fstab文件
不太直球的题,开头1-3配chmod,4-6具体到某个用户需要配setfacl(A、B同组但不同权限、新用户的默认权限)
```Bash
cp /etc/fstab /var/tmp/
chown root:root /var/tmp/fstab
chmod a-x /var/tmp/fstab
man setfacl
setfacl --modify u:A:rw- /var/tmp/fstab
setfacl --modify u:B:--- /var/tmp/fstab
setfacl --modify o:r-- /var/tmp/fstab
getfacl /var/tmp/fstab # 检查一下
```
### 十、配置用户账户
- 创建用户E,用户ID为2021,密码为PASSWORD
直球题,不知道为什么放在这里占数一道题,不是应该放在第四题的一道步骤里面么。
```Bash
useradd --uid 2021 E
echo PASSWORD | passwd --stdin E
```
### 十一、查找文件
- 找出/etc/目录下大小超过5MB的文件,并将其复制到/root/findfiles目录下
直球考察find的用法,
```Bash
man find # 可以直接 /EXAMPLES 找到例子抄
mkdir /root/findfiles
find /etc/ -size +5M -exec cp '{}' /root/findfiles \; # 匹配到会将文件替代进'{}'执行,结尾分号需要加转义符\
```
### 十二、查找字符串
- 找出文件/etc/man_db.conf中包括字符串"sbin"的行,将其按原是顺序导入到文件/root/out 中,out文件不得包含空行。
直球考字符串匹配,简单的方法是用```grep sbin```。当然趁机学一下awk或者sed甚至vim去骚一下也不是不行。
```Bash
grep sbin /etc/man_db.conf 1> /root/out
```
### 十三、创建归档
- 创建归档文件 /root/backup.tar.bz2,其中包含/usr/local/的内容,此归档文件必须使用bzip2压缩
直球考察tar用法,这道题推荐用全名来写参数,比较清楚简单
```Bash
tar --create --file=/root/back.tar.bz2 --bzip2 /usr/local
```
## 考试第二部分:ServerB上的操作:
这台机器主要用来考存储配置的题,而存储配置配挂了可能会开不了机。
基础操作要会: ```lsblk```列出块设备、```fdisk```列出磁盘详情与操作磁盘、```blkid```
要会```/etc/fstab```的编辑,玩坏了会开不了机。
### 十四、设置root密码:
- 将serverb的root密码设置为PASSWORD
这一题没有任何提示,需全文背诵默写
学会了非常实用,有些机器长期不开机的情况下确实会忘记,但有些发行版的gurb默认不显示,如果遇到这种情况忘记密码我并不知道要怎么办(大概要要体外挂载livecd然后chroot吧
先重启,在grub界面按e编辑,找到"linux"开头的行(我也遇到过写linux16的,没有深究这一行到底什么意思),该行结尾加" rd.break"。
搜索了一下这个方法,大概原理是加上```rd.break```让grub引导过程中,在"ramdisk"这个阶段操作完后中断,能够手动操作。
改完按ctrl+x继续引导,会停在一个shell界面,在这里需要重新把```/sysroot```挂载为读写模式(默认是只读),这里```/sysroot```是当前这个shell把日常的根目录挂载在的位置。
```Bash
mount -o remount,rw /sysroot
chroot /sysroot #这里就进到常用的shell环境了
echo PASSWORD | passwd --stdin root
touch /.autorelabel #这一步会让SELinux开机的时候重新打标签,没有这一步会让SELinux开机后校验/etc/shadow 出错
exit # 这一步只是退出了chroot
exit # 退出rd.break
```
重启之后,就可以用root登陆了
### 十五、配置软件仓库
和第二题一毛一样
### 十六、添加交换分区
- 在系统上添加一个512MiB的交换分区,设置交换分区应在系统启动时自动挂载,不要删除或修改系统上已有的交换分区
直球题,分块磁盘分区给swap用,然后```swapon```查看成果,
```Bash
lsblk
gpart
fdisk /dev/sdb
# n ENTER ENTER ENTER +512M p w
mkswap /dev/sdb1
vim /etc/fstab
# /dev/sdb1 none swapdefaults 0 0
swapon --all # 使/etc/fstab中配置的swap生效
swapon #看一下刚才配置的分区生效了没
```
### 十七、调整逻辑卷大小
1. 创建2GiB的分区/dev/vdb1,并用于创建卷组testvg
2. 创建大小为200MiB的逻辑卷/dev/testvg/vo,格式化为xfs文件系统,并挂载在/mnt/vo上
3. 将逻辑卷/dev/testvg/vo及其文件系统大小调整到300MiB,确保文件系统内容保持不变
这道题和后一道题都在直球考查LVM的操作,LVM自身有3层组成:
1. PV(物理卷): 覆盖在如```/dev/sda1```这样的物理设备上,类似做了raid化的盘。
增 : pvcreate
删 : pvremove
改 : pvchange
查 : pvdisplay
2. VG(~~化学卷~~卷组): 将多个物理卷整合成一个逻辑盘或者说存储池,如果叫"物理卷组"就好理解了。
增 : vgcreate
删 : vgremove
改 : vgchange
查 : vgdisplay
3. LV(~~生物~~逻辑卷): 在卷组中分区,用着和其他块设备一样。
增 : lvcreate
删 : lvremove
改 : lvresize lvextend lvreduce
查 : lvdisplay
当然作为一个非常基础的考试,考试里只需要会增就行。
```Bash
lsblk
fdisk /dev/vdb
# n ENTER ENTER ENTER +2G w
pvcreate /dev/vdb1
vgcreate testvg /dev/vdb1
lvcreate --size 200M --name vo testvg
mkfs.xfs /dev/testvg/vo
mkdir /mnt/vo
vim /etc/fstab
# /dev/testvg/vo /mnt/vo xfs defaults 0 0
mount -a
lvextend --size 300M testvg/vo
xfs_growfs /dev/testvg/vo
dh -h /mnt/vo
# 看到变300M了
```
### 十八、创建逻辑卷
1. 创建逻辑卷exmlv,属于exmvg卷组,大小为50pe
2. 卷组exmvg中的逻辑卷pe大小应当为16MiB
3. 使用vfat文件系统将逻辑卷exmlv格式化
4. 此逻辑卷应当在系统启动时自动挂载到/mnt/exmdata目录下
PE(physical extent)是VG的分块,这题有个小计算,50个PE,每块PE 16M,所以这是个50 * 16M = 800M的lv
```Bash
vgdisplay # 考试的时候应该是给好卷组直接用的,可以先查一下
fdisk /dev/vdb
# n ENTER ENTER ENTER +850M w 多给点怕不够用
pvcreate /dev/vdb2
vgcreate exmvg /dev/vdb2 --physicalextentsize 16M
lvcreate --extents 50 --name exmlv exmvg
lvdisplay
#看看exmlv那块LV Size是不是800M
mkfs.vfat /dev/exmvg/exmlv
mkdir /mnt/exmdata
vim /etc/fstab
#/dev/exmvg/exmlv /mnt/exmdata vfat defaults 0 0
mount -a
df -h /mnt/exmdata
```
### 十九、创建VDO卷
1. 使用未分区的磁盘/dev/vdc创建新的VDO卷
2. 此VDO卷的名称为exmvdo
3. 此VDO卷的逻辑大小为50G
4. 此VDO卷使用xfs文件系统格式化
5. 此VDO卷在系统启动时自动挂载到/vblock目录下
这道题考的时候有可能会让你装一下vdo,直接```yum install vdo```就行
比较麻烦的点在于,如果这个盘曾经有过格式化,vdo操作会报错,需要```wipefs```来干掉盘上的信息。
```Bash
lsblk
man vdo
#/EXAMPLE 抄一下命令注意大小写
vdo create --name=exmvdo --device=dev/vdc --vdoLogicialSize=50G
mkfs.xfs /dev/mapper/exmvdo
mkdir /vblock
vim /etc/fstab
# /dev/mapper/exmvdo /vblock xfs defaults,x-systemd.requires=vdo.service 0 0
mount -a
lsblk
# 能观察到/dev/vdc和其下的exmvdo大小不一样(子分区比父分区还要大)
df -h /vblock
# 能观察到确实是50G
```
### 二十、配置系统调优
- 将系统的调优配置文件设置为tuned推荐的配置文件
这个tuned具体功能我看了一下```man tuned-profiles```,大概类似Windows的电源管理。
题本身很直球,为了考一下而考一下:
```bash
tuned-adm profile $(tuned-adm recommend)
```
### 二十一、配置容器已使其自动启动
1. 利用 registry.example.com 中的 rsyslog 镜像,创建一个名为 logserver 的容器sys
2. 将其配置为以 systemd 服务的形式运行,且仅面向现有用户 A
3. 该服务应命名为 container-logserver,并应在系统重新引导后自动启动,无需任何干预
这道题和下一道题的难度陡然提高,完全不是前面给分题的架势,搜到答案给的又比较模糊。
我第一次考的时候其实抱着前面都得分就能过的心态考的,没有太深究这两道题,最近耐心搜了一下podman的相关资料,然后发现官方答案居然在[podman文档](http://docs.podman.io/en/latest/markdown/podman-generate-systemd.1.html)里面能找到。
"仅面向现有用户A"这一条,标准答案里操作是:登A账号然后让systemctl以用户模式启动,想详细了解用户模式启动可以看[ArchWiki](https://wiki.archlinux.org/title/Systemd/User)
[红帽官方的文档](https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html-single/building_running_and_managing_containers/index)
```Bash
podman pull registry.example.com/rsyslog:latest
podman run --detach --name logserver rsyslog
man systemd.unit # man systemd里面看到的,这里要知道.service文件放在哪生效。
# /--user 这里要找到其实有点费劲,最简单还是背下来。
mkdir --parents ~/.config/systemd/user
cd ~/.config/systemd/user
podman generate systemd --new --files --name logserver
# 这一步会自然生成containter-*前缀,因为是从container生成而来。
systemctl --user enable container-logserver.service
loginctl enable-linger A # 以用户身份创建的守护进程会在用户会话关闭以后被kill,所以要有这一步"允许逗留"。
# 重启验证一下
reboot
systemctl --user | grep container-logserver
```
### 二十二、为容器配置持久存储
- 通过以下方式扩展上一个任务的服务:
1. 配置主机系统日志以在系统重新引导后保留其数据,并重新启动日志记录服务
2. 将主机 /var/log/journal 目录及任何子目录中的任何 *.journal 文件复制到目录 /home/A/container_journal 中
3. 将服务配置为启动时自动讲目录 /home/A/container_journal 挂载到容器中的 /var/log/journal 下面
这道题比较诡异,我在网上搜了几个答案都是让人删掉前一题重新配置,或者在上一题的时候直接配置好这一道题。
搜了一下找到[线索1](https://stackoverflow.com/questions/59920413/podman-add-ports-to-expose-to-running-pod)、[线索2](https://developers.redhat.com/blog/2019/01/15/podman-managing-containers-pods#),都在说,pod创建以后端口映射没法额外添加。
经阅读文档,```podman port```和```podman volume```似乎都和create命令里面配置端口和文件夹映射没关系,如果有大佬知道麻烦科普一下。
所以,从我查到的资料来看,网上查到的提前做或者删了重配好像都没问题。
- 删了重配
```Bash
man journald.conf
# /storage 找一下配置文件的用词(抄一下persistent怎么拼
vim /etc/systemd/journald.conf
# Storage = persistent
# 但是这不是在配置本机journald的内容么,和podman里的rsyslog有什么关系?
mkdir /home/A/container_journal
podman stop logserver
podman rm logserver
podman run --detach --name logserver --volume /home/A/container_journal/:/var/log/journal/:Z rsyslog
cd /home/A/.config/systemd/user
rm container-logserver.service
podman generate systemd --name logserver --new --files
systemctl --user enable container-logserver.service
loginctl enable-linger
find /var/log/journal/ -name *.journal -exec cp {} /home/A/container_journal/ \;
reboot
systemctl --user | grep container-logserver
```
- 开头一次性配好的写法(从二十一题开始)
```Bash
podman pull registry.example.com/rsyslog:latest
podman run --detach --name logserver --volume /home/A/container_journal:/var/log/journal rsyslog
mkdir --parents ~/.config/systemd/user
mkdir ~/container_journal
cd ~/.config/systemd/user
podman generate systemd --new --files --name logserver --volume
systemctl --user enable container-logserver.service
loginctl enable-linger A
man journald.conf
# /storage 找一下配置文件的用词(抄一下persistent怎么拼
vim /etc/systemd/journald.conf
# Storage = persistent
find /var/log/journal/ -name *.journal -exec cp {} /home/A/container_journal/ \;
```
### 二十三、检查!检查!检查!
记得全做完要将两台机器```重启``` ```重启``` ```重启``` 确保能正常启动,然后逐步验证前面的做过的题成果是否保留下来了。
考试的界面上面有下面这样的checkbox让你点,可以用来最后检查的时候每道题标记一下。
这是一条镜像帖。来源:北邮人论坛 / linux / #160198同步于 2021/7/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Linux机器人发帖
某帽csa8 备考笔记
Austinpb
2021/7/25镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复