LabHub
学习 学习路径 课程

LFCS — Linux 基金会认证系统管理员

LFCS 模拟考 A

在 LabHub 中继续学习

目标

在与真实 LFCS 考试相同的条件下,于 120 分钟内完成 18 道题。合格线为 67%, 采用部分计分制,因此通过 18 题中的 13 题即可合格。

真实考试环境

如何完成本模拟考试

  1. **请先不看提示,独立完成全部题目。**浏览完 18 题后, 只打开当时卡住题目的提示。
  2. **不要进行网页搜索。**只使用 man--help 完成题目。这是本考试最重要的训练; 真实考场中没有搜索框。
  3. 忘记命令名称时,使用 man -k <키워드>apropos <키워드> 搜索。 例如 man -k aclman -k quotaman -k "file system"。 如果现在不练习,考试时就会第一次使用它们。
  4. 需要章节编号时,像 man 5 fstab 这样使用。配置文件位于第 5 节, 管理员命令位于第 8 节。

本环境与真实考试的差异

实验 Pod 几乎没有内核权限,而且 systemd 不作为 PID 1 运行,因此 mountsystemctliptables 在这里无法工作。题目已改写为可在此环境中验证 同一领域知识的形式。真实考试中这三者均可用,因此可把这里创建的 fstab 条目和 Unit 文件 理解为在考场中还要继续执行 mount -asystemctl enable --now

