THIS IS STILL A WORK-IN-PROGRESS...
These instructions will walk you through building a virtual RHEL 9.x server and applying the DISA (Defense Information Systems Agency) STIG (Security Technical Implementation Guide). It will also demonstrate how to verify the STIG has been applied using OpenSCAP an open-source tool designed for automated security auditing and compliance management based on the Security Content Automation Protocol (SCAP).
All this will be demonstrated using the KVM (Kernel-based Virtual Machine) hypervisor module and QEMU (Quick Emulator), a free open-source hypervisor and machine emulator, all running on a Debian based version of Linux.
Setting Up Virtual Machines with QEMU, KVM, and Virt-Manager on Debian/Ubuntu
You will need a bootable ISO file of RHEL 9.x which you can obtain by creating a free account on https://developers.redhat.com/ and downloading the latest x86_64 DVD ISO from :
https://developers.redhat.com/products/rhel/download#downloadsbyrelease.
In this example the ISO file will be saved in a folder named 'ISO' in the user's home directory on the host (hypervisor) system.
The STIG requires separate disk partitions, or volumes, be created for different functional parts of the operating system. At a minimum this will insure that if a rouge process overloads the system with logging it will not fill up the root volume and crash the system, thus enabling you to still be able to login and fix the problem.
The Disk partitioning layout is presented here for virtual disk space requirements and will be referred back to later during the operating system (OS) install.
Recommended disk partition/volume sizes:
| Mount Point | Recommended Size | Minimum Size | Notes |
|---|---|---|---|
| /boot | 1G | 1G | Use '/boot' from Mount Point menu |
| /boot/efi | 600M | 512M | Use '/boot/efi' from Mount Point menu |
| / | 20G | 10G | Use '/' from Mount Point menu |
| /home | 20G | 5G | Use '/home' from Mount Point menu |
| /var | 20G | 8G | Use '/var' from Mount Point menu |
| Swap | 10G | 4G | Use 'swap' from Mount Point menu Up to 1/2 size of RAM |
| /tmp | 10G | 8G | Enter '/tmp' for the Mount Point |
| /var/tmp | 2G | 1G | Enter '/var/tmp' for the Mount Point |
| /var/log | 1G | 1G | Enter '/var/log' for the Mount Point |
| /var/log/audit | 2G | 1.5G | Enter '/var/log/audit' for the Mount Point |
| Total | 87G | 40G | disk space |
Assuming you have KVM and QEMU installed and working correctly, let's get started.
☐ Click the shiny looking monitor icon on the left of the Virtual Machine Manager GUI.
☐ Select "Local install media (ISO image or CDROM)" and click the "Forward" button.
☐ Select the latest rhel-9.x-x86_64-dvd.iso file and click the "Choose Volume" button.
☐ Click the "Forward" button to continue.
☐ Adjust Memory and CPUs to something reasonable and click the "Forward" button.
☐ Click on "Begin Installation"
☐ Select "English (United States)" and click the "Continue" button.
On the "Installation Summary" screen many settings need to be adjusted.
☐ Under "Storage Configuration" select the "Custom" option and click the "Done" button.
☐ Select or key in "/boot" for the "Mount Point", then enter the "1G" for the "Desired Capacity" and click the "Add mount point" button.
☐ After adding all of the partitions click the "Done" button.
☐ Now click the "Accept Changes" button.
☐ Finally back on the "Installation Summary" screen it should say "Everything okay" under the "Security Profile", and you can click the "Begin Installation" button.
☐ Installation will take several minutes to complete.
☐ Click the "Reboot system" button.
☐ Login with your admin user account.
☐ Run the following commands to update/patch the system.
☐ Now that we can see what know what the IP address is, we should be able to ssh to the RHEL9 virtual server from the host (hypervisor). Open a local terminal window try logging in using SSH with your admin account.
$ ssh john@192.168.122.117 (IP address will likely be different on your system)
# subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
# curl -fsSL https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9 -o /tmp/RPM-GPG-KEY-EPEL-9
# rpm --import /tmp/RPM-GPG-KEY-EPEL-9
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
repo id repo name
codeready-builder-for-rhel-9-x86_64-rpms Red Hat CodeReady Linux Builder for RHEL 9 x86_64 (RPMs)
epel Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
rhel-9-for-x86_64-appstream-rpms Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)
rhel-9-for-x86_64-baseos-rpms Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs)
Last metadata expiration check: 0:11:29 ago on Sat 23 May 2026 01:02:10 PM EDT.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
htop x86_64 3.3.0-1.el9 epel 198 k
Installing dependencies:
hwloc-libs x86_64 2.4.1-6.el9_7 rhel-9-for-x86_64-baseos-rpms 2.1 M
Transaction Summary
================================================================================
Install 2 Packages
Total download size: 2.3 M
Installed size: 3.5 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): htop-3.3.0-1.el9.x86_64.rpm 426 kB/s | 198 kB 00:00
(2/2): hwloc-libs-2.4.1-6.el9_7.x86_64.rpm 3.3 MB/s | 2.1 MB 00:00
--------------------------------------------------------------------------------
Total 2.5 MB/s | 2.3 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : hwloc-libs-2.4.1-6.el9_7.x86_64 1/2
Installing : htop-3.3.0-1.el9.x86_64 2/2
Running scriptlet: htop-3.3.0-1.el9.x86_64 2/2
Verifying : htop-3.3.0-1.el9.x86_64 1/2
Verifying : hwloc-libs-2.4.1-6.el9_7.x86_64 2/2
Installed products updated.
Installed:
htop-3.3.0-1.el9.x86_64 hwloc-libs-2.4.1-6.el9_7.x86_64
Complete!
Can not save configuration to /root/.config/htop/htoprc: No such
[root@RHEL98 ~]# mkdir .config
[root@RHEL98 ~]# htop
[root@RHEL98 ~]#
logout
[john@RHEL98 ~]$














