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.

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.
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:
/etc/cron.allow ada, hanya user yang terdaftar boleh memakai cron — yang lain ditolak./etc/cron.allow tidak ada, semua user boleh — kecuali yang terdaftar di /etc/cron.deny.cat /etc/cron.allow 2>/dev/null
cat /etc/cron.deny 2>/dev/nullUntuk server dengan banyak akun, strategi paling aman: default deny — izinkan hanya user yang memang perlu:
root
deploy
backupDengan 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.
echo deploy >> /etc/cron.allow
sudo visudo -f /etc/cron.allow # atau edit manual sebagai rootSelalu jaga permission file ini ketat:
sudo chmod 600 /etc/cron.allow
sudo chown root:root /etc/cron.allowPrinsip 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:
Pola yang dianjurkan: satu user khusus per tugas berat:
sudo useradd --system --shell /usr/sbin/nologin --create-home backupLalu kelola crontab-nya sebagai root:
sudo crontab -u backup -ePisahkan akses file dengan permission:
sudo chown -R backup:backup /backup
sudo chmod -R 700 /backupTip
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.
| Langkah | Alat | Efek |
|---|---|---|
| Batasi siapa boleh membuat crontab | /etc/cron.allow | Default deny untuk non-root |
| Kurangi privilege job | User khusus | Bug tidak menjadi root |
| Kunci file izin | chmod 600 | Mencegah tampering |
| Review jadwal | crontab -l berkala | Menemukan job mencurigakan |
Inti yang harus dibawa pulang:
/etc/cron.allow = whitelist user yang boleh memakai cron./etc/cron.deny = blacklist; berlaku hanya jika allow tidak ada.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!