步骤

  1. /root/exam/find/src/ 中创建 data-01.txtdata-05.txt 五个文件。 data-01data-03 每个至少 200000 字节;data-04data-05 每个至少 1 字节且小于 4096 字节。 在同一目录创建指向 data-01.txt 的硬链接 data-01.hard。然后把 src 直接目录下 大于 100 KiB 的普通文件名称写入 /root/exam/find/big.txt,把硬链接数至少为 2 的文件名称 写入 /root/exam/find/links.txt。两个文件都只写名称,每行一个,并按 LC_ALL=C sort 排序。
  2. /etc/services 中筛选协议为 tcp、端口号在 1024 到 2000 之间的条目, 写入 /root/exam/text/tcp-high.txt。每行以一个空格分隔写成 <포트> <서비스 이름>, 服务名称使用原行的第一个字段。按端口升序排序,完全相同的行只保留一份。
  3. /root/exam/arch/src/ 中创建 log-01.txtlog-05.txt 五个文件,每个至少 20000 字节, 另建一个扩展名为 .tmp 的文件。在 /root/exam/arch/ 中创建包含 src 目录的 gzip tar 归档 /root/exam/arch/backup.tar.gz,但排除 .tmp 文件。将归档成员列表按 LC_ALL=C sort 顺序写入 /root/exam/arch/members.txt
  4. 创建 GID 4200 的组 ops 和 GID 4201 的组 audit。创建 UID 4300 的用户 deploy, 主组为 ops、附加组为 audit、登录 Shell 为 /bin/bash、主目录为 /home/deploy。 实际创建主目录,权限设为 750,所有者设为 deploy:ops。为 deploy 设置密码策略: 最短修改间隔 7 天、最长有效期 60 天、到期警告 14 天,账号到期日为 2027-06-30。
  5. 创建 UID 4301 的用户 intern。登录 Shell 为 /usr/sbin/nologin,实际创建主目录, 并加入附加组 ops。先为 intern 设置一次密码,再锁定账号。最后把 /etc/login.defs 的默认值改为 PASS_MAX_DAYS 90PASS_MIN_DAYS 7PASS_WARN_AGE 14UMASK 027
  6. 创建目录 /srv/data/srv/scratch,在 /etc/fstab 中添加两项。 第一项设备为 UUID=2f9c1a70-0007-4e00-9a00-000000000007,挂载点 /srv/data,类型 ext4, 选项 defaults,nofail,dump 0,pass 2。第二项设备为 tmpfs,挂载点 /srv/scratch, 类型 tmpfs,选项 rw,nosuid,nodev,noexec,size=256m,dump 0,pass 0。 此 Pod 中不能执行 mount,只需写入条目。
  7. 精确创建 134217728 字节的 /root/exam/storage/data.img,并在文件上创建 ext4 文件系统。 卷标签为 EXAMDATA,保留块比例为 1%。把文件系统 UUID 逐行写入 /root/exam/storage/data.uuid
  8. 创建表观大小为 536870912 字节的稀疏文件 /root/exam/storage/sparse.img(实际占用应接近 0)。 创建实际分配 4 MiB 的 /root/exam/storage/dense.img。然后在 /root/exam/storage/usage.txt 中写入以下三行,值均为 KiB 整数。 sparse_apparent_kib=<sparse.img 의 겉보기 크기> sparse_actual_kib=<sparse.img 이 실제로 차지하는 크기> dense_actual_kib=<dense.img 이 실제로 차지하는 크기>
  9. 创建共享目录 /srv/team,所有者设为 root:ops,权限设为 2770。 通过 ACL 赋予 deploy rwxintern r-x;设置默认 ACL,使其下新文件的所属组拥有 rwx, 其他用户没有任何权限。默认 ACL 的所有者条目为 rwx
  10. /etc/hosts 中把 10.60.0.11 注册为 web1.lab.internal 和短名称 web1, 把 10.60.0.12 注册为 db1.lab.internal 和短名称 db1。在 /etc/nsswitch.confhosts: 行中确保 files 位于 dns 之前。四个名称都必须能被 getent hosts 解析。
  11. 创建 /etc/ssh/sshd_config.d/90-exam.conf,写入以下七项:PermitRootLogin noPasswordAuthentication noMaxAuthTries 3ClientAliveInterval 300ClientAliveCountMax 2AllowTcpForwarding noX11Forwarding no。 配置必须语法正确,且 sshd 解析后的最终值与此一致,无需重启守护进程。
  12. 在后台启动一个监听 127.0.0.1 TCP 9101 端口的进程,并保持存活到考试结束。 找到持有该套接字的进程,在 /root/exam/net/listener.txt 中写三行: port=9101pid=<그 프로세스의 PID>comm=<그 프로세스의 이름>
  13. 查询此 Pod 的当前网络状态,在 /root/exam/net/facts.txt 中写四行: iface=<기본 경로가 나가는 인터페이스 이름>ipv4=<그 인터페이스의 IPv4 주소를 프리픽스까지 포함해>mtu=<그 인터페이스의 MTU>gateway=<기본 경로의 게이트웨이 주소>
  14. 创建 /usr/local/bin/labhub-batch.sh 并赋予执行权限,编写 /etc/systemd/system/labhub-batch.service Unit 文件。[Unit] 必须包含 Description, WantsAfter 都为 network-online.target[Service] 的 Type 为 oneshot, ExecStart 为 /usr/local/bin/labhub-batch.sh,WorkingDirectory 为 /srv/data[Install] 的 WantedBy 为 multi-user.target。此 Pod 中 systemd 不作为 PID 1, systemctl enable 无法工作,因此请手动创建它原本会生成的符号链接 /etc/systemd/system/multi-user.target.wants/labhub-batch.service
  15. 创建 /usr/local/bin/labhub-report.sh/usr/local/bin/labhub-weekly.sh,权限均为 755。 创建 /etc/cron.d/labhub-report,注册每 15 分钟以 root 权限执行 /usr/local/bin/labhub-report.sh;该文件权限为 644,所有者为 root:root。 另外在 root crontab 中注册每周日 02:30 执行 /usr/local/bin/labhub-weekly.sh
  16. 创建 /var/log/labhub-app.log 并编写 /etc/logrotate.d/labhub-app,每天轮转日志并保留 14 份。 启用 compressdelaycompressmissingoknotifempty,轮转后通过 create 0640 root adm 创建新文件。
  17. 创建 /usr/local/bin/exam-worker.sh 并赋予权限 755。第一行必须以 shebang 开头, 内容只需持续运行而不退出。以 nice 值 15 在后台运行,并把 PID 单独一行写入 /run/exam-worker.pid。评分时进程必须仍然存活。
  18. 安装软件包 figletpv(环境无互联网,已注册 /opt/localrepo 离线仓库)。 将两个已安装软件包的名称和版本逐行写入 /root/exam/ops/pkg.txt, 每行采用 <패키지 이름> <버전> 格式。最后只锁定 pv,使其不参与自动升级。

参考

用 find 选择符合大小与链接条件的文件

-size +100k 的单位是 KiB,-links +1 选择硬链接数至少为 2 的文件。只输出名称时使用 -printf%f,并用 LC_ALL=C sort 固定排序。硬链接使用 ln,符号链接使用 ln -s

从 /etc/services 筛选符合条件的条目

每行第二个字段的格式为 포트/프로토콜。使用 awksplit() 按斜杠拆分,再比较数值。端口升序和去重可通过一次 sort -n -u 完成。

