DEV Community

Frank Durieux
Frank Durieux

Posted on Originally published at kyvian.io

How to apply only security updates on AlmaLinux, Rocky Linux and RHEL with dnf

Unlike apt, dnf can tell security fixes apart natively: each distribution publishes advisories in its repositories (ALSA for AlmaLinux, RLSA for Rocky, RHSA for Red Hat) with a severity and a list of CVEs. Here is how to list them, apply only those or only the most severe, automate them with dnf-automatic and check whether a reboot is needed. Real output from AlmaLinux 9.8.

The short answer

Goal Command
How many security advisories are pending? dnf updateinfo
Which packages, which advisories? dnf updateinfo list security
Simulate dnf upgrade --security --assumeno
Apply dnf upgrade --security
Only the most severe dnf upgrade --sec-severity=Critical (or Important)
Automate dnf-automatic with upgrade_type = security
Reboot needed? needs-restarting -r

These commands behave the same on AlmaLinux and Rocky Linux 8, 9 and 10 (dnf 4.7 to 4.20). RHEL ships the same dnf versions. One exception, covered below: dnf-automatic's reboot option does not exist on version 8.

How do you list pending security updates?

Start with the summary, which counts advisories by severity:

$ dnf updateinfo
Updates Information Summary: available
    12 Security notice(s)
         7 Important Security notice(s)
         5 Moderate Security notice(s)
Enter fullscreen mode Exit fullscreen mode

dnf check-update --security lists the packages involved. Its exit code is 100 when updates are available, 0 when there are none and 1 on error, which is handy in a monitoring check.

$ dnf check-update --security
coreutils-single.x86_64              8.32-41.el9_8.1                      baseos
curl-minimal.x86_64                  7.76.1-40.el9_8.7                    baseos
expat.x86_64                         2.5.0-6.el9_8.5                      baseos
(…)
openssl.x86_64                       1:3.5.8-1.el9_8                      baseos
openssl-libs.x86_64                  1:3.5.8-1.el9_8                      baseos
pam.x86_64                           1.5.1-28.el9_8.1                     baseos
vim-minimal.x86_64                   2:8.2.2637-26.el9_8.23               baseos
$ echo $?
100
Enter fullscreen mode Exit fullscreen mode

dnf updateinfo list security (or list --security) adds the advisory ID and severity for each package. On this server, 14 security lines out of 18 pending updates (excerpt):

$ dnf updateinfo list security
ALSA-2026:66403 Moderate/Sec.  coreutils-single-8.32-41.el9_8.1.x86_64
ALSA-2026:69126 Important/Sec. curl-minimal-7.76.1-40.el9_8.7.x86_64
ALSA-2026:72663 Important/Sec. expat-2.5.0-6.el9_8.5.x86_64
ALSA-2026:73512 Moderate/Sec.  gawk-5.1.0-6.el9_8.1.x86_64
ALSA-2026:67165 Important/Sec. openssl-1:3.5.8-1.el9_8.x86_64
ALSA-2026:67165 Important/Sec. openssl-libs-1:3.5.8-1.el9_8.x86_64
ALSA-2026:64815 Moderate/Sec.  pam-1.5.1-28.el9_8.1.x86_64
(…)
Enter fullscreen mode Exit fullscreen mode
# Rocky Linux 9: same commands, RLSA advisories
RLSA-2025:23343 Moderate/Sec.  binutils-2.35.2-67.el9_7.1.x86_64
RLSA-2025:0925  Moderate/Sec.  bzip2-libs-1.0.8-10.el9_5.x86_64
Enter fullscreen mode Exit fullscreen mode

To filter by severity: dnf updateinfo list --sec-severity=Important. The levels are Critical, Important, Moderate and Low. To also show each advisory's CVEs: dnf updateinfo list --security --with-cve.

How do you read an advisory?

$ dnf updateinfo info ALSA-2026:67165
===============================================================================
  Important: openssl security, bug fix, and enhancement update
===============================================================================
  Update ID: ALSA-2026:67165
       Type: security
    Updated: 2026-09-15 08:35:12
       CVEs: CVE-2026-14456
           : CVE-2026-14457
(…)
Description: OpenSSL is a toolkit that implements the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols, (…)
           : Security Fix(es):
           :   * openssl: OpenSSL: Denial of Service via unbounded memory growth in QUIC server (CVE-2026-14456)
Enter fullscreen mode Exit fullscreen mode

Each advisory gives its severity, the CVEs it fixes and one line per vulnerability: enough to judge how urgent it is, or to answer "is this server patched for that CVE?".

How do you simulate, then apply only security updates?

--assumeno resolves the transaction, prints it and answers "no" to the prompt:

$ sudo dnf upgrade --security --assumeno
Upgrading:
 coreutils-single        x86_64   8.32-41.el9_8.1             baseos      599 k
 curl-minimal            x86_64   7.76.1-40.el9_8.7           baseos      127 k
(…)
 openssl-fips-provider   x86_64   1:3.5.8-1.el9_8             baseos      813 k
 openssl-libs            x86_64   1:3.5.8-1.el9_8             baseos      2.3 M
 pam                     x86_64   1.5.1-28.el9_8.1            baseos      543 k
 vim-minimal             x86_64   2:8.2.2637-26.el9_8.23      baseos      675 k
