Lynis: Panduan Audit Hardening Linux & CIS Benchmark Compliance 2026

Panduan praktis Lynis 3.1.4 untuk audit hardening Linux: instalasi, Hardening Index, profil custom, mode pentest, perbandingan dengan OpenSCAP, hingga otomatisasi CI/CD.

Diperbarui: 28 Mei 2026

Lynis adalah tool audit hardening Linux open-source dari CISOfy yang memindai konfigurasi server secara otomatis, menghitung Hardening Index 0–100, dan memetakan temuan ke kontrol CIS Benchmark, PCI-DSS, HIPAA, serta ISO 27001. Saya menjalankannya pada setiap engagement pentest karena 300+ pemeriksaannya menemukan misconfiguration yang lolos dari OpenSCAP. Contohnya: kernel sysctl yang lupa di-tune, SSH cipher lemah, paket dengan SUID yang tidak perlu. Panduan ini menunjukkan cara memasang Lynis 3.1.4 (rilis Maret 2026), menjalankan audit, dan menaikkan Hardening Index dari sekitar 60 ke 85+ pada Ubuntu 24.04 atau Rocky Linux 9.

  • Lynis 3.1.4 menjalankan 300+ pemeriksaan hardening tanpa agen. Cukup butuh shell akses dan privilese root selama eksekusi.
  • Hardening Index dihitung dari rasio test yang lulus terhadap total test relevan. Target realistis untuk server produksi ada di kisaran 80–90.
  • Profil custom (custom.prf) menyembunyikan kontrol yang tidak relevan untuk role server tertentu, sehingga skor tidak terdistorsi.
  • Mode --pentest dijalankan tanpa root untuk simulasi attacker yang sudah dapat user shell. Sangat penting bagi tim red team.
  • Integrasi dengan cron plus Lynis Enterprise (atau Wazuh) mengubah audit one-shot menjadi continuous compliance monitoring.
  • Lynis melengkapi, bukan menggantikan, OpenSCAP. Lynis menang di temuan praktis, OpenSCAP menang di laporan SCAP-format untuk auditor.

Apa itu Lynis dan kapan menggunakannya?

Lynis adalah security auditing tool berbasis shell script yang dikembangkan oleh CISOfy sejak 2007. Berbeda dengan vulnerability scanner seperti OpenVAS yang fokus mencari CVE pada paket, Lynis menilai cara sistem dikonfigurasi. Ia membaca /etc/ssh/sshd_config, /etc/sysctl.conf, kebijakan PAM, status SELinux, mount option, password aging, dan ratusan parameter lain, lalu memberi rekomendasi sesuai best practice.

Sebagai pentester, saya melihat tool ini paling berguna di tiga skenario. Pertama, baseline audit server baru sebelum masuk produksi. Hardening Index awal biasanya 55–65 untuk image cloud standar dan harus dinaikkan. Kedua, compliance reporting ketika klien meminta bukti kepatuhan CIS Benchmark Level 1 atau PCI-DSS. Ketiga, incident response setelah breach, untuk menemukan misconfiguration mana yang mungkin dimanfaatkan attacker.

Honestly, Lynis open-source (GPL v3) dan gratis sepenuhnya. Versi Lynis Enterprise berbayar menambahkan dashboard sentral, asset management, dan compliance mapping otomatis ke 15+ framework. Saya rekomendasikan ini hanya untuk organisasi dengan 50+ server. Untuk tim kecil, Lynis community edition plus script reporting sendiri sudah lebih dari cukup.

Instalasi Lynis di Ubuntu 24.04 dan Rocky Linux 9

Ada tiga metode instalasi. Untuk audit produksi, saya selalu memilih instalasi dari source git karena versi di repository distro sering tertinggal 6–12 bulan dan menggunakan dataset test yang stale. Pastikan ownership /usr/local/lynis milik root, bukan user non-privileged. Lynis menolak menjalankan audit jika direktori bisa ditulis oleh user lain (security feature, jangan dimatikan).

# Metode 1: Source (RECOMMENDED untuk audit produksi)
cd /usr/local
sudo git clone https://github.com/CISOfy/lynis.git
sudo chown -R root:root lynis
cd lynis
sudo ./lynis show version
# Output: 3.1.4

# Metode 2: Repository CISOfy (Ubuntu/Debian)
curl -fsSL https://packages.cisofy.com/keys/cisofy-software-public.key \
    | sudo gpg --dearmor -o /usr/share/keyrings/cisofy-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cisofy-archive-keyring.gpg] \
    https://packages.cisofy.com/community/lynis/deb/ stable main" \
    | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
sudo apt update && sudo apt install -y lynis

# Metode 3: DNF (Rocky Linux 9 / RHEL 9)
sudo dnf install -y epel-release
sudo dnf install -y lynis

Verifikasi integritas binary sebelum digunakan. CISOfy tidak menyediakan signature GPG terpisah untuk source tarball, jadi git clone HTTPS sudah memberi jaminan transport. Jika Anda men-download tarball, periksa SHA256 yang dipublikasikan di halaman download resmi CISOfy.

Menjalankan audit pertama dan membaca Hardening Index

Perintah dasar audit adalah lynis audit system. Mode ini menjalankan seluruh test suite, sekitar 280 test pada Ubuntu 24.04 minimal, lebih banyak jika Docker, MySQL, atau Apache terdeteksi. Lama eksekusi 2–4 menit pada VM modern. Output dibagi menjadi tiga bagian: detail per kategori (mengalir real-time), ringkasan dengan warning plus suggestion count, dan path ke log file.

# Audit penuh dengan output verbose
sudo lynis audit system --verbose

# Ringkasan hasil:
# Hardening index : 64 [###########         ]
# Tests performed : 281
# Plugins enabled : 0

# Lihat warning saja (action item prioritas tinggi)
sudo lynis audit system --quick --no-colors 2>&1 | grep -E "^\s+!"

# Detail lengkap di report file
sudo cat /var/log/lynis-report.dat | grep -E "^warning|^suggestion"

Hardening Index dihitung sebagai (tests_passed × bobot) / (tests_relevant × bobot), dikalikan 100. Setiap test punya bobot internal. Kegagalan pada SSH PermitRootLogin jauh lebih berat dari kegagalan pada konfigurasi NTP minor. Skor 60–69 normal untuk install OS default, 70–79 untuk server yang sudah di-hardening dasar, 80–89 untuk produksi yang serius, 90+ jarang dicapai tanpa profil custom.

Dua file output penting: /var/log/lynis.log (transcript lengkap setiap test) dan /var/log/lynis-report.dat (key=value, mesin-readable untuk parsing). Selalu simpan kedua file sebagai baseline sebelum melakukan hardening. Diff terhadap audit berikutnya akan menunjukkan progres yang konkret dan, jujur saja, sangat memuaskan untuk dilihat.

Kategori pemeriksaan utama yang dijalankan Lynis

Lynis mengelompokkan test ke sekitar 60 kategori. Berikut yang paling sering menghasilkan finding pada audit real-world yang saya lakukan:

KategoriKodeYang diperiksa
Boot & servicesBOOT-*Bootloader password, single-user mode protection, systemd target
KernelKRNL-*sysctl hardening, kernel runtime params, kernel modules loaded
AuthenticationAUTH-*PAM modules, password aging, sudoers, login.defs
SSHSSH-*sshd_config parameters: PermitRootLogin, MaxAuthTries, Ciphers
File systemsFILE-*Mount options (nodev, nosuid, noexec), partisi terpisah
NetworkingNETW-*Listening ports, DNS, IPv6 config, port redirect
FirewallFIRE-*iptables/nftables/ufw rules, default policy
LoggingLOGG-*syslog config, log rotation, audit daemon
ContainersCONT-*Docker daemon config, seccomp, AppArmor profile
Hardening toolsHRDN-*SELinux/AppArmor status, compiler binaries, SUID files

Untuk mempelajari konfigurasi MAC yang sering dilaporkan kategori HRDN, lihat panduan praktis SELinux dan AppArmor untuk hardening Linux. Kategori FIRE biasanya menemukan rule yang hilang; saya membahas konfigurasi default-deny modern di panduan nftables untuk firewall Linux.

Bagaimana cara meningkatkan Hardening Index?

Pendekatan yang saya gunakan: jangan kejar skor 100. Skor sempurna biasanya berarti Anda menyembunyikan test (skip) tanpa benar-benar memperbaiki, atau menonaktifkan fungsi yang dibutuhkan aplikasi. Target realistis ada di kisaran 82–88, dengan setiap suggestion didokumentasikan sebagai "fixed", "accepted risk", atau "not applicable".

So, mari ke quick wins yang biasanya menaikkan Hardening Index 15–20 poin:

# 1. SSH hardening: patch finding kategori SSH-*
sudo tee -a /etc/ssh/sshd_config.d/99-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 0
AllowTcpForwarding no
X11Forwarding no
LoginGraceTime 30
EOF
sudo systemctl restart ssh

# 2. Kernel hardening via sysctl: patch finding KRNL-*
sudo tee /etc/sysctl.d/99-lynis-hardening.conf <<'EOF'
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.sysrq = 0
kernel.unprivileged_bpf_disabled = 1
kernel.yama.ptrace_scope = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.log_martians = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.suid_dumpable = 0
EOF
sudo sysctl --system

# 3. Install paket hardening yang Lynis cari
sudo apt install -y apt-show-versions debsums acct \
    auditd aide arpwatch rkhunter chkrootkit fail2ban

# 4. Aktifkan AIDE untuk file integrity monitoring
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 5. Compiler restrictions (cegah kompilasi attacker on-box)
sudo chmod 700 /usr/bin/cc /usr/bin/gcc 2>/dev/null || true

Jalankan ulang sudo lynis audit system setelah setiap kelompok perubahan dan bandingkan field hardening_index= di report.dat. Kenaikan tidak selalu monoton. Beberapa test baru mungkin muncul (misalnya test AIDE setelah AIDE terinstall) yang awalnya gagal sampai konfigurasinya selesai. Saya pernah panik sebentar saat skor turun dari 71 ke 68, sebelum sadar bahwa kategori HIDS baru saja aktif.

Membuat profil custom dan skip test

Test yang tidak relevan akan mendistorsi Hardening Index. Contoh: server headless tidak butuh test X11, web server reverse-proxy tidak butuh test SMTP. Gunakan custom.prf untuk skip test secara eksplisit dengan justifikasi.

# /etc/lynis/custom.prf
# Skip test yang tidak applicable plus alasan

# Server tidak menjalankan mail server
skip-test=MAIL-8818
skip-test=MAIL-8820

# Tidak menggunakan NIS (legacy)
skip-test=AUTH-9216

# Tidak ada GUI / X11
skip-test=BANN-7126
skip-test=BANN-7130

# Customize machine role (server)
machine-role=server

# Customize purpose
purpose="Production web tier - Nginx + PHP-FPM"

# Test yang HARUS lulus (gagalkan audit jika tidak)
test-fail-on=SSH-7408
test-fail-on=AUTH-9282

Jalankan dengan profil: sudo lynis audit system --profile /etc/lynis/custom.prf. Untuk fleet management, simpan profile di config-management repo (Ansible, SaltStack) lalu deploy ke setiap server berdasarkan role. Saya juga sering memakai pendekatan ini saat audit klien dengan compliance framework spesifik, jadi tinggal bikin profile berbeda untuk PCI-DSS, HIPAA, atau ISO 27001 audit framework sehingga laporan langsung relevan.

Mode pentest dan audit forensik

Mode --pentest menjalankan Lynis tanpa privilese root, mensimulasikan attacker yang sudah mendapat unprivileged shell (misalnya via SSRF plus reverse shell). Subset test berkurang ke sekitar 150 (hanya yang bisa dijalankan tanpa root), tapi temuannya cukup brutal: SUID binaries yang exploitable, secret di environment variable, file world-readable yang berisi credential, paket dengan known privilege escalation CVE.

# Jalankan sebagai unprivileged user (TIDAK menggunakan sudo)
lynis audit system --pentest --verbose

# Audit Dockerfile (static analysis)
sudo lynis audit dockerfile /path/to/Dockerfile

# Mode forensik untuk image disk yang di-mount read-only
sudo lynis audit system --forensics \
    --rootdir /mnt/forensic-image

Hasil pentest mode adalah daftar paths-of-least-resistance untuk privilege escalation. Pasangkan dengan tool seperti linpeas atau linux-exploit-suggester untuk coverage maksimal. Mode --forensics berguna saat menganalisis disk image dari incident, karena Lynis membaca konfigurasi tanpa booting OS target — cocok untuk investigasi cold-system.

Apa perbedaan Lynis dan OpenSCAP?

Pertanyaan ini sering muncul saat tim compliance mengevaluasi tool audit. Singkatnya: keduanya melengkapi, bukan menggantikan. OpenSCAP menggunakan format SCAP standar NIST dan menghasilkan laporan yang langsung diterima auditor PCI-DSS atau STIG. Lynis menghasilkan finding praktis dengan remediation command, jadi lebih cocok untuk engineer yang men-deploy hardening.

AspekLynisOpenSCAP
Format laporanPlain text + report.datSCAP XML, HTML, ARF
SkorHardening Index 0–100Pass/fail per rule
Compliance mappingManual / Enterprise editionNative (DISA STIG, USGCB, PCI)
RemediationSuggestion text + URLBash/Ansible playbook otomatis
DependencyShell sajalibopenscap + content packages
Frekuensi update contentMingguan (git)Per rilis distro
Container auditYa, mode dockerfile/imageTerbatas, butuh oscap-docker
Cocok untukEngineer, pentesterAuditor, compliance officer

Praktik terbaik di organisasi yang saya audit: jalankan Lynis mingguan via cron untuk continuous hardening monitoring oleh tim ops, lalu jalankan OpenSCAP kuartalan untuk evidence package compliance officer. Dua tool, dua audience, dua tujuan berbeda.

Otomatisasi audit harian dengan cron dan reporting

Audit one-shot hanya berguna sekali. Untuk monitoring continuous, jadwalkan Lynis via cron dan kirim diff ke channel ops (Slack, email, atau SIEM). Strategi yang saya pakai untuk fleet 20+ server kira-kira seperti ini:

# /etc/cron.d/lynis-daily
0 3 * * * root /usr/local/bin/lynis-daily.sh

# /usr/local/bin/lynis-daily.sh
#!/usr/bin/env bash
set -euo pipefail

LOG_DIR=/var/log/lynis-history
mkdir -p "$LOG_DIR"
TODAY=$(date +%Y-%m-%d)
HOST=$(hostname -s)

# Jalankan audit quiet, simpan report
/usr/local/lynis/lynis audit system --quiet --no-colors \
    --report-file "$LOG_DIR/report-$TODAY.dat" \
    --log-file   "$LOG_DIR/audit-$TODAY.log"

# Ekstrak Hardening Index
SCORE=$(grep "^hardening_index=" "$LOG_DIR/report-$TODAY.dat" | cut -d= -f2)
WARN=$(grep -c "^warning\[" "$LOG_DIR/report-$TODAY.dat" || true)

# Compare dengan kemarin
YESTERDAY=$(date -d 'yesterday' +%Y-%m-%d)
PREV_SCORE=$(grep "^hardening_index=" "$LOG_DIR/report-$YESTERDAY.dat" \
             2>/dev/null | cut -d= -f2 || echo "$SCORE")
DELTA=$((SCORE - PREV_SCORE))

# Alert via webhook jika skor turun
if [ "$DELTA" -lt 0 ]; then
    curl -sS -X POST -H 'Content-Type: application/json' \
        -d "{\"text\":\":warning: Lynis score di $HOST turun $DELTA -> $SCORE (warnings: $WARN)\"}" \
        "$SLACK_WEBHOOK_URL"
fi

# Rotasi: simpan 90 hari
find "$LOG_DIR" -mtime +90 -delete

Untuk integrasi yang lebih dalam dengan SIEM, parse report.dat dan kirim sebagai JSON ke Elasticsearch atau Wazuh. Field key seperti warning[], suggestion[], dan hardening_index mudah di-extract dengan awk -F=. Untuk perlindungan SSH yang sering jadi sumber warning, lengkapi audit dengan Fail2ban untuk SSH brute force protection.

Integrasi Lynis ke pipeline DevSecOps

Untuk infrastructure-as-code, jalankan Lynis di tahap testing pipeline dan gate deployment jika Hardening Index turun di bawah threshold. Pendekatan ini mencegah configuration drift sekaligus menjadikan hardening bagian dari quality gate, bukan afterthought yang baru diingat menjelang audit eksternal.

# .github/workflows/hardening-audit.yml
name: Lynis Hardening Audit
on:
  pull_request:
    paths:
      - 'ansible/**'
      - 'packer/**'
  schedule:
    - cron: '0 6 * * *'

jobs:
  audit:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4

      - name: Build test VM with Packer
        run: packer build hardened-base.pkr.hcl

      - name: Install Lynis
        run: |
          sudo git clone https://github.com/CISOfy/lynis.git /opt/lynis
          sudo chown -R root:root /opt/lynis

      - name: Run audit
        run: |
          sudo /opt/lynis/lynis audit system --quick --no-colors \
            --report-file /tmp/report.dat

      - name: Check threshold
        run: |
          SCORE=$(grep ^hardening_index= /tmp/report.dat | cut -d= -f2)
          echo "Hardening Index: $SCORE"
          if [ "$SCORE" -lt 80 ]; then
            echo "::error::Hardening Index $SCORE di bawah threshold 80"
            exit 1
          fi

      - uses: actions/upload-artifact@v4
        with:
          name: lynis-report
          path: /tmp/report.dat

Untuk GitLab CI atau Jenkins, polanya identik. Yang penting: fail pipeline pada penurunan skor, bukan hanya pada skor mutlak. Pendekatan ini jauh lebih realistis untuk codebase legacy yang sedang ditingkatkan bertahap. Referensi resmi paling lengkap untuk konfigurasi dan plugin ada di dokumentasi Lynis CISOfy, sementara tabel kontrol CIS yang dipetakan tersedia di CIS Benchmarks resmi.

Pertanyaan yang Sering Diajukan

Apakah Lynis gratis untuk penggunaan komersial?

Ya. Lynis community edition dilisensikan di bawah GPL v3 dan boleh digunakan untuk audit komersial, internal, maupun klien tanpa biaya. Yang berbayar hanya Lynis Enterprise (dashboard sentral, compliance mapping otomatis, SLA support) yang ditujukan untuk fleet besar 50+ server.

Bagaimana cara meng-update database test Lynis?

Jika dipasang dari git: cd /usr/local/lynis && sudo git pull. Dari repository CISOfy: sudo apt update && sudo apt upgrade lynis. Periksa versi dengan lynis show version, minimal 3.1.4 untuk dukungan kernel 6.8 dan systemd 256 terbaru.

Berapa skor Hardening Index yang dianggap "baik"?

Tidak ada threshold universal. Sebagai rule of thumb pentester: 80+ baik untuk server produksi internet-facing, 70+ acceptable untuk internal services, di bawah 60 menandakan hardening dasar belum dilakukan. Lebih penting dari skor absolut adalah trend, jadi skor harus naik atau stabil, jangan turun.

Apakah Lynis bisa mengaudit container Docker?

Ya, dengan dua mode: lynis audit dockerfile /path/Dockerfile untuk static analysis Dockerfile, dan lynis audit system dijalankan di dalam container running untuk audit runtime. Untuk image scanning yang fokus CVE, kombinasikan dengan Trivy. Lynis untuk konfigurasi, Trivy untuk vulnerability database.

Mengapa beberapa test Lynis dilewati dengan status "skipped"?

Test dilewati karena tiga alasan: dependency tidak terdeteksi (misalnya test MySQL pada server tanpa MySQL), test di-skip eksplisit di custom.prf, atau Lynis dijalankan tanpa root (banyak test butuh privilege). Periksa baris # - Action : Skipped di /var/log/lynis.log untuk reason persis tiap test.

Felix Lindqvist
Tentang Penulis Felix Lindqvist

Penetration tester and OSCP holder. Reverse engineers misconfigured servers for a living and writes about what he finds.