On this tutorial, we will look at how to install and use Virtualmin on RHEL 9/ CentOS Stream 9. Linux system administration is the process of managing a system in a Linux Environment. It involves processes of setting up user accounts, taking reports, updating configuration files, and performing backup and recovery options. The user who manages the server manages the server, setup and troubleshoots hardware is known as a system administrator. The system administrator should have basic skills like familiarity with network routers and firewalls, monitoring systems, Linux File systems, and File system hierachy. Different tools are are used to perform these processes, they include, VirtualBox, Webmin, Nmap, Wireshark, cockpit, Nagios, etc.


Virtualmin is a web server administration tool and web hosting control panel for Linux and BSD systems. Virtualmin is built on top of Webmin with full integration of user management, monitoring features, software management, ACLs, and security features. Virtualmin has a modular architecture that allows it to be extensible, scriptable, and customizable. You can work with a User Interface and also the Command Line Interface to configure services. It simplifies complex tasks and automates repetitive tasks without the need to customize them.

Virtualmin unique features include;

  • Provides domain accounts also known as virtual servers to allow users to manage their accounts.
  • Provides several powerful web-based mail clients including Usermin with full Virtualmin integration, RoundCube, and Squirrelmail to manage mailboxes.
  • Virtualmin provides tools that automatically perform basic administrative tasks giving the staff more time to be productive in other areas.
  • Virtualmin enables the use of Webmin’s two-factor authentication, certificate logins, brute force protection, and many other security features.
  • Provides tools for Alerts, Graphs, and Logs. It allows easy searching of web server logs and monitoring of the system.
  • Provides tools for managing databases including adding and removing databases.

Virtualmin offers a free open-source GPL version and Virtualmin Professional that has premium support and other additional capabilities like 100 web applications for CMS, CRM, forums, commerce, issue tracking, community, webmail, database management, mailing list management, and much more. Other tools that are quite similar to Virtulamin including Webmin, Ajenti, Vesta Control Panel, Sentora, etc.

Install Virtualmin on RHEL 9/ CentOS Stream 9

Below we are going to show you an exquisite process on how to install Virtualmin on RHEL 9/ CentOS Stream 9. Check below for more insights on the same;

Step 1. Install Virtualmin on RHEL 9/ CentOS Stream 9 System

Update your system packages

sudo dnf update -y

You will have to run the installation script as root, Hence login to the root user.

sudo su

Use the following script to install the script on your server.

wget -O install.sh http://software.virtualmin.com/gpl/scripts/install.sh

Execute the script with the following command. The script will ask a series of questions depending on your Operating System and the state of the system.

## RHEL ##
/bin/sh install.sh

## CentOS 9 ##
/bin/sh install.sh --unstable

Sample Output is as shown below;

Running Virtualmin 7 pre-installation setup:
  Syncing system time ..
  .. done
  Updating CA certificates ..
  .. done

  Welcome to the Virtualmin GPL installer, version 7.0.0

  This script must be run on a freshly installed supported OS. It does not
  perform updates or upgrades (use your system package manager) or license
  changes (use the "virtualmin change-license" command).

  The systems currently supported by install script are:

    Red Hat Enterprise Linux and derivatives
      - RHEL 8 and 9 on x86_64
      - Alma and Rocky 8 and 9 on x86_64
      - CentOS 7 on x86_64
    Debian Linux and derivatives
      - Debian 10 and 11 on i386 and amd64
      - Ubuntu 20.04 LTS and 22.04 LTS on i386 and amd64

  If your OS/version/arch is not listed, installation will fail. More
  details about the systems supported by the script can be found here:


  The selected package bundle is LAMP and the size of install is
  full. It will require up to 650 MB of disk space.

  Exit and re-run this script with --help flag to see available options.

 Continue? (y/n) y
[INFO] Started installation log in /root/virtualmin-install.log
▣◻◻ Phase 1 of 3: Setup
Installing core plugins for package manager                             [  ✔  ]
Downloading Virtualmin 7 release package                                [  ✔  ]
Installing Virtualmin 7 release package                                 [  ✔  ]

▣▣◻ Phase 2 of 3: Installation
Installing EPEL release package                                         [  ✔  ]
Enabling CRB package repository                                         [  ✔  ]
Cleaning up software repo metadata                                      [  ✔  ]
Checking and installing system packages updates                         [  ✔  ]
Installing dependencies and system packages                             [  ✔  ]
Installing Virtualmin 7 and all related packages                        [  ✔  ]
Installing Virtualmin 7 and all related packages updates                [  ✔  ]

▣▣▣ Phase 3 of 3: Configuration
[1/21] Configuring AWStats                                              [  ✔  ]
[2/21] Configuring Apache                                               [  ✔  ]
[3/21] Configuring Bind                                                 [  ✔  ]
[4/21] Configuring ClamAV                                               [  ✔  ]
[5/21] Configuring Dovecot                                              [  ✔  ]
[6/21] Configuring Etckeeper                                            [  ✔  ]
[7/21] Configuring Firewalld                                            [  ✔  ]
[8/21] Configuring MySQL                                                [  ✔  ]
[9/21] Configuring Postfix                                              [  ✔  ]
[10/21] Configuring ProFTPd                                             [  ✔  ]
[11/21] Configuring Procmail                                            [  ✔  ]
[12/21] Configuring Quotas                                                     
The filesystem / could not be remounted with quotas enabled.
You will need to reboot your system to enable quotas.                   [  ⚠  ]
[13/21] Configuring SASL                                                [  ✔  ]
[14/21] Configuring Shells                                              [  ✔  ]
[15/21] Configuring SpamAssassin                                        [  ✔  ]
[16/21] Configuring Status                                              [  ✔  ]
[17/21] Configuring Upgrade                                             [  ✔  ]
[18/21] Configuring Usermin                                             [  ✔  ]
[19/21] Configuring Webmin                                              [  ✔  ]
[20/21] Configuring Fail2banFirewalld                                   [  ✔  ]
[21/21] Configuring Virtualmin                                          [  ✔  ]
▣▣▣ Cleaning up