Installing weak dependencies:
 gawk-all-langpacks      x86_64   5.1.0-6.el9_8.1             appstream   206 k

Transaction Summary
================================================================================
Install   1 Package
Upgrade  13 Packages

Total download size: 12 M
Operation aborted.
Enter fullscreen mode Exit fullscreen mode

Note the "Installing weak dependencies" line: even limited to security, an update can install a package that wasn't there before (here a weak dependency of gawk). To prevent it: --setopt=install_weak_deps=False. Drop --assumeno to apply. Afterwards, only updates without a security advisory are left:

$ sudo dnf -y upgrade --security
(…)
$ dnf check-update
gnutls.x86_64                          3.8.10-9.el9_8                     baseos
systemd.x86_64                         252-67.el9_8.6.alma.1              baseos
systemd-libs.x86_64                    252-67.el9_8.6.alma.1              baseos
(…)
Enter fullscreen mode Exit fullscreen mode

Can you target a severity, an advisory or a CVE?

# Only "Important" advisories (9 packages instead of 13 here)
sudo dnf upgrade --sec-severity=Important

# One specific advisory (openssl, openssl-libs, openssl-fips-provider)
sudo dnf upgrade --advisory=ALSA-2026:67165

# Packages that fix a given CVE
sudo dnf upgrade --cve=CVE-2026-14456

# The nearest fixed version rather than the latest one
sudo dnf upgrade-minimal --security
Enter fullscreen mode Exit fullscreen mode

All four work with --assumeno so you can check before applying. --advisory picks exactly the advisory's packages (here, the three OpenSSL packages). upgrade-minimal --security produces the same transaction as upgrade --security when the repository only offers one fixed version per package.

How do you automate it with dnf-automatic?

dnf-automatic reads /etc/dnf/automatic.conf. The setting that matters is upgrade_type:

# /etc/dnf/automatic.conf, [commands] section (excerpt, as shipped on AlmaLinux 9)
#  What kind of upgrade to perform:
# default                            = all available upgrades
# security                           = only the security upgrades
upgrade_type = security          # shipped as "default"
random_sleep = 0
download_updates = yes
apply_updates = no
reboot = never
Enter fullscreen mode Exit fullscreen mode

The package ships four systemd timers. dnf-automatic-install.timer downloads and installs regardless of apply_updates; dnf-automatic.timer follows the configuration file; -download and -notifyonly only download or notify. On AlmaLinux 9:

$ sudo dnf install dnf-automatic
$ sudo sed -i 's/^upgrade_type = default/upgrade_type = security/' /etc/dnf/automatic.conf
$ sudo systemctl enable --now dnf-automatic-install.timer
$ systemctl list-timers 'dnf-automatic*'
NEXT                        LEFT     LAST PASSED UNIT                        ACTIVATES
Sat 2026-10-10 06:02:08 UTC 22h left -    -      dnf-automatic-install.timer dnf-automatic-install.service
Enter fullscreen mode Exit fullscreen mode
$ journalctl -u dnf-automatic-install.service   # excerpt, different container from the simulation
srv dnf-automatic[100]: Install   1 Package
srv dnf-automatic[100]: Upgrade  14 Packages
srv dnf-automatic[100]: Updates completed at Fri Oct  9 07:22:29 2026
srv systemd[1]: Finished dnf automatic install updates.
Enter fullscreen mode Exit fullscreen mode

Two settings worth knowing. emit_via = stdio (as shipped) only writes the report to the systemd journal: to get an email, switch to emit_via = email and fill in the [email] section, which requires a reachable SMTP server. On versions 9 and 10, reboot accepts never, when-changed or when-needed: by default (the reboot_command setting) it runs shutdown -r +5, five minutes after the updates, with no further confirmation. On version 8, dnf-automatic 4.7 has no such option and silently ignores it.

Do you need to reboot after security updates?

needs-restarting -r compares the install time of critical packages (kernel, glibc, systemd…) with the boot time:

$ sudo dnf install yum-utils        # provides needs-restarting
$ needs-restarting -r; echo "exit code: $?"
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.
exit code: 0
Enter fullscreen mode Exit fullscreen mode

Exit code 1 means a reboot is recommended. The details, and the Debian and SUSE equivalents, are in how to check if a Linux server needs a reboot. For a mixed fleet, see also security updates with apt and security patches with zypper.

Doing this across a fleet (disclosure: I build Kyvian)

The Kyvian agent relies on the same advisories: it reads dnf check-update for the inventory and dnf updateinfo list security to flag security fixes, every 6 hours or on demand. The "Patch security" button runs dnf makecache then dnf update --security -y, after a confirmation that lists the steps and lets you copy the exact command. Reboot detection uses needs-restarting -r, so the same condition applies: yum-utils must be installed.

No hidden automation: nothing is applied without an action from you, or a maintenance window you scheduled (a reboot, a shutdown, or a command of your choice). The agent connects out over HTTPS, with no SSH port open. Details on RHEL and AlmaLinux patch management and Linux patch management. The Discovery plan covers 5 VMs for free, with no time limit and no credit card: try Kyvian.


Originally published on kyvian.io.

Top comments (0)