创建排除特定扩展名的 tar 归档

tarc 表示创建,z 表示 gzip,f 表示文件名。使用 --exclude 排除,并用引号包裹模式,避免 Shell 提前展开。通过 tar -tzf 再次提取成员列表。

创建组与用户并设置密码到期策略

组合使用 groupadd -guseradd-u -g -G -s -m -d。密码策略使用 chage,账号到期日使用 chage -E。请查看 man 8 useraddman 1 chage。主目录由 useradd 创建后,可能还需单独调整权限和所有者。

创建禁止登录账号与默认密码策略

把 Shell 设为 /usr/sbin/nologin 可阻止登录。可用 usermod -Lpasswd -l 锁定;如果锁定完全没有密码的账号,只会留下锁定标记而没有哈希。请先用 chpasswd 设置密码再锁定。默认值位于 /etc/login.defs

编写两个 fstab 条目

man 5 fstab 说明了六个字段:设备、挂载点、类型、选项、dump、pass。应预先创建挂载点目录。只验证语法可使用 findmnt --verify --tab-file /etc/fstab

在文件上创建 ext4 并读取超级块

truncate -s 创建精确大小的空文件。mkfs.ext4 可在普通文件上创建文件系统,但需要 -F。标签使用 -L,保留块比例使用 -m。创建后用 tune2fs -ldumpe2fs -h 读取值。

报告稀疏文件与实际占用大小

truncate 只创建空洞形成稀疏文件,fallocate 会实际分配块。表观大小使用 du --apparent-size,实际占用使用普通 du,KiB 单位使用 -k。比较 stat%s%b 也能看到差异。

创建 setgid 共享目录与默认 ACL

chmod 2770 的前导 2 表示 setgid。ACL 使用 setfacl -m,让新文件继承的默认 ACL 使用 -d -m。通过 getfacl 查看当前条目。man 1 setfacl 的示例部分简短而实用。

设置静态名称解析与解析顺序

一行写一个地址和多个名称时,后面的名称会成为别名。用 getent hosts <이름> 验证。解析顺序由 /etc/nsswitch.confhosts: 行决定,说明见 man 5 nsswitch.conf

配置 SSH 服务器并确认最终值

主配置会在顶部 include sshd_config.d/*.conf;sshd 遇到重复关键字时采用先读取的值。语法检查使用 sshd -t,最终解析值使用 sshd -T。全部关键字见 man 5 sshd_config

找出开放端口的进程

同时查看监听中的 TCP 套接字及其所属进程使用 ss -ltnp。按端口过滤可写成 ss -ltnp 'sport = :9101'。进程名称也位于 /proc/<PID>/comm。启动时要确保关闭 Shell 后仍能存活。

读取并记录当前接口与路由

默认路由使用 ip route show default 查看,地址使用 ip -o -4 addr show dev <이름>-o 使输出为单行,便于提取字段。MTU 可从 ip link 查看,也可直接读取 /sys/class/net/<이름>/mtu

编写 systemd Unit 文件与启用链接

Unit 文件是由 [Unit][Service][Install] 三段组成的 ini 格式。语法检查使用 systemd-analyze verify <경로>systemctl enable 实际只是在 [Install] 的 WantedBy 指向的目标 .wants 目录中创建符号链接。请查看 man 5 systemd.service

配置 cron.d 条目与 root crontab

/etc/cron.d 的行多一个用户字段,共六个字段;用户 crontab 没有该字段。每 15 分钟写作 */15,周日是星期字段的 0。使用 crontab -l -u root 确认注册。请查看 man 5 crontab

编写日志轮转配置

配置块格式为 경로 { 지시어들 }。若只想查看解析结果而不实际轮转,使用 logrotate -d <설정파일>。拼错的指令会在输出中显示 error:。全部指令见 man 8 logrotate

启动低优先级后台任务并写入 PID 文件

使用 nice -n 15 <명령> 以较低优先级启动。要在关闭 Shell 后继续存活,使用 nohup ... &。刚启动进程的 PID 位于 Shell 变量 $!。当前 nice 值可用 ps -o pid,ni,comm -p <PID> 查看。脚本第一行的 shebang 可写成 #!/bin/bash

安装软件包并锁定升级

本环境没有互联网,/opt/localrepo 已注册为仓库,因此可直接运行 apt-get install。只提取已安装软件包的版本时,使用 dpkg-query -W -f 的格式字符串。排除升级使用 apt-mark hold,确认使用 apt-mark showhold