linux-labs

Lab catalog

All 118 labs by category. Start one with sudo labctl start <lab>. Needs lists what a lab requires from your machine, for example internet access or extra nodes.

Automation

LabTitleLevelTargetCourseNeedsKnown issues
ansible-01Ansible control node and a first playbookBeginnernodes-internet, 3 nodes-
ansible-02Ansible roles, templates and handlersIntermediatenodes-internet, 3 nodes-
ansible-03Ansible Vault, facts and conditionalsAdvancednodes-internet, 3 nodes-
git-01Shared Git repository served over SSHBeginnernodes-internet, 2 nodes-
scripting-01Bash scripts with arguments, conditions and loopsIntermediateservera---

Containers

LabTitleLevelTargetCourseNeedsKnown issues
podman-01Rootless httpd container as a systemd user serviceAdvancedservera-internet-
podman-02Build a container image and run it with PodmanIntermediateservera-internet-
podman-03Rootless pod with a database and a web containerAdvancedservera-internet-

Database Replication

LabTitleLevelTargetCourseNeedsKnown issues
replication-01MySQL source-replica replicationBeginnernodes-internet, 2 nodes-
replication-02PostgreSQL streaming replication with WAL archivingIntermediatenodes-internet, 2 nodes-
replication-03MySQL multi-master circular replicationAdvancednodes-internet, 3 nodes-

Databases

LabTitleLevelTargetCourseNeedsKnown issues
mysql-01MySQL installation and root passwordBeginnerservera-internet-
mysql-02MySQL database and user managementIntermediateservera-internet-
mysql-03MySQL backup and restoreAdvancedservera-internet-
postgres-01PostgreSQL installation and first startBeginnerservera-internet-
postgres-02PostgreSQL database and role managementIntermediateservera-internet-
postgres-03PostgreSQL backup and restoreAdvancedservera-internet-
postgres-04PostgreSQL that does not startIntermediateservera-internet-
redis-01Redis server with a password and persistenceBeginnerservera-internet-

DNS

LabTitleLevelTargetCourseNeedsKnown issues
dns-01Install and start the BIND DNS serverBeginnerservera-internet-
dns-02DNS forward zone with A, CNAME and MX recordsIntermediateservera-internet-
dns-03DNSSEC signed zone with zone transferAdvancedservera-internet-
dns-04BIND secondary zone with zone transfersIntermediatenodes-internet, 2 nodes-
dns-05Name resolution fails on a clientIntermediateservera-internet-

Files

LabTitleLevelTargetCourseNeedsKnown issues
files-01Directories and filesBeginnerservera---
files-02Web directory permissions and ownershipIntermediateservera---
files-03Special permissions, ACLs and backupAdvancedservera---
files-04Brace expansion and file organisationBeginnerserveraaoos 01--
files-05Finding files and searching textBeginnerservera---
files-06Archives and rsync transfer between nodesIntermediatenodes-internet, 2 nodes-
files-07Incremental rsync snapshots with a systemd timerIntermediateservera-internet-
files-08Text processing reports from a web server logIntermediateservera---
files-09Hard links, symbolic links and inodesBeginnerservera---

Firewall

LabTitleLevelTargetCourseNeedsKnown issues
firewall-01Firewalld services and portsBeginnerservera---
firewall-02Rich rules and zone assignmentIntermediateservera-free NIC-
firewall-03Masquerading, port forwarding and custom servicesAdvancedservera---

High Availability Clustering

LabTitleLevelTargetCourseNeedsKnown issues
clustering-01Basic three-node Pacemaker clusterBeginnernodes-internet, 3 nodes-
clustering-02STONITH fencing for a Pacemaker clusterIntermediatenodes-internet, 3 nodes1 workaround
clustering-03Quorum and split-brain protectionAdvancednodes-3 nodes-

Load Balancing

LabTitleLevelTargetCourseNeedsKnown issues
lb-01HAProxy load balancing for three web serversBeginnernodes-internet, 3 nodes-
lb-02Nginx reverse proxy with health checksIntermediatenodes-internet, 3 nodes-
lb-03Highly available load balancer with keepalivedAdvancednodes-internet, 3 nodes-

Logging

LabTitleLevelTargetCourseNeedsKnown issues
logging-01Filtering the systemd journal with journalctlBeginnerservera--2 workaround
logging-02Custom rsyslog rules and logrotateIntermediateservera---
logging-03Persistent journal and a failing serviceAdvancedservera---
logging-04Persistent audit rules and auditd log settingsIntermediateservera---
logging-05Central rsyslog server over TCPIntermediatenodes-2 nodes-
logging-06journald size limits, rate limiting and retentionIntermediateservera---
logging-07File integrity checks with AIDEIntermediateservera-internet-

Networking

LabTitleLevelTargetCourseNeedsKnown issues
networking-01Static IP address and DNS with NetworkManagerBeginnerservera-free NIC-
networking-02VLAN interface and hostnameIntermediateservera-free NIC-
networking-03Network bonding with failoverAdvancedservera-free NIC-
networking-04IPv6 address and a static route on a free NICIntermediateservera-free NIC-
networking-05A network connection that does not come upIntermediateservera-free NIC-
time-01Chrony time server and clientIntermediatenodes-2 nodes-

Packages

