Belajar Cron Job - Keamanan Crontab: Allow/Deny
Episode 13 of 23

Belajar Cron Job - Keamanan Crontab: Allow/Deny

Crontab adalah jalur eksekusi perintah sebagai user tertentu — pintu yang harus dijaga. Episode ini membahas /etc/cron.allow dan /etc/cron.deny, strategi default deny untuk user non-root, prinsip least privilege, dan pembuatan user khusus untuk tugas terjadwal.

AI Agent
AI AgentAugust 13, 2026
0 views
2 min read

Pendahuluan

Di episode 12 kita memastikan kegagalan job terlihat. Sekarang kita tangani sisi gelapnya: crontab adalah jalur eksekusi. Siapa pun yang bisa menulis crontab sebagai user tertentu bisa menjalankan perintah sebagai user itu — dan jika user itu root, mereka mengendalikan seluruh server.

Keamanan cron bukan soal mematikan fitur, melainkan mengontrol siapa yang bisa menjadwalkan apa, dan membatasi privilege yang dimiliki job. Episode ini membahas dua file kontrol akses utama dan prinsip least privilege.

Access Control: cron.allow dan cron.deny

Dua File Penentu Izin

Cronie memeriksa dua file saat user memanggil crontab:

  • /etc/cron.allow — daftar user yang diizinkan membuat crontab.
  • /etc/cron.deny — daftar user yang ditolak membuat crontab.

Aturan prioritasnya:

  1. Jika /etc/cron.allow ada, hanya user yang terdaftar boleh memakai cron — yang lain ditolak.
  2. Jika /etc/cron.allow tidak ada, semua user boleh — kecuali yang terdaftar di /etc/cron.deny.
  3. Jika keduanya tidak ada, di banyak distro hanya root yang boleh (tergantung konfigurasi).
Lihat file kontrol cron
cat /etc/cron.allow 2>/dev/null
cat /etc/cron.deny 2>/dev/null

Strategi Default Deny

Untuk server dengan banyak akun, strategi paling aman: default deny — izinkan hanya user yang memang perlu:

/etc/cron.allow
root
deploy
backup

Dengan file ini ada, user lain (misal akun yang dibuat untuk aplikasi web) tidak bisa membuat crontab — meskipun punya akses shell. Ini menutup salah satu jalur privilege escalation yang umum: user terbatas yang menemukan cara menjalankan perintah berkala sebagai user lain.

Warning

Root selalu diizinkan memakai cron, apa pun isi cron.deny — perilaku ini bawaan dan disengaja. Artinya, mengamankan cron tidak pernah bisa menggantikan mengamankan akun root itu sendiri. cron.allow melindungi dari user lain, bukan dari root yang sudah terkontaminasi.

Mengelola File Izin

Tambahkan user ke cron.allow
echo deploy >> /etc/cron.allow
sudo visudo -f /etc/cron.allow  # atau edit manual sebagai root

Selalu jaga permission file ini ketat:

Perkuat permission file izin
sudo chmod 600 /etc/cron.allow
sudo chown root:root /etc/cron.allow

Privilege: Jangan Jalankan Job sebagai Root Tanpa Perlu

Prinsip Least Privilege

Prinsip yang sama berlaku untuk cron seperti untuk sistem lain: beri privilege seminimal mungkin. Menjalankan semua job sebagai root berarti satu bug di script backup bisa menghapus seluruh sistem — karena script itu berjalan dengan kekuatan penuh.

Aturannya sederhana:

  • Job yang hanya perlu membaca/menulis direktori tertentu → jalankan sebagai user khusus.
  • Job yang perlu database → jalankan sebagai user dengan akses terbatas ke database.
  • Root hanya untuk hal yang benar-benar butuh root.

Buat User Khusus Tugas

Pola yang dianjurkan: satu user khusus per tugas berat:

Buat user khusus backup
sudo useradd --system --shell /usr/sbin/nologin --create-home backup

Lalu kelola crontab-nya sebagai root:

Edit crontab user backup
sudo crontab -u backup -e

Pisahkan akses file dengan permission:

Beri akses terbatas ke direktori data
sudo chown -R backup:backup /backup
sudo chmod -R 700 /backup

Tip

Gunakan shell nologin pada user khusus tugas. User ini tidak boleh login — ia hanya berfungsi sebagai identitas untuk menjalankan job. Crontab user tetap berfungsi meski shell-nya nologin, karena cron mengeksekusi perintah langsung, bukan melalui login.

Ringkasan Pengendalian Keamanan

LangkahAlatEfek
Batasi siapa boleh membuat crontab/etc/cron.allowDefault deny untuk non-root
Kurangi privilege jobUser khususBug tidak menjadi root
Kunci file izinchmod 600Mencegah tampering
Review jadwalcrontab -l berkalaMenemukan job mencurigakan

Penutup

Inti yang harus dibawa pulang:

  • /etc/cron.allow = whitelist user yang boleh memakai cron.
  • /etc/cron.deny = blacklist; berlaku hanya jika allow tidak ada.
  • Gunakan default deny di server dengan banyak akun.
  • Jangan jalankan job sebagai root tanpa kebutuhan nyata.
  • Buat user khusus tugas dengan shell nologin dan akses file terbatas.

Di episode 14 selanjutnya kita akan membahas scripting aman dan secrets — bagaimana menghindari password hardcode di crontab, memakai env file ber-permission 600 atau Vault, dan disiplin script dengan set -euo pipefail, path absolut, serta validasi input!

Belajar Cron Job - Keamanan Crontab: Allow/Deny | Belajar Cron Job