diff --git a/RECOVERY.md b/RECOVERY.md index cb63be4..51fe304 100644 --- a/RECOVERY.md +++ b/RECOVERY.md @@ -16,7 +16,7 @@ The repository is the source of truth for the project. Read files in this order: -```text +``` 1. README.md 2. RECOVERY.md 3. dotemacs @@ -35,13 +35,13 @@ The user’s `.emacs` setup already loads the Linux+ system. The repository may contain a copy of that file named: -```text +``` dotemacs ``` The relevant startup code is: -```elisp +``` ;; Load custom Elisp (let ((dir "~/.emacs.d/lisp/linuxplus/")) (add-to-list 'load-path dir) @@ -51,13 +51,13 @@ The relevant startup code is: Therefore, after saving new lesson or quiz files into: -```text +``` ~/.emacs.d/lisp/linuxplus/ ``` the correct refresh step is: -```text +``` M-x linuxplus-load-all ``` @@ -67,13 +67,13 @@ Do not tell the user to manually add the directory to `load-path`, manually load The loader file is: -```text +``` linuxplus-load-all.el ``` The function: -```text +``` linuxplus-load-all ``` @@ -89,7 +89,7 @@ The current convention uses consecutive numbers for each lesson/quiz pair. Example: -```text +``` 102-user-management-lesson.el 103-user-management-quiz.el ``` @@ -98,7 +98,7 @@ The next topic should use the next unused lesson number and the next unused quiz Example: -```text +``` 104-storage-lvm-quotas-lesson.el 105-storage-lvm-quotas-quiz.el ``` @@ -120,13 +120,13 @@ A lesson file should: Avoid this problem: -```elisp +``` explicit-shell-file-name ``` Use a safer shell fallback pattern based on current repository style, such as: -```elisp +``` (or shell-file-name (getenv "SHELL") "/bin/sh") ``` @@ -137,8 +137,11 @@ The exact buffer names and formatting should follow the highest-numbered current A quiz file should: * use the established numbered filename format + * define one interactive quiz function + * call `linuxplus-start-quiz` + * pass exactly three arguments: 1. the lesson function symbol @@ -147,7 +150,7 @@ A quiz file should: The expected call shape is: -```elisp +``` (linuxplus-start-quiz 'linuxplus-NNN-topic-name-lesson '((:type true-false @@ -158,7 +161,7 @@ The expected call shape is: Supported question types include: -```text +``` true-false yes-no multiple @@ -170,7 +173,7 @@ For multiple-choice questions, inspect `06-linuxplus-quiz-mode.el` and the highe The user will maintain: -```text +``` STUDY.md ``` @@ -182,7 +185,7 @@ Prefer paraphrased concepts over exact copyrighted question text. Good format: -```text +``` Missed area: LVM volume groups Correct concept: vgcreate creates a volume group. Exam trap: lvcreate creates a logical volume, not a volume group. @@ -194,7 +197,7 @@ Future lessons should prioritize weak areas listed in `STUDY.md`. Previously discussed weak areas included topics such as: -```text +``` systemd and PID 1 GRUB2 LVM @@ -231,29 +234,21 @@ To add a new topic: 4. Create a lesson file: - ```text NNN-topic-name-lesson.el - ``` 5. Create the matching quiz file: - ```text NNN+1-topic-name-quiz.el - ``` 6. Keep the lesson and quiz focused on one topic. 7. Save both files in: - ```text ~/.emacs.d/lisp/linuxplus/ - ``` 8. Tell the user to run: - ```text M-x linuxplus-load-all - ``` 9. Then tell the user to run the new lesson and quiz functions. @@ -274,23 +269,47 @@ When helping with this project: ## Goal The goal is to help the user make steady Linux+ certification progress through targeted, topic-based, Emacs-integrated lessons and quizzes. + ## RECOVERY maintenance update - 2026-07-09 -Created a targeted review lesson pair based on missed Linux+ firewall -book questions: +Corrected the firewall review lesson pair to follow the repository numbering and loader conventions. -- `linuxplus-lesson-120.el` -- `linuxplus-quiz-120.el` +Remove these incorrectly named files: -Lesson 120 covers firewall ACLs, packet inspection, persistent -configuration files, stateful firewall review points, firewalld runtime -to permanent configuration, numbered UFW rules, simple UFW SSH blocking, -DenyHosts, and Fail2Ban. +* `linuxplus-lesson-120.el` +* `linuxplus-quiz-120.el` -Quiz 120 uses only true/false, yes/no, and single-choice questions. -The lesson keeps text above an `ansi-term` buffer and includes GNU -Emacs on GNU/Linux audio practice with `espeak-ng` and `espeak`. +Create these replacement files: -Include the book's expected wording, but preserve the real-world note -that DenyHosts is strongly associated with `/etc/hosts.deny`, while -Fail2Ban commonly blocks through firewall actions. +* `104-firewall-review-lesson.el` +* `105-firewall-review-quiz.el` + +Reason for correction: + +* `linuxplus-load-all.el` loads numbered Emacs Lisp files. +* Lesson and quiz files use consecutive numbers. +* The lesson file should be named `NNN-topic-name-lesson.el`. +* The quiz file should be named `NNN+1-topic-name-quiz.el`. +* Quiz files should call `linuxplus-start-quiz` instead of using their own `read-string` scoring loop. + +The corrected lesson function is: + +* `linuxplus-firewall-review-lesson` + +The corrected quiz function is: + +* `linuxplus-firewall-review-quiz` + +Lesson content is based on missed Linux+ firewall book questions: + +* firewall ACLs +* packet inspection +* persistent configuration files +* stateful firewall review points +* `firewall-cmd --runtime-to-permanent` +* numbered UFW rules +* simple UFW SSH blocking +* DenyHosts +* Fail2Ban + +The lesson preserves the real-world note that DenyHosts is strongly associated with `/etc/hosts.deny`, while Fail2Ban commonly blocks through firewall actions. For the book question, memorize the book's expected wording. diff --git a/STUDY.md b/STUDY.md index 56d2365..dd22776 100644 --- a/STUDY.md +++ b/STUDY.md @@ -12,17 +12,18 @@ The next lessons should focus on weak areas that have appeared in missed questio Highest priority areas: -```text -1. Storage, LVM, and quotas -2. Boot process, GRUB2, kernel startup, and systemd -3. Kernel modules and hardware/system inspection -4. Networking services, ports, packet filtering, and bandwidth tools -5. Permissions, ACLs, ownership, and directory traversal -6. Scheduled tasks, cron syntax, and automation -7. Backup, archive, sync, and file transfer tools -8. Mail filtering and redirection -9. Cloud, containers, orchestration, and object storage -10. Databases, web services, and service role recognition +``` +1. Firewall basics, UFW, firewalld, and IDS recognition +2. Storage, LVM, and quotas +3. Boot process, GRUB2, kernel startup, and systemd +4. Kernel modules and hardware/system inspection +5. Networking services, ports, packet filtering, and bandwidth tools +6. Permissions, ACLs, ownership, and directory traversal +7. Scheduled tasks, cron syntax, and automation +8. Backup, archive, sync, and file transfer tools +9. Mail filtering and redirection +10. Cloud, containers, orchestration, and object storage +11. Databases, web services, and service role recognition ``` ## Next Suggested Lesson/Quiz Pair @@ -31,26 +32,28 @@ The next unused pair should continue the repository numbering scheme. Suggested next files: -```text -104-storage-lvm-quotas-lesson.el -105-storage-lvm-quotas-quiz.el +``` +104-firewall-review-lesson.el +105-firewall-review-quiz.el ``` Suggested topic: -```text -Storage, LVM, filesystems, and quotas +``` +Firewall ACLs, packet inspection, persistent firewall configuration, +stateful firewall behavior, firewalld runtime-to-permanent rules, +numbered UFW rules, simple UFW SSH blocking, DenyHosts, and Fail2Ban ``` Reason: -This topic reinforces `repquota`, quota reporting, LVM object recognition, and storage command selection. +This topic reinforces several recent missed Linux+ book review questions. ## Study Format Each weak area should be recorded using this pattern: -```text +``` Missed area: Correct concept: Exam wording trap: @@ -61,7 +64,7 @@ Status: Possible status values: -```text +``` Needs lesson Needs quiz Needs review @@ -69,17 +72,106 @@ Improving Solid ``` +## Weak Area: Firewall Review + +Missed area: + +``` +Firewall basics, stateful firewall behavior, firewalld persistence, +UFW command syntax, and DenyHosts/Fail2Ban recognition +``` + +Correct concept: + +``` +Firewalls use ACLs, inspect network packets, and use configuration +files for persistence. + +ACL means access control list. Firewall ACL rules allow or deny +traffic based on details such as source address, destination +address, protocol, port, or interface. + +A stateless firewall checks packets against rules without remembering +the state of a connection. + +A stateful firewall tracks connection state. For this book review, +remember that a stateful firewall can operate faster for established +connections and can determine if packets are fragmented. + +firewalld can use runtime configuration and permanent configuration. +After testing firewalld runtime rules, make them permanent with: + + sudo firewall-cmd --runtime-to-permanent + +To view numbered UFW rules, use: + + sudo ufw status numbered + +To block SSH using simple UFW syntax, use: + + sudo ufw deny 22/tcp + +For this book item, remember DenyHosts and Fail2Ban as IDS tools. +The expected answer associates them with /etc/hosts.deny. +``` + +Exam wording trap: + +``` +"Make firewalld runtime rules permanent" points to: + + firewall-cmd --runtime-to-permanent + +"Numbered UFW rules" points to: + + sudo ufw status numbered + +"Deny SSH with simple UFW syntax" points to: + + sudo ufw deny 22/tcp + +DenyHosts is strongly associated with /etc/hosts.deny. + +Fail2Ban commonly blocks through firewall actions in real-world +configurations, but for the book question, memorize the book's +expected wording. +``` + +Commands/files to remember: + +``` +sudo firewall-cmd --runtime-to-permanent +sudo ufw status numbered +sudo ufw deny 22/tcp +/etc/hosts.deny +``` + +Future lesson topic: + +``` +104-firewall-review-lesson.el +105-firewall-review-quiz.el +``` + +Status: + +``` +Needs lesson +Needs quiz +Needs review +``` + ## Weak Area: Quotas and repquota Missed area: -```text +``` Quota reporting and quota command roles ``` Correct concept: -```text +``` repquota reports quota usage. quotaon enables quotas. quotaoff disables quotas. @@ -89,7 +181,7 @@ edquota edits user or group quota limits. Exam wording trap: -```text +``` "Report quotas" points to repquota, not quotaon. "Enable quotas" points to quotaon, not repquota. "Edit quotas" points to edquota. @@ -97,7 +189,7 @@ Exam wording trap: Commands/files to remember: -```text +``` repquota -a quotaon -a quotaoff -a @@ -110,14 +202,14 @@ grpquota Future lesson topic: -```text -104-storage-lvm-quotas-lesson.el -105-storage-lvm-quotas-quiz.el +``` +106-storage-lvm-quotas-lesson.el +107-storage-lvm-quotas-quiz.el ``` Status: -```text +``` Needs lesson Needs quiz ``` @@ -126,13 +218,13 @@ Needs quiz Missed area: -```text +``` LVM command recognition and PV/VG/LV relationships ``` Correct concept: -```text +``` A physical volume is storage prepared for LVM. A volume group is a pool of storage made from one or more physical volumes. A logical volume is usable storage created from a volume group. @@ -140,7 +232,7 @@ A logical volume is usable storage created from a volume group. Exam wording trap: -```text +``` "Create a volume group" means vgcreate. "Create a logical volume" means lvcreate. "List logical volumes" means lvs. @@ -148,7 +240,7 @@ Exam wording trap: Commands/files to remember: -```text +``` pvcreate vgcreate lvcreate @@ -165,14 +257,14 @@ xfs_growfs Future lesson topic: -```text -104-storage-lvm-quotas-lesson.el -105-storage-lvm-quotas-quiz.el +``` +106-storage-lvm-quotas-lesson.el +107-storage-lvm-quotas-quiz.el ``` Status: -```text +``` Needs lesson Needs quiz ``` @@ -181,13 +273,13 @@ Needs quiz Missed area: -```text +``` Choosing between df, du, lsblk, blkid, and findmnt ``` Correct concept: -```text +``` df shows mounted filesystem usage. du shows file or directory space usage. lsblk lists block devices. @@ -197,7 +289,7 @@ findmnt shows mounted filesystems. Exam wording trap: -```text +``` "How full is the filesystem?" usually means df. "How large is this directory?" usually means du. "Show disks and partitions" usually means lsblk. @@ -205,7 +297,7 @@ Exam wording trap: Commands/files to remember: -```text +``` df -h du -sh PATH lsblk @@ -218,14 +310,14 @@ mount -a Future lesson topic: -```text -104-storage-lvm-quotas-lesson.el -105-storage-lvm-quotas-quiz.el +``` +106-storage-lvm-quotas-lesson.el +107-storage-lvm-quotas-quiz.el ``` Status: -```text +``` Needs lesson Needs quiz ``` @@ -234,13 +326,13 @@ Needs quiz Missed area: -```text +``` Bootloader location, kernel startup, PID 1, and service management ``` Correct concept: -```text +``` GRUB2 loads the Linux kernel and initramfs. The kernel starts the first userspace process. On most modern Linux systems, PID 1 is systemd. @@ -249,7 +341,7 @@ systemctl controls systemd services. Exam wording trap: -```text +``` "PID 1" usually points to systemd on modern Linux. "Regenerate GRUB2 configuration" points to grub2-mkconfig or the distro equivalent. "Enable a service at boot" is not the same as starting it immediately. @@ -257,7 +349,7 @@ Exam wording trap: Commands/files to remember: -```text +``` ps -p 1 -o pid,comm,args systemctl status SERVICE systemctl start SERVICE @@ -272,14 +364,14 @@ grub2-mkconfig Future lesson topic: -```text -106-boot-grub-systemd-lesson.el -107-boot-grub-systemd-quiz.el +``` +108-boot-grub-systemd-lesson.el +109-boot-grub-systemd-quiz.el ``` Status: -```text +``` Needs review ``` @@ -287,13 +379,13 @@ Needs review Missed area: -```text +``` Listing, loading, removing, and inspecting kernel modules ``` Correct concept: -```text +``` lsmod lists loaded kernel modules. modprobe loads or removes modules and handles dependencies. modinfo shows information about a module. @@ -302,7 +394,7 @@ rmmod removes a module but does not handle dependencies as well as modprobe. Exam wording trap: -```text +``` "List loaded modules" means lsmod. "Load a module with dependencies" means modprobe. "Remove a module with dependency handling" means modprobe -r. @@ -310,7 +402,7 @@ Exam wording trap: Commands/files to remember: -```text +``` lsmod modprobe MODULE modprobe -r MODULE @@ -323,14 +415,14 @@ uname -r Future lesson topic: -```text -108-kernel-modules-hardware-lesson.el -109-kernel-modules-hardware-quiz.el +``` +110-kernel-modules-hardware-lesson.el +111-kernel-modules-hardware-quiz.el ``` Status: -```text +``` Needs review ``` @@ -338,13 +430,13 @@ Needs review Missed area: -```text +``` User-specific SSH client config versus system-wide SSH client config ``` Correct concept: -```text +``` User SSH client config is normally ~/.ssh/config. System-wide SSH client config is normally /etc/ssh/ssh_config. The SSH server config is normally /etc/ssh/sshd_config. @@ -353,7 +445,7 @@ User-specific client settings generally override system-wide client settings. Exam wording trap: -```text +``` Do not confuse ssh_config with sshd_config. ssh_config is client configuration. sshd_config is server daemon configuration. @@ -361,7 +453,7 @@ sshd_config is server daemon configuration. Commands/files to remember: -```text +``` ~/.ssh/config /etc/ssh/ssh_config /etc/ssh/sshd_config @@ -373,14 +465,14 @@ systemctl status ssh Future lesson topic: -```text -110-ssh-config-precedence-lesson.el -111-ssh-config-precedence-quiz.el +``` +112-ssh-config-precedence-lesson.el +113-ssh-config-precedence-quiz.el ``` Status: -```text +``` Needs review ``` @@ -388,26 +480,26 @@ Needs review Missed area: -```text +``` Service name to port/protocol mapping ``` Correct concept: -```text +``` /etc/services maps service names to port numbers and protocols. getent services can query service mappings. ``` Exam wording trap: -```text +``` A question asking about named services and port numbers often points to /etc/services. ``` Commands/files to remember: -```text +``` /etc/services getent services ssh grep '^ssh' /etc/services @@ -416,14 +508,14 @@ ss -tulpen Future lesson topic: -```text -112-network-services-firewall-lesson.el -113-network-services-firewall-quiz.el +``` +114-network-services-firewall-lesson.el +115-network-services-firewall-quiz.el ``` Status: -```text +``` Needs review ``` @@ -431,13 +523,13 @@ Needs review Missed area: -```text +``` Linux packet filtering framework and related tools ``` Correct concept: -```text +``` netfilter is the Linux kernel packet filtering framework. iptables and nftables are userspace tools for managing packet filtering rules. nftables is the newer framework/tooling commonly replacing many iptables workflows. @@ -445,14 +537,14 @@ nftables is the newer framework/tooling commonly replacing many iptables workflo Exam wording trap: -```text +``` "Kernel packet filtering framework" points to netfilter. "Firewall rules on modern Linux" may point to nftables. ``` Commands/files to remember: -```text +``` nft list ruleset iptables -L firewall-cmd @@ -462,14 +554,14 @@ ss -tulpen Future lesson topic: -```text -112-network-services-firewall-lesson.el -113-network-services-firewall-quiz.el +``` +114-network-services-firewall-lesson.el +115-network-services-firewall-quiz.el ``` Status: -```text +``` Needs review ``` @@ -477,13 +569,13 @@ Needs review Missed area: -```text +``` Choosing tools for network scanning, throughput testing, and interface inspection ``` Correct concept: -```text +``` nmap scans hosts and ports. iperf tests network throughput. ip shows addresses, routes, and links. @@ -493,7 +585,7 @@ tcpdump captures packets. Exam wording trap: -```text +``` "Throughput test" usually means iperf. "Port scan" usually means nmap. "Socket/listening port inspection" usually means ss. @@ -502,7 +594,7 @@ Exam wording trap: Commands/files to remember: -```text +``` nmap iperf ip addr @@ -514,14 +606,14 @@ tcpdump Future lesson topic: -```text -114-network-diagnostics-lesson.el -115-network-diagnostics-quiz.el +``` +116-network-diagnostics-lesson.el +117-network-diagnostics-quiz.el ``` Status: -```text +``` Needs review ``` @@ -529,13 +621,13 @@ Needs review Missed area: -```text +``` Directory permissions, ACL inspection, and ACL removal ``` Correct concept: -```text +``` Directory read permission allows listing names. Directory execute permission allows traversal. getfacl views ACLs. @@ -545,7 +637,7 @@ setfacl -b removes ACL entries. Exam wording trap: -```text +``` To access a file inside a directory, execute permission is needed on the directory path. To list directory contents, read permission is needed on the directory. ACL questions usually point to getfacl or setfacl. @@ -553,7 +645,7 @@ ACL questions usually point to getfacl or setfacl. Commands/files to remember: -```text +``` ls -ld DIR chmod chown @@ -566,14 +658,14 @@ setfacl -b Future lesson topic: -```text -116-permissions-acls-lesson.el -117-permissions-acls-quiz.el +``` +118-permissions-acls-lesson.el +119-permissions-acls-quiz.el ``` Status: -```text +``` Needs review ``` @@ -581,13 +673,13 @@ Needs review Missed area: -```text +``` Password aging, group membership, and account defaults ``` Correct concept: -```text +``` /etc/passwd stores basic user account information. /etc/shadow stores password hashes and password aging information. /etc/group stores group information. @@ -597,14 +689,14 @@ login.defs defines UID/GID ranges and default password aging policy values. Exam wording trap: -```text +``` Password aging is associated with /etc/shadow, chage, and login.defs, not /etc/passwd alone. When adding a user to a supplementary group, use usermod -aG, not just -G. ``` Commands/files to remember: -```text +``` /etc/passwd /etc/shadow /etc/group @@ -620,14 +712,14 @@ groups Future lesson topic: -```text +``` Already covered in 102-user-management-lesson.el and 103-user-management-quiz.el. Review if quiz score is weak. ``` Status: -```text +``` Needs review ``` @@ -635,26 +727,26 @@ Needs review Missed area: -```text +``` Cron field order and scheduled command recognition ``` Correct concept: -```text +``` Cron field order is minute, hour, day of month, month, day of week, command. ``` Exam wording trap: -```text +``` Do not confuse hour and minute fields. Do not confuse day-of-month with day-of-week. ``` Commands/files to remember: -```text +``` crontab -e crontab -l /etc/crontab @@ -666,14 +758,14 @@ systemctl list-timers Future lesson topic: -```text -118-scheduled-tasks-cron-lesson.el -119-scheduled-tasks-cron-quiz.el +``` +120-scheduled-tasks-cron-lesson.el +121-scheduled-tasks-cron-quiz.el ``` Status: -```text +``` Needs lesson Needs quiz ``` @@ -682,13 +774,13 @@ Needs quiz Missed area: -```text +``` Choosing between rsync, tar, compression tools, and copy commands ``` Correct concept: -```text +``` rsync is useful for efficient file synchronization and backups. tar creates archives. gzip, bzip2, and xz compress data. @@ -697,7 +789,7 @@ cp copies files. Exam wording trap: -```text +``` "Local backup of a large file or directory while preserving metadata" often points to rsync. "Create an archive" points to tar. "Compress data" points to gzip, bzip2, or xz. @@ -705,7 +797,7 @@ Exam wording trap: Commands/files to remember: -```text +``` rsync -avh SOURCE DEST rsync -avh --progress SOURCE DEST tar -cf archive.tar DIR @@ -718,14 +810,14 @@ xz Future lesson topic: -```text -120-backup-archive-sync-lesson.el -121-backup-archive-sync-quiz.el +``` +122-backup-archive-sync-lesson.el +123-backup-archive-sync-quiz.el ``` Status: -```text +``` Needs review ``` @@ -733,13 +825,13 @@ Needs review Missed area: -```text +``` Using ls -d, mv safety options, sort fields, and command selection ``` Correct concept: -```text +``` ls -d shows the directory entry itself instead of listing its contents. mv can move or rename files. mv -i prompts before overwrite. @@ -750,7 +842,7 @@ sort -r reverses sort order. Exam wording trap: -```text +``` "Show metadata for the directory itself" points to ls -ld. "Sort by a specific column" points to sort -k. "Prompt before overwrite" points to -i. @@ -759,7 +851,7 @@ Exam wording trap: Commands/files to remember: -```text +``` ls -ld DIR mv -i OLD NEW mv -v OLD NEW @@ -771,14 +863,14 @@ sort -r FILE Future lesson topic: -```text +``` Already partly covered by file-search and permissions topics. Add focused review only if needed. ``` Status: -```text +``` Needs review ``` @@ -786,13 +878,13 @@ Needs review Missed area: -```text +``` Interpreting top CPU fields and process display output ``` Correct concept: -```text +``` top shows CPU and process activity. %us or us is user CPU time. %sy or sy is system/kernel CPU time. @@ -802,14 +894,14 @@ top shows CPU and process activity. Exam wording trap: -```text +``` "Stolen time" is associated with virtualization. "User CPU time" is not the same as system/kernel CPU time. ``` Commands/files to remember: -```text +``` top ps aux ps -ef @@ -819,14 +911,14 @@ free -h Future lesson topic: -```text +``` Already covered in 20-top-cpu-fields-lesson.el and 21-top-cpu-fields-quiz.el. Review if quiz score is weak. ``` Status: -```text +``` Needs review ``` @@ -834,13 +926,13 @@ Needs review Missed area: -```text +``` Security log locations and filtering log output ``` Correct concept: -```text +``` Authentication and security events may appear in /var/log/secure on Red Hat-family systems. Debian-family systems often use /var/log/auth.log. journalctl queries the systemd journal. @@ -848,14 +940,14 @@ journalctl queries the systemd journal. Exam wording trap: -```text +``` Distribution family matters for auth/security log file names. systemd journal questions often point to journalctl. ``` Commands/files to remember: -```text +``` /var/log/secure /var/log/auth.log journalctl @@ -869,14 +961,14 @@ tail -f Future lesson topic: -```text +``` Already covered in 30-auth-log-lesson.el, 31-auth-log-quiz.el, 80-log-filtering-lesson.el, and 81-log-filtering-quiz.el. Review if quiz score is weak. ``` Status: -```text +``` Needs review ``` @@ -884,13 +976,13 @@ Needs review Missed area: -```text +``` Package installation, dependency queries, and package manager recognition ``` Correct concept: -```text +``` rpm installs and queries RPM packages directly. yum or dnf manage packages and dependencies on Red Hat-family systems. apt manages packages on Debian-family systems. @@ -899,14 +991,14 @@ yum deplist can show dependencies. Exam wording trap: -```text +``` rpm works directly with RPM packages but does not resolve dependencies like yum/dnf. Distribution family matters. ``` Commands/files to remember: -```text +``` rpm -ivh PACKAGE.rpm rpm -qa rpm -qi PACKAGE @@ -918,14 +1010,14 @@ apt install PACKAGE Future lesson topic: -```text +``` Already covered in 40-package-management-lesson.el and 41-package-management-quiz.el. Review if quiz score is weak. ``` Status: -```text +``` Needs review ``` @@ -933,26 +1025,26 @@ Needs review Missed area: -```text +``` Automatic mail processing, filtering, and redirection ``` Correct concept: -```text +``` Mail filters can automatically process, redirect, sort, or deliver incoming mail based on rules. Depending on the system, this may involve procmail, sieve, aliases, forwarding files, or MTA rules. ``` Exam wording trap: -```text +``` "Automatically redirects incoming mail" points to a mail filter or mail-processing rule, not a user shell alias. ``` Commands/files to remember: -```text +``` /etc/aliases ~/.forward procmail @@ -965,14 +1057,14 @@ newaliases Future lesson topic: -```text -122-mail-filtering-redirection-lesson.el -123-mail-filtering-redirection-quiz.el +``` +124-mail-filtering-redirection-lesson.el +125-mail-filtering-redirection-quiz.el ``` Status: -```text +``` Needs lesson Needs quiz ``` @@ -981,26 +1073,26 @@ Needs quiz Missed area: -```text +``` nginx service role recognition ``` Correct concept: -```text +``` nginx can function as a web server, reverse proxy, and load balancer. ``` Exam wording trap: -```text +``` Do not limit nginx to static web serving only. If the question mentions web serving plus load balancing or reverse proxying, nginx may be correct. ``` Commands/files to remember: -```text +``` nginx systemctl status nginx /etc/nginx/nginx.conf @@ -1009,14 +1101,14 @@ systemctl status nginx Future lesson topic: -```text -124-web-services-load-balancing-lesson.el -125-web-services-load-balancing-quiz.el +``` +126-web-services-load-balancing-lesson.el +127-web-services-load-balancing-quiz.el ``` Status: -```text +``` Needs review ``` @@ -1024,27 +1116,27 @@ Needs review Missed area: -```text +``` MongoDB storage/data model recognition ``` Correct concept: -```text +``` MongoDB is a document database. MongoDB uses JSON-style documents and stores data internally as BSON. ``` Exam wording trap: -```text +``` MongoDB is not a traditional row/table-only relational database. Questions mentioning JSON-style documents or BSON likely point to MongoDB. ``` Commands/files to remember: -```text +``` MongoDB JSON BSON @@ -1053,14 +1145,14 @@ document database Future lesson topic: -```text -126-databases-data-models-lesson.el -127-databases-data-models-quiz.el +``` +128-databases-data-models-lesson.el +129-databases-data-models-quiz.el ``` Status: -```text +``` Needs review ``` @@ -1068,25 +1160,25 @@ Needs review Missed area: -```text +``` Cloud object storage recognition ``` Correct concept: -```text +``` Azure Blob Storage is object storage for unstructured data. ``` Exam wording trap: -```text +``` "Object storage" and "unstructured data" may point to Azure Blob Storage in Azure-related questions. ``` Commands/files to remember: -```text +``` Azure Blob Storage object storage unstructured data @@ -1095,14 +1187,14 @@ cloud storage Future lesson topic: -```text -128-cloud-storage-lesson.el -129-cloud-storage-quiz.el +``` +130-cloud-storage-lesson.el +131-cloud-storage-quiz.el ``` Status: -```text +``` Needs review ``` @@ -1110,26 +1202,26 @@ Needs review Missed area: -```text +``` Container orchestration engine recognition ``` Correct concept: -```text +``` Kubernetes is a container orchestration platform. Container orchestration manages deployment, scaling, scheduling, and operation of containers. ``` Exam wording trap: -```text +``` "Container orchestration" often points to Kubernetes. ``` Commands/files to remember: -```text +``` Kubernetes kubectl container orchestration @@ -1140,14 +1232,14 @@ services Future lesson topic: -```text -130-containers-orchestration-lesson.el -131-containers-orchestration-quiz.el +``` +132-containers-orchestration-lesson.el +133-containers-orchestration-quiz.el ``` Status: -```text +``` Needs review ``` @@ -1155,25 +1247,25 @@ Needs review Missed area: -```text +``` Version control tool recognition ``` Correct concept: -```text +``` Git is a distributed version control system. ``` Exam wording trap: -```text +``` Questions asking about source code version control usually point to Git. ``` Commands/files to remember: -```text +``` git status git add git commit @@ -1186,14 +1278,14 @@ git push Future lesson topic: -```text -132-git-version-control-lesson.el -133-git-version-control-quiz.el +``` +134-git-version-control-lesson.el +135-git-version-control-quiz.el ``` Status: -```text +``` Needs review ``` @@ -1201,25 +1293,25 @@ Needs review Missed area: -```text +``` Root login terminal restrictions ``` Correct concept: -```text +``` /etc/securetty controls which terminals root may log in from on systems that honor it. ``` Exam wording trap: -```text +``` "Which terminals permit root login?" points to /etc/securetty. ``` Commands/files to remember: -```text +``` /etc/securetty root login TTY @@ -1228,14 +1320,14 @@ console Future lesson topic: -```text -134-login-security-lesson.el -135-login-security-quiz.el +``` +136-login-security-lesson.el +137-login-security-quiz.el ``` Status: -```text +``` Needs review ``` @@ -1243,26 +1335,26 @@ Needs review Missed area: -```text +``` Returning to the previous working directory ``` Correct concept: -```text +``` cd - returns to the previous working directory. ``` Exam wording trap: -```text +``` cd .. moves to the parent directory. cd - moves to the previous working directory. ``` Commands/files to remember: -```text +``` pwd cd cd .. @@ -1272,13 +1364,13 @@ cd ~ Future lesson topic: -```text +``` Can be included in a shell basics or file operations review lesson. ``` Status: -```text +``` Needs review ``` @@ -1286,13 +1378,13 @@ Needs review Missed area: -```text +``` Finding files, searching contents, and matching command to search task ``` Correct concept: -```text +``` find searches by file attributes and paths. grep searches text contents. locate uses a database to find paths quickly. @@ -1302,7 +1394,7 @@ whereis locates binary, source, and manual page files. Exam wording trap: -```text +``` "Search inside files" points to grep. "Find files by name, size, time, owner, or permissions" points to find. "Fast path lookup from a database" points to locate. @@ -1310,7 +1402,7 @@ Exam wording trap: Commands/files to remember: -```text +``` find grep locate @@ -1322,14 +1414,14 @@ type Future lesson topic: -```text +``` Already covered in 90-file-search-lesson.el and 91-file-search-quiz.el. Review if quiz score is weak. ``` Status: -```text +``` Needs review ``` @@ -1339,50 +1431,52 @@ Use this queue when deciding future lesson order. Immediate next lesson: -```text -104-storage-lvm-quotas-lesson.el -105-storage-lvm-quotas-quiz.el +``` +104-firewall-review-lesson.el +105-firewall-review-quiz.el ``` Recommended follow-up sequence: -```text -106-boot-grub-systemd-lesson.el -107-boot-grub-systemd-quiz.el +``` +106-storage-lvm-quotas-lesson.el +107-storage-lvm-quotas-quiz.el -108-kernel-modules-hardware-lesson.el -109-kernel-modules-hardware-quiz.el +108-boot-grub-systemd-lesson.el +109-boot-grub-systemd-quiz.el -112-network-services-firewall-lesson.el -113-network-services-firewall-quiz.el +110-kernel-modules-hardware-lesson.el +111-kernel-modules-hardware-quiz.el -118-scheduled-tasks-cron-lesson.el -119-scheduled-tasks-cron-quiz.el +114-network-services-firewall-lesson.el +115-network-services-firewall-quiz.el -120-backup-archive-sync-lesson.el -121-backup-archive-sync-quiz.el +120-scheduled-tasks-cron-lesson.el +121-scheduled-tasks-cron-quiz.el -122-mail-filtering-redirection-lesson.el -123-mail-filtering-redirection-quiz.el +122-backup-archive-sync-lesson.el +123-backup-archive-sync-quiz.el -128-cloud-storage-lesson.el -129-cloud-storage-quiz.el +124-mail-filtering-redirection-lesson.el +125-mail-filtering-redirection-quiz.el -130-containers-orchestration-lesson.el -131-containers-orchestration-quiz.el +130-cloud-storage-lesson.el +131-cloud-storage-quiz.el + +132-containers-orchestration-lesson.el +133-containers-orchestration-quiz.el ``` ## Quick Command Association Drill Review this section frequently. -```text +``` repquota -a -> report quotas quotaon -a -> enable quotas quotaoff -a -> disable quotas edquota -> edit quotas quotacheck -> check/build quota files - pvcreate -> create physical volume vgcreate -> create volume group lvcreate -> create logical volume @@ -1390,7 +1484,6 @@ pvs -> list physical volumes vgs -> list volume groups lvs -> list logical volumes lvextend -> extend logical volume - df -h -> mounted filesystem usage du -sh PATH -> file/directory usage lsblk -> block devices @@ -1401,7 +1494,6 @@ findmnt -> mounted filesystems ps -p 1 -> inspect PID 1 systemctl -> manage systemd services grub2-mkconfig -> generate GRUB2 configuration - lsmod -> list loaded kernel modules modprobe -> load module with dependencies modprobe -r -> remove module with dependency handling @@ -1411,11 +1503,15 @@ modinfo -> show module information netfilter -> kernel packet filtering framework nftables -> modern packet filtering rules tool iptables -> older/common packet filtering rules tool - getfacl -> view ACLs setfacl -> modify ACLs setfacl -b -> remove ACL entries +firewall-cmd --runtime-to-permanent -> save firewalld runtime rules +sudo ufw status numbered -> view numbered UFW rules +sudo ufw deny 22/tcp -> block SSH with UFW +/etc/hosts.deny -> DenyHosts/book IDS association + crontab -e -> edit user cron jobs crontab -l -> list user cron jobs minute hour dom month dow command -> cron field order @@ -1423,7 +1519,6 @@ minute hour dom month dow command -> cron field order rsync -avh -> sync/backup while preserving metadata tar -> archive files gzip/bzip2/xz -> compress data - nginx -> web server, reverse proxy, load balancer MongoDB -> JSON-style documents stored as BSON Azure Blob -> object storage for unstructured data @@ -1439,7 +1534,7 @@ Add quiz results here after completing topic quizzes. Example format: -```text +``` Date: Lesson: Quiz: @@ -1450,7 +1545,7 @@ Next action: ## Current Notes -```text +``` Date: Lesson: Quiz: @@ -1458,13 +1553,3 @@ Score: Missed: Next action: ``` -## Lesson 120 - -- `linuxplus-lesson-120.el` -- `linuxplus-quiz-120.el` -- Topic: Firewall ACLs, packet inspection, persistent configuration, - stateful firewall behavior, `firewall-cmd --runtime-to-permanent`, - numbered UFW rules, simple UFW SSH blocking, DenyHosts, and Fail2Ban. -- Practice: `sudo firewall-cmd --runtime-to-permanent`, - `sudo ufw status numbered`, and `sudo ufw deny 22/tcp`. - \ No newline at end of file diff --git a/linuxplus-lesson-120.el b/linuxplus-lesson-120.el deleted file mode 100644 index 9a8d7e1..0000000 --- a/linuxplus-lesson-120.el +++ /dev/null @@ -1,91 +0,0 @@ -;;; Linux+ Lesson 120: Firewall review -;;; -;;; Review firewall ACLs, stateful behavior, firewalld, UFW, and IDS. -;;; -;;; This file is part of the Linux+ Learning project. -;;; -;;; Copyright (c) 2026, Scott C. MacCallum (scm@sdf.org). -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU Affero General Public License as -;;; published by the Free Software Foundation, either version 3 of the -;;; License, or (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU Affero General Public License for more details. -;;; -;;; You should have received a copy of the GNU Affero General -;;; Public License along with this program. If not, see -;;; . - -;;; Commentary: - -;; Run with: -;; -;; M-x linuxplus-lesson-120 -;; -;; This lesson displays text above an ansi-term practice buffer. - -;;; Code: - -(require 'term) - -(defun linuxplus-lesson-120 () - "Show Linux+ lesson 120 with a shell practice buffer." - (interactive) - (delete-other-windows) - (let ((buffer (get-buffer-create "*Linux+ Lesson 120*"))) - (switch-to-buffer buffer) - (read-only-mode -1) - (erase-buffer) - (insert "Linux+ Lesson 120: Firewall review\n\n") - (insert "This lesson reviews firewall facts missed during book\n") - (insert "practice. Treat this as Linux+ study wording.\n\n") - (insert "Firewall basics:\n\n") - (insert " Firewalls use ACLs, inspect network packets, and use\n") - (insert " configuration files so rules can persist after restart.\n\n") - (insert "ACL means access control list. An ACL is a list of rules\n") - (insert "that allow or deny traffic based on details such as source,\n") - (insert "destination, protocol, port, or interface.\n\n") - (insert "Stateful firewall review:\n\n") - (insert " A stateless firewall checks each packet by rule only.\n") - (insert " A stateful firewall tracks connection state.\n") - (insert " Your review answer associates stateful firewalls with\n") - (insert " faster handling for established connections and with\n") - (insert " detecting whether packets are fragmented.\n\n") - (insert "firewalld runtime and permanent rules:\n\n") - (insert " firewalld can have runtime rules and permanent rules.\n") - (insert " Test changes at runtime first. After a successful test,\n") - (insert " make them permanent with super user privileges:\n\n") - (insert " sudo firewall-cmd --runtime-to-permanent\n\n") - (insert "UFW review:\n\n") - (insert " To view numbered UFW rules, use:\n\n") - (insert " sudo ufw status numbered\n\n") - (insert " Your review answer for blocking SSH is:\n\n") - (insert " sudo ufw deny 22/tcp\n\n") - (insert "IDS review:\n\n") - (insert " For this book item, remember DenyHosts and Fail2Ban\n") - (insert " as intrusion detection systems. The answer associates\n") - (insert " them with modifying /etc/hosts.deny.\n\n") - (insert "Real-world note: DenyHosts is strongly associated with\n") - (insert "/etc/hosts.deny. Fail2Ban is commonly configured to block\n") - (insert "attackers through firewall actions. For the book question,\n") - (insert "memorize the book's expected wording.\n\n") - (insert "Audio practice on GNU/Linux:\n\n") - (insert " espeak-ng 'Use firewall cmd runtime to permanent.'\n") - (insert " espeak 'Use sudo ufw status numbered.'\n") - (insert " espeak-ng 'Use sudo ufw deny twenty two slash tcp.'\n\n") - (insert "Practice below. Try sudo ufw status numbered if UFW is\n") - (insert "installed, or review firewall-cmd --help if firewalld is\n") - (insert "available on your system.\n") - (goto-char (point-min)) - (read-only-mode 1) - (split-window-below) - (other-window 1) - (ansi-term "/bin/bash"))) - -(provide 'linuxplus-lesson-120) - -;;; linuxplus-lesson-120.el ends here diff --git a/linuxplus-quiz-120.el b/linuxplus-quiz-120.el deleted file mode 100644 index f19ebf5..0000000 --- a/linuxplus-quiz-120.el +++ /dev/null @@ -1,95 +0,0 @@ -;;; Linux+ Quiz 120: Firewall review -;;; -;;; Review firewall ACLs, stateful behavior, firewalld, UFW, and IDS. -;;; -;;; This file is part of the Linux+ Learning project. -;;; -;;; Copyright (c) 2026, Scott C. MacCallum (scm@sdf.org). -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU Affero General Public License as -;;; published by the Free Software Foundation, either version 3 of the -;;; License, or (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU Affero General Public License for more details. -;;; -;;; You should have received a copy of the GNU Affero General -;;; Public License along with this program. If not, see -;;; . - -;;; Commentary: - -;; Run with: -;; -;; M-x linuxplus-quiz-120 -;; -;; Questions are true/false, yes/no, or single-choice only. - -;;; Code: - -(require 'subr-x) - -(defvar linuxplus-quiz-120-score-file - (expand-file-name "linuxplus-quiz-120-score.txt" - user-emacs-directory) - "File used to save the Linux+ quiz 120 score.") - -(defun linuxplus-quiz-120--ask (prompt answer) - "Ask PROMPT and compare the response to ANSWER." - (string= (downcase (string-trim (read-string prompt))) - answer)) - -(defun linuxplus-quiz-120 () - "Run Linux+ quiz 120 and save the score." - (interactive) - (let ((score 0) - (total 8)) - (when (linuxplus-quiz-120--ask - "True or false: Firewalls use ACLs. " - "true") - (setq score (1+ score))) - (when (linuxplus-quiz-120--ask - "Yes or no: Do firewalls inspect network packets? " - "yes") - (setq score (1+ score))) - (when (linuxplus-quiz-120--ask - "Which helps firewall rules persist? A) config files B) pwd " - "a") - (setq score (1+ score))) - (when (linuxplus-quiz-120--ask - "True or false: Stateful firewalls track connections. " - "true") - (setq score (1+ score))) - (when (linuxplus-quiz-120--ask - (concat "Which can be faster after a connection exists? " - "A) stateful B) stateless ") - "a") - (setq score (1+ score))) - (when (linuxplus-quiz-120--ask - (concat "Which saves tested firewalld runtime rules? " - "A) firewall-cmd --runtime-to-permanent " - "B) ufw numbered ") - "a") - (setq score (1+ score))) - (when (linuxplus-quiz-120--ask - (concat "Which command views numbered UFW rules? " - "A) sudo ufw status numbered " - "B) sudo ufw list ") - "a") - (setq score (1+ score))) - (when (linuxplus-quiz-120--ask - (concat "Which simple command blocks SSH by port? " - "A) sudo ufw deny 22/tcp " - "B) sudo ufw allow 22/tcp ") - "a") - (setq score (1+ score))) - (with-temp-file linuxplus-quiz-120-score-file - (insert (format "Linux+ quiz 120 score: %d/%d\n" score total))) - (message "Linux+ quiz 120 score: %d/%d" score total))) - -(provide 'linuxplus-quiz-120) - -;;; linuxplus-quiz-120.el ends here