LabTitleLevelTargetCourseNeedsKnown issues
packages-01Package management basicsBeginnerservera-internet-
packages-02Enable the EPEL repository and install a package from itIntermediateservera-internet-
packages-03Package file listsAdvancedservera-internet-
packages-04RPM queries and installing from a fileIntermediateserveraaoos 02internet1 workaround
packages-05Build joe from source with a custom prefixAdvancedserveraaoos 02internet-
packages-06Configure dnf repositories from a base URLBeginnerservera-internet-
packages-07A service fails after a package updateIntermediateservera-internet-
packages-08Switch Node.js to another dnf module streamIntermediateservera-internet-

Scheduling

LabTitleLevelTargetCourseNeedsKnown issues
scheduling-01Cron jobs basicsBeginnerservera---
scheduling-02Systemd timersIntermediateservera---
scheduling-03Anacron, persistent timers and cron variablesAdvancedservera-internet-
scheduling-04One-time jobs with at and a default umaskBeginnerservera-internet-
scheduling-05Troubleshoot cron jobs that never runIntermediateservera---

SELinux

LabTitleLevelTargetCourseNeedsKnown issues
selinux-01SELinux enforcing modeBeginnerservera---
selinux-02SELinux contexts for a web applicationIntermediateservera-internet-
selinux-03SELinux labels for Apache on a non-standard portAdvancedservera-internet-
selinux-04SELinux booleans for Apache user directoriesIntermediateservera-internet-

SSH

LabTitleLevelTargetCourseNeedsKnown issues
fail2ban-01Protect SSH with fail2banBeginnerservera-internet-
fail2ban-02Custom fail2ban filter and jail for an application logIntermediateservera-internet-
ssh-01SSH key authentication and a client host aliasBeginnerservera---
ssh-02Hardening the SSH serverAdvancedservera-internet-
ssh-03Key login fails for a user with a non-standard homeIntermediateservera-internet-
ssh-04SFTP-only group chrooted to per-user directoriesIntermediateservera---
ssh-05SSH user certificates signed by a local CAAdvancedservera---

Storage

LabTitleLevelTargetCourseNeedsKnown issues
nfs-01NFS server and persistent client mountIntermediatenodes-internet, 2 nodes-
nfs-02NFS export security and autofs client mountsIntermediatenodes-internet, 2 nodes-
samba-01Samba file sharing with a persistent CIFS mountIntermediatenodes-internet, 2 nodes-
storage-01Loopback filesystem with persistent mountBeginnerservera-reboot-
storage-02LVM basics on a loopback deviceIntermediateservera---
storage-03LVM snapshots on a loopback volume groupAdvancedservera---
storage-04Swap file, swappiness and a tuned profileIntermediateservera-internet, reboot-
storage-05Extend LVM volumes and grow XFS and ext4 file systemsIntermediateservera---
storage-06GPT partitions, swap and file systems mounted by UUIDIntermediateservera-internet-
storage-07Encrypted LUKS volume unlocked at boot by a key fileIntermediateservera-internet-
storage-08User and group disk quotas on an XFS file systemIntermediateservera---
storage-09iSCSI target and a persistent initiator loginAdvancednodes-internet, 2 nodes-
storage-10Software RAID 1 with a hot spare and a disk replacementIntermediateservera-internet-
storage-11Full file system and a broken fstab entryIntermediateservera---

Systemd

LabTitleLevelTargetCourseNeedsKnown issues
systemd-01Basic service management with systemdBeginnerservera---
systemd-02Custom systemd serviceIntermediateservera---
systemd-03Systemd timers and scheduled servicesAdvancedservera---
systemd-04Default boot targetBeginnerserveraaoos 01reboot-
systemd-05Kernel arguments, GRUB timeout and kernel modulesIntermediateservera-reboot-
systemd-06Process priorities and signalsBeginnerservera---
systemd-07Kernel crash dumps with kdumpIntermediateservera-internet, reboot-
systemd-08Drop-in overrides, restart policy and resource limitsIntermediateservera---
systemd-09Runaway processes and sar data collectionIntermediateservera-internet-
systemd-10Custom services that fail to startIntermediateservera---
systemd-11Persistent kernel parameters and tmpfiles.d rulesIntermediateservera-reboot-

Users

LabTitleLevelTargetCourseNeedsKnown issues
users-01Users, groups and shared directoriesBeginnerservera---
users-02User accounts, password aging and limitsIntermediateservera---
users-03Users, groups and ACLs for shared directoriesAdvancedservera---
users-04Password policy with pwquality, faillock and pwhistoryIntermediateservera---
users-05Sudo rules with drop-in files and command aliasesIntermediateservera---
users-06Accounts that cannot log inIntermediateservera---

Web Servers

LabTitleLevelTargetCourseNeedsKnown issues
webserver-01Install and run Apache HTTP ServerBeginnerservera-internet-
webserver-02Apache name-based virtual hostIntermediateservera-internet-
webserver-03HTTPS with a self-signed certificateAdvancedservera-internet-
webserver-04Nginx HTTPS reverse proxy for a local applicationIntermediateservera-internet-
webserver-05Troubleshoot a web site that does not loadIntermediateservera-internet-
webserver-06Apache with PHP-FPM and a dedicated poolIntermediateservera-internet-
webserver-07Internal CA and a trusted HTTPS certificateIntermediateservera-internet-
webserver-08Apache basic auth and IP access controlIntermediateservera-internet-