[SUCCESS] Installation Complete!
[SUCCESS] If there were no errors above, Virtualmin should be ready
[SUCCESS] to configure at https://cent9.technixleo.com:10000 (or
[SUCCESS] You may receive a security warning in your browser on your first visit.
[SUCCESS] Chromium based browsers, to bypass security warning screen may require
[SUCCESS] you to type `thisisunsafe` to get to the login page.

In the case you run into an error such as the one below;

[WARNING] Hostname  is not fully qualified.
[ERROR] Your system hostname centos9 is not fully qualified.
Please enter a fully qualified hostname

Use an example such as host.example.com i.e for our case, we utilized centos9.example.com and that is how we got to continue with our installation.

Reboot your system


Step 2. Setup Virtualmin on RHEL 9/ CentOS Stream 9

Go to your browser at https://[IP/Hostname]:10000 to perform the post-installation setup wizard.

This is the security warning that you may receive on your browser. Click on Advanced then on Accept Risk and Continue.

Login with root or a user with sudo ALL privileges and their consequent password. If your system does not have a password set for the root user, you may need to set a root password using the passwd command before you can log in on port 10000.

The post-installation wizard is shown below. Click on Next to start the process.

Choose How to use memory, that is if you want to use more RAM to improve the performance of Virtualmin.

Choose if you would want to filter incoming email which in turn generates a high CPU load. It all depends on your system.

Choose if to scan the virus or not using ClamAV

Choose the database to use.

Set a highly secure Password for the database chosen

Configure DNS by editing the nameserver.

The post-installation setup completes successfully.

At this point, you can choose to Return to Virtualmin or continue with additional post-installation features.

One is choosing how to store your Passwords.

The other is to choose the database memory size

You can also choose the SSL key directory

And create a nameserver.

This creates a nameserver that is saved. To change it, you will have to delete it first. The additional post-installation wizard comes to complete success and you can click on Finish.

The next page that opens is the Admin mode page where you can click on recheck configuration to ensure everything is configured correctly.

Then click on Return to the virtual server list.

You can click on the newly created domain to edit its details then click on Save Virtual Server.

The details are saved successfully. Click on Return to Virtual servers list.

Step 3. Navigating Virtualmin on RHEL 9/ CentOS Stream 9

The Left-hand menu contains the Webmin tab and the Virtualmin tab. The Webmin tab is the interface that provides general-purpose systems management features, such as user/group management, listing processes, managing installed packages, network settings, firewall settings, and more.

While the Virtualmin tab provides access to domain accounts management functionality, such as creating new domain accounts, new databases associated with those accounts, installing applications, and more.

Let us create a new virtual server with Virtualmin. To do so, follow the text below;

  • Go to create a Virtual Server. Choose the type of server to create, this can be Top Level server, Sub server, Alias of an existing server, and Alias of an existing server with email. Then enter the Domain name with a description and a Password. Once done, click on Create Server.

This essentially creates a user and group blog, sets a mailbox, configures DNS and Apache, and more.

To switch to the blog, Go to Administration Options and select the Switch To Server’s Admin.

Then select the Virtual Server details

The virtual server details will be shown below.

From this dashboard, the owner of a domain can add and edit users.

They can edit mailboxes.

They can also change the domain name.

Step 4. Install a WordPress Web Application

Virtualmin consists of install scripts that contain a list of applications you can install. Virtualmin GPL contains the basic applications available while Virtualmin Pro offers hundreds of more applications to install.

We are going to install a blog application. Scroll down and look for WordPress.

Scroll down at the very bottom and click on Show install options.

You can edit the options like if you want to use a different database or the directory to install the application under. Then click on Install Now to continue with the installation.

What Virtualmin essentially does during this process is install the latest version of WordPress available and installs it, configure PHP and database. Then there is a link that shows up below after installation and also the initial administration login details. Click on it to access WordPress.

The WordPress installation wizard opens. Log in with the initial credentials provided.

You can now start Blogging.

Step 5. Uninstall Virtualmin on RHEL 9/ CentOS Stream 9

To Uninstall Virtualmin from your system, use the flag –uninstall of the install script as root. This script is destructive and removes pretty much everything that Virtualmin installs from the core dependencies and should not e used in production environments.

# sh install.sh --uninstall

Running Virtualmin 7 pre-installation setup:
  Syncing system time ..
  .. done
  Updating CA certificates ..
  .. done


  This operation is very destructive. It removes nearly all of the packages
  installed by the Virtualmin installer. Never run this on a production system.

 Continue? (y/n) y


Virtualmin is a powerful web hosting control panel for Linux systems that keep your server under control. With Backup and Cloud Integration it makes it easy to keep backups of databases, mailboxes, and more. Virtualmin is encrypted with SSL and offers more security features like two-factor authentication using Google Authenticator or Authy, certificate-based authentication, firewall management, brute force protection, and IP access controls. Check below for more of our articles;


Please enter your comment!
Please enter your name here