Deployment guide

AlmaLinux 8.10

Overview

AlmaLinux is a community-owned enterprise Linux distribution, produced by the AlmaLinux OS Foundation to be binary compatible with Red Hat Enterprise Linux 8. Version 8.10 is the final minor release in the RHEL 8 family, so there is no 8.11. AlmaLinux 8 remains supported until 2029, and security backports continue to flow into the 8.10 maintenance stream. A fully updated machine still reports release 8.10 while carrying current fixes.

This guide covers deploying and configuring AlmaLinux 8.10 on Microsoft Azure, using SecureAnyCloud's preconfigured virtual machine image from the Azure Marketplace.

What you get:

  • AlmaLinux 8.10, binary compatible with RHEL 8
  • Every available 8.10 maintenance stream update applied at build time
  • dnf-automatic armed, so the machine keeps applying security updates on its own
  • Azure Linux Agent (waagent) and cloud-init for Azure integration
  • Chronyd for NTP time synchronization
  • SELinux in enforcing mode
  • BaseOS, AppStream and Extras repositories enabled, so your update path stays intact
  • Gen2 Hyper-V virtual machine support
  • 24/7 SecureAnyCloud support

Platform: Microsoft Azure (Gen2 Hyper-V). Default user: azureuser.

Security posture

This image ships with no known credential. There is no default password and no baked-in SSH key.

  • Root is locked. The root account password is locked, so no one can log in as root with a password.
  • Key-only SSH. PasswordAuthentication is disabled in the SSH daemon, so every login is by key.
  • Root login restricted. PermitRootLogin is set to prohibit-password, so root cannot be reached with a password even if one is set later.
  • Your key only. The only key that works is the public key you supply when you create the virtual machine. Azure injects it into azureuser at first boot, so no two machines you launch ever share a secret.
  • Per-instance identity. The machine identity and the SSH host keys are regenerated uniquely on every instance, so no two machines share a host key either.
  • SELinux enforcing. SELinux stays in enforcing mode, the AlmaLinux default.

Prerequisites

Before you deploy this image, make sure you have:

  • An active Microsoft Azure subscription
  • Access to the Azure Portal or Azure CLI
  • An SSH key pair for Linux VM access
  • Familiarity with Azure VM management

Recommended VM size: Standard_B2s (2 vCPU, 4 GB RAM) or larger.

1

Deploy the virtual machine

Option A: Azure Portal

  • Open the Azure Marketplace and search for "AlmaLinux 8.10 SecureAnyCloud".
  • Select the image and choose Create.
  • On the Basics tab, set Subscription to your Azure subscription, Resource Group to a new or existing group, Virtual Machine Name to a name for your VM, Region to your preferred Azure region, and Size to Standard_B2s (recommended).
  • Under Administrator Account, select SSH public key and enter your key.
  • Under Inbound Port Rules, allow SSH (port 22).
  • Select Review + Create, then Create.

Option B: Azure CLI

az vm image terms accept --urn sac1647283583153:almalinux-8-10:default:latest
az vm create \
  --resource-group myResourceGroup \
  --name my-almalinux-8-10-vm \
  --image sac1647283583153:almalinux-8-10:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard
2

Connect via SSH

Run these commands on your own workstation, not on the VM. Find the public IP, then connect:

az vm show --resource-group myResourceGroup --name my-almalinux-8-10-vm --show-details --query publicIps -o tsv ssh azureuser@<vm-ip>

There is no password to enter. If SSH asks for one, your client is not offering the key you supplied at create time.

3

Confirm the release

Check that the machine is the AlmaLinux 8.10 release you expect:

cat /etc/almalinux-release grep -E '^(NAME|VERSION|ID|PLATFORM_ID)=' /etc/os-release uname -rm

Expected output:

AlmaLinux release 8.10 (Cerulean Leopard) NAME="AlmaLinux" VERSION="8.10 (Cerulean Leopard)" ID="almalinux" PLATFORM_ID="platform:el8" 4.18.0-553.153.1.el8_10.x86_64 x86_64

The kernel version carries an el8_10 tag. This tag shows that the machine tracks the 8.10 maintenance stream rather than an older 8 series minor release.

4

Check the patch level

The image is fully updated at build time. dnf check-update returns exit code 100 when updates are pending and 0 when none are. Check now:

sudo dnf check-update echo "exit code: $?"

List the enabled repositories to confirm your update path is intact:

dnf repolist --enabled

Expected output:

repo id repo name appstream AlmaLinux 8 - AppStream baseos AlmaLinux 8 - BaseOS extras AlmaLinux 8 - Extras

Because 8.10 is the last minor release in the RHEL 8 family, applying updates keeps you on 8.10 rather than moving you to a new point release.

This image also arms dnf-automatic, so security updates are downloaded and applied on a timer without any action from you. You can still run updates on your own schedule:

sudo dnf upgrade -y

Reboot if a new kernel was installed:

sudo systemctl reboot
5

Verify the security posture

Confirm that SELinux is enforcing, root is locked and SSH is key-only:

getenforce
sudo passwd -S root
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication|pubkeyauthentication)'

Expected output:

Enforcing root LK 2009-12-22 -1 -1 -1 -1 (Alternate authentication scheme in use.) permitrootlogin without-password pubkeyauthentication yes passwordauthentication no

without-password is how OpenSSH reports the prohibit-password setting. Both names mean the same thing: root may not authenticate with a password.

6

Verify Azure integration and unattended updates

Confirm that the Azure Linux Agent, cloud-init and time synchronization are healthy and that unattended security updates are armed. The last two commands show your disk and memory resources:

systemctl is-active waagent
systemctl is-enabled waagent cloud-init --version
systemctl is-enabled dnf-automatic.timer
systemctl is-active chronyd df -h / free -h

waagent lets Azure provision your SSH key, resize the OS disk, run extensions and report VM health, so it should always be active and enabled. An enabled dnf-automatic.timer keeps the machine applying security updates on its own after launch.

7

Networking and the firewall

The Azure Network Security Group (NSG) controls inbound and outbound traffic. It is the first, and usually the only, place you need to open a port. The image advertises a single inbound port, SSH on 22.

firewalld is installed on this image but left inactive and disabled. It does not filter traffic by default, so your NSG rules take effect exactly as written, with no second layer to keep in sync.

Confirm what is listening before you open anything:

ss -tlnp

On a fresh machine, the listeners are sshd on port 22 and rpcbind on port 111, a local RPC helper. Only port 22 is advertised for inbound access, and the Azure NSG governs what is reachable from outside.

If your policy also requires a host firewall, enable the one that is already installed:

sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-port=443/tcp sudo firewall-cmd --reload

Once firewalld is running, a port must be open in both the Azure NSG and firewalld before traffic reaches your service. Add the SSH service first, as shown above, so that enabling the firewall does not lock you out.

8

Install software

AppStream carries the application packages. Search it, then install what you need:

dnf search nginx

AlmaLinux 8 uses modules. AppStream ships several versions of the same language or database as separate streams, so you can pick a version rather than take the default:

dnf module list nginx

Install a package and enable it in the usual way, for example sudo dnf install -y nginx followed by sudo systemctl enable --now nginx.

To add another administrator, create the account with sudo adduser <name> and add it to the wheel group with sudo usermod -aG wheel <name>. Then copy your public key into /home/<name>/.ssh/authorized_keys with mode 600, and set the .ssh directory to mode 700, owned by that user.

The image ships with no human accounts at all, so azureuser is the only login until you add one. Check the wheel group:

getent group wheel

Common use cases

  • RHEL 8-compatible application hosting
  • Long-lived enterprise server workloads
  • A base for software certified on the 8 platform
  • A migration target for CentOS 8 estates

Troubleshooting

Cannot connect via SSH

  • Verify that the VM is in the Running state in the Azure Portal.
  • Check that port 22 is allowed in the Network Security Group.
  • Make sure you are using the correct username: azureuser.
  • Verify that your SSH key matches the one you supplied at create time. Password login is disabled by design, so a wrong key cannot fall back to a password prompt.

To see which key your client is offering, run ssh -v azureuser@<vm-ip> from your workstation and look for the Offering public key lines.

Azure agent not running

Check the agent status:

sudo systemctl status waagent

If it is not running, start it on the VM:

sudo systemctl enable --now waagent

Package manager issues

Refresh the metadata cache first:

sudo dnf clean all
sudo dnf makecache

If repositories are unreachable, check DNS resolution. This image is minimal, so nslookup and dig are not installed. getent is always present and resolves through the same system resolver:

getent hosts repo.almalinux.org

Install bind-utils if you want dig and nslookup.

A service is blocked and the logs mention SELinux

SELinux is enforcing on this image. Rather than disabling it, look at what was denied. On a healthy machine there are no recent denials, so the command reports none:

sudo ausearch -m AVC -ts recent 2>/dev/null || echo "no recent AVC denials"

Important notes

AlmaLinux is free and open source. It is not covered by a single licence. It is a distribution assembled from thousands of independently packaged components, each with its own terms, including the GPL, LGPL, MIT, BSD, Apache 2.0 and MPL. You can read every package's terms with rpm -qi <package> and under /usr/share/licenses/. No subscription, licence key or Red Hat entitlement is required.

AlmaLinux 8 is supported until 2029. Plan a move to an AlmaLinux 9 or 10 image before that date for workloads that need to outlive it.

AlmaLinux is a trademark of the AlmaLinux OS Foundation. The name is used here nominatively, only to identify the distribution this image contains. SecureAnyCloud is not affiliated with, endorsed by or sponsored by the AlmaLinux OS Foundation.

Support

For assistance with this image, contact SecureAnyCloud support:

  • Website: secureanycloud.com
  • Product catalogue: secureanycloud.com/products
  • User guides: secureanycloud.com/guides
  • SLA: 24 hour response guaranteed

Deploy on Azure

Launch AlmaLinux 8.10 on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure