Oracle Linux 7 on Azure User Guide
Overview
This guide covers the deployment and configuration of Oracle Linux 7 on Microsoft Azure using cloudimg's pre configured virtual machine image from the Azure Marketplace.
Oracle Linux is a free, enterprise grade Linux distribution built by Oracle to be binary compatible with Red Hat Enterprise Linux 7. Oracle provides the binaries at no cost and permits redistribution, so there is no subscription and no licence key needed to use, patch or resell it. Version 7.9 is the final minor release in the Oracle Linux 7 family: there is no 7.10.
Oracle Linux ships two kernel lines, and this image keeps both: the Unbreakable Enterprise Kernel (UEK), an Oracle maintained kernel that boots by default, and the Red Hat Compatible Kernel (RHCK), the same 3.10 kernel line RHEL 7 uses. You can boot either.
⚠️ End of life status — read before deploying
Oracle Linux 7 reached the end of its free Premier support lifecycle on 31 December 2024. 7.9 is the terminal release, and Oracle no longer publishes new security errata to the free public update channel. This image is patched to the final available Oracle Linux 7.9 state at build time and is a fixed, capture date baseline — it does not keep receiving new upstream security fixes from the free channel. It is intended for legacy applications and compatibility testing that still require an Oracle Linux 7 or RHEL 7 compatible base.
You own ongoing patching. For continued security updates, attach an Oracle Linux Extended Support (ELS) subscription via ULN, or plan a migration to a supported release such as Oracle Linux 8, 9 or 10. Do not treat this image as a system that patches itself from the free channel.
What's included:
- Oracle Linux 7.9, binary compatible with RHEL 7
- Every update available on the accessible Oracle Linux 7 channels applied at build time (the terminal 7.9 patch state)
- Both kernel lines: Unbreakable Enterprise Kernel (booted by default) and the Red Hat Compatible Kernel
yum-cronarmed, so the machine applies whatever the accessible channels still carry (see the end of life note above — the free channel is frozen)- Azure Linux Agent (waagent) enabled for extensions, and cloud-init for Azure integration
- Chronyd for NTP time synchronisation
- SELinux in enforcing mode
ol7_latest,ol7_UEKR6andol7_addonsrepositories enabled, so your update path is intactfirewalldactive with SSH permitted, and therpcbind(port 111) and standalonednsmasq(port 53) services disabled so a fresh machine advertises only SSH- Gen2 Hyper V virtual machine support
- 24/7 cloudimg 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:
- The root account password is locked, so no one can log in as root with a password.
PasswordAuthenticationis disabled in the SSH daemon, so every login is by key.PermitRootLoginis set toprohibit-password, so root cannot be reached with a password even if one were later set.- The only key that works is the public key you supply when you create the virtual machine. Azure injects it into
azureuserat first boot, so no two machines you launch ever share a secret. - The machine identity and the SSH host keys are regenerated uniquely on every instance, so no two machines share a host key either.
- SELinux is left in enforcing mode, the Oracle Linux default.
rpcbind, the RPC port mapper on port 111, is disabled, and the standalonednsmasqresolver on port 53 is disabled, so a fresh machine advertises only SSH. Both are re enablable on demand, as shown in the networking section.
Because this is an end of life release, the security posture above is what the image ships with; new upstream vulnerabilities discovered after the capture date are not fixed by the free channel. Treat security hardening and patch sourcing (for example Oracle Linux ELS) as your responsibility.
Prerequisites
Before deploying this image, ensure 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.
Step 1: Deploy the Virtual Machine
Option A: Azure Portal
- Navigate to the Azure Marketplace and search for "Oracle Linux 7 cloudimg"
- Select the image and click Create
- Configure the basics:
- Subscription: Select your Azure subscription
- Resource Group: Create new or select existing
- Virtual Machine Name: Enter a name for your VM
- Region: Select your preferred Azure region
- Size:
Standard_B2srecommended - Under Administrator Account, select SSH public key and enter your key
- Under Inbound Port Rules, allow SSH (port 22)
- Click Review + Create, then Create
Option B: Azure CLI
az vm create \
--resource-group myResourceGroup \
--name my-oracle-linux-7-vm \
--image cloudimg:oracle-linux:oel7:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku Standard
Step 2: Connect via SSH
Run these on your own workstation, not on the VM. Find the public IP, then connect:
az vm show --resource-group myResourceGroup --name my-oracle-linux-7-vm --show-details --query publicIps -o tsv
ssh azureuser@<vm-ip>
There is no password to enter. If SSH asks you for one, the key you supplied at create time is not the key your client is offering.
Step 3: Confirm the release
Check that the machine is the Oracle Linux 7.9 release you expect:
cat /etc/oracle-release
grep -E '^(NAME|VERSION|ID|VERSION_ID|PLATFORM_ID)=' /etc/os-release
uname -rm
Expected output:
Oracle Linux Server release 7.9
NAME="Oracle Linux Server"
VERSION="7.9"
ID="ol"
VERSION_ID="7.9"
5.4.17-2136.338.4.2.el7uek.x86_64 x86_64

The el7uek tag on the kernel version shows the machine is running the Unbreakable Enterprise Kernel. Oracle Linux 7 also ships the Red Hat Compatible Kernel (a 3.10 el7 kernel) alongside it; the next step shows both.
Step 4: Check the patch level and the two kernel lines
The image is patched to the terminal Oracle Linux 7.9 state at build time. Because 7.9 is end of life, the free public update channel is frozen: yum check-update returns exit code 100 when updates are pending and 0 when the machine is already caught up to everything the accessible channels carry:
sudo yum -q check-update; echo "exit code: $?"
An exit code of 0 means there is nothing further to apply from the free channel. This does not mean the machine is free of vulnerabilities discovered after the capture date — see the end of life note at the top of this guide. For continued security updates, attach an Oracle Linux Extended Support subscription.
List the enabled repositories to confirm your update path is intact:
yum -q repolist enabled
Expected output:
repo id repo name status
ksplice-uptrack/7Server/x86_64 Ksplice Uptrack for Oracle Linux 26
ol7_UEKR6/x86_64 Latest Unbreakable Enterprise Kernel 1,128+273
ol7_addons/x86_64 Oracle Linux 7Server Add ons (x86_64 568+413
ol7_latest/x86_64 Oracle Linux 7Server Latest (x86_64) 22,056+5,373
Both kernel lines are installed and managed by yum. List them, and see which one is booted:
rpm -q kernel kernel-uek
uname -r
Expected output:
kernel-3.10.0-1160.119.1.0.5.el7.x86_64
kernel-uek-5.4.17-2136.338.4.2.el7uek.x86_64
5.4.17-2136.338.4.2.el7uek.x86_64
The UEK line (kernel-uek) is the default and is what uname -r reports. The RHCK line (kernel, the 3.10 el7 kernel) is available if you prefer strict RHEL kernel compatibility; select it from the GRUB menu at boot.

This image arms yum-cron, Oracle Linux 7's unattended updater, so the machine applies whatever the accessible channels still carry. On the frozen free channel that is effectively nothing new; the value of the armed updater is that the moment you attach an Oracle Linux Extended Support subscription, the mechanism is already in place. You can still run updates on your own schedule:
sudo yum -y update
Reboot if a new kernel was installed:
sudo systemctl reboot
Step 5: Verify the security posture
Confirm SELinux is enforcing, root is locked, and SSH is key only:
getenforce
sudo passwd -S root
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication|challengeresponseauthentication) '
Expected output:
Enforcing
root LK 2009-12-22 -1 -1 -1 -1 (Alternate authentication scheme in use.)
permitrootlogin without-password
passwordauthentication no
challengeresponseauthentication no

without-password is how OpenSSH reports the prohibit-password setting. Both names mean the same thing: root may not authenticate with a password. On Oracle Linux 7's OpenSSH 7.4, ChallengeResponseAuthentication is the keyword that controls the interactive password path, and it is disabled here.
Step 6: Verify Azure integration
Confirm the Azure Linux Agent, cloud-init and time synchronisation are healthy, that the unattended updater is armed, and check your resources:
systemctl is-active waagent
systemctl is-enabled waagent
cloud-init --version
systemctl is-enabled yum-cron.service
systemctl is-active chronyd
df -h /
free -h
Expected output:
active
enabled
/bin/cloud-init 19.4
enabled
active
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 30G 6.5G 21G 24% /
total used free shared buff/cache available
Mem: 3.5G 202M 2.7G 16M 614M 3.1G

waagent is what lets Azure run extensions, resize the OS disk and report VM health, so it is enabled and active. On this image cloud-init handles provisioning (injecting your SSH key and regenerating the per VM host keys), and waagent runs the extension handler.
Step 7: Networking and the firewall
The Azure Network Security Group is the outer control plane for inbound and outbound traffic, and it is the first place you open a port. The image advertises a single inbound port, SSH on 22.
Confirm what is actually listening before you open anything:
ss -tlnp
On a fresh machine the only external listener is sshd on port 22. rpcbind (port 111) and the standalone dnsmasq resolver (port 53) are disabled on this image, so those ports are closed by default.
This build also runs a host firewall. firewalld is active and enabled, using the public zone, and it already permits SSH. Inspect it with:
sudo firewall-cmd --state
sudo firewall-cmd --list-all
The public zone lists ssh among its allowed services, which is why your key based login works out of the box. To expose another service, open it in both the Azure NSG and firewalld. For example, to allow HTTPS:
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
Always keep the ssh service allowed so a firewall change does not lock you out.
If you need NFSv3, which relies on the RPC port mapper, re enable rpcbind:
sudo systemctl enable --now rpcbind.socket
NFSv4 does not need rpcbind and works without this step. If you want a local caching DNS resolver, re enable dnsmasq with sudo systemctl enable --now dnsmasq.
Step 8: Install software and add a user
Install packages from the enabled repositories in the usual way, for example:
sudo yum -y install git
To add another administrator, create the account with sudo adduser <name>, 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 the .ssh directory 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:
getent group wheel
Common Use Cases
- Hosting legacy applications that require an Oracle Linux 7 or RHEL 7 base
- Compatibility and regression testing against the Oracle Linux 7 platform
- Lift and shift of existing Oracle Linux 7 workloads to Azure
Troubleshooting
Cannot connect via SSH
- Verify the VM is in Running state in the Azure Portal
- Check that port 22 is allowed in the Network Security Group
- Ensure you are using the correct username:
azureuser - Verify 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 actually offering, run ssh -v azureuser@<vm-ip> from your workstation and look for the Offering public key lines.
Azure agent not running
sudo systemctl status waagent
sudo systemctl enable --now waagent
Package manager issues
Refresh the metadata cache first:
sudo yum clean all
sudo yum makecache
If repositories are unreachable, check DNS resolution. getent is always present and resolves through the same system resolver:
getent hosts yum.oracle.com
If a repository has been moved to Oracle's archive, point its baseurl at https://yum.oracle.com/repo/OracleLinux/OL7/.... Install bind-utils if you want dig and nslookup available.
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
End of life. Oracle Linux 7 reached the end of its free Premier support lifecycle on 31 December 2024, and 7.9 is the terminal release. This image is patched to the final available Oracle Linux 7.9 state at build time; the free public channel publishes no further security errata. For continued security updates, attach an Oracle Linux Extended Support subscription via ULN, or migrate to a supported release such as Oracle Linux 8, 9 or 10. You own ongoing patching for this image.
Oracle Linux is free and open source, and Oracle explicitly permits its redistribution. It is not covered by a single licence: it is a distribution assembled from thousands of independently packaged components, each carrying its own terms, including the GPL, LGPL, MIT, BSD, Apache 2.0 and MPL. Every package's terms are readable with rpm -qi <package> and under /usr/share/licenses/. No subscription, licence key or Red Hat entitlement is required. A paid Oracle Linux Support subscription is optional and is not needed to use, patch or resell the operating system.
Oracle and Oracle Linux are trademarks of Oracle Corporation. The names are used here nominatively, only to identify the distribution this image contains. cloudimg is not affiliated with, endorsed by or sponsored by Oracle Corporation.
Support
For assistance with this image, contact cloudimg support:
- Website: www.cloudimg.co.uk
- Product Catalogue: www.cloudimg.co.uk/products
- User Guides: www.cloudimg.co.uk/guides
- SLA: 24 hour response guaranteed