Belajar Emacs - Security & Trust: Package Signing & Sandbox
Episode 22 of 30

Belajar Emacs - Security & Trust: Package Signing & Sandbox

Mengamankan setup Emacs: memahami model trust paket ELPA/MELPA, memaksa verifikasi tanda tangan dengan package-check-signature, menilai risiko paket komunitas, verifikasi init file yang mencurigakan, dan mengisolasi Emacs dengan sandbox flatpak untuk lingkungan yang benar-benar bersih.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Sejauh ini Emacs kalian menginstall banyak paket dan menyimpan kredensial. Episode 22 membahas sisi yang jarang dibicarakan: keamanan & trust. Karena init file adalah kode yang dijalankan otomatis setiap start, dan paket dari MELPA adalah kode pihak ketiga yang berjalan dengan hak istimewa penuh — setup Emacs yang ceroboh bisa menjadi pintu masuk masalah.

Mengapa penting? Bukan untuk paranoia, tapi untuk keputusan yang terinformasi: tahu apa yang kalian install, dari mana asalnya, dan seberapa jauh ia dipercaya. Setelah episode ini, kalian akan punya kebijakan trust yang sehat untuk setup Emacs pribadi maupun kerja.

Model Trust: Siapa yang Menandatangani Paket?

Setiap paket Emacs dibangun dari archive yang mengautentikasi isinya dengan tanda tangan GPG:

  • ELPA (gnu): ditandatangani kunci GNU ELPA.
  • non-GNU ELPA: ditandatangani kunci archive-nya sendiri.
  • MELPA: ditandatangani kunci MELPA (dengan pemisahan kunci untuk source).

Verifikasi dilakukan Emacs saat package-refresh-contents: setiap paket diperiksa terhadap tanda tangan dari kunci yang terpercaya. Tanpa tanda tangan yang valid, paket bisa ditolak (tergantung pengaturan).

package-check-signature: Memaksa Verifikasi

Sejak Emacs 27, verifikasi tanda tangan default bervariasi per archive. Untuk memaksa verifikasi semua archive:

Wajibkan verifikasi tanda tangan (di init.el)
(setq package-check-signature t)
text
allow-unsigned   →  terima paket tanpa tanda tangan (default ELPA)
t                →  wajib tanda tangan valid — selain itu tolak
nil              →  tidak verifikasi (JANGAN)

Warning

package-check-signature t adalah standar minimum yang sehat. Nilai nil berarti setiap paket yang di-M-x package-refresh dan di-install tidak diverifikasi sama sekali — satu archive terkompromi atau man-in-the-middle bisa menyuntik kode berbahaya yang jalan otomatis. Hindari nil.

Kelola Kunci & Archive yang Tepercaya

text
M-x list-packages RET  →  g (refresh) → Emacs mengambil kunci archive
C-h v package-archives RET

Batas praktis: gunakan archive resmi saja (gnu, nongnu, melpa) dan nonaktifkan archive pihak ketiga yang tidak kalian kenal:

Daftar archive tepercaya
(setq package-archives
      '(("gnu" . "https://elpa.gnu.org/packages/")
        ("nongnu" . "https://elpa.nongnu.org/packages/")
        ("melpa" . "https://melpa.org/packages/")))
(setq package-pinned-packages '(("which-key" . "melpa")))

package-pinned-packages memaksa paket tertentu diambil dari archive tertentu — mencegah update yang "mengganti sumber" secara tidak sengaja.

Menilai Risiko Paket Komunitas

MELPA adalah dunia liar: ribuan paket dari ratusan penulis, diperbarui tiap hari. Protokol penilaian cepat:

  1. Populer ≠ aman, tapi teruji: paket dengan banyak download & commit lama lebih teruji. Cek halaman archive.
  2. Baca C-h f / source: lihat apa yang paket lakukan saat load — terutama (load ...), (shell-command ...), atau download otomatis.
  3. Cek dependensi: M-x describe-package menampilkan dependensi — paket yang bergantung pada banyak paket tak dikenal meningkatkan permukaan risiko.
  4. Hindari paket yang memanggil eval pada input eksternal: ini red flag klasik.
  5. Pin versi untuk produksi: straight.el (episode 11) mem-pin commit — perubahan tak terduga dari MELPA daily tidak akan merusak/mencurigakan di luar kendali.

Verifikasi Init File Sendiri

Init file adalah kode yang berjalan dengan hak user — jadi audit secara berkala:

text
1. Baca init.el dari atas ke bawah secara rutin — pahamilah tiap blok.
2. Hati-hati kode yang di-copy dari internet:
   - `(eval-when-compile ...)` yang berisi `load` dari URL → mencurigakan.
   - `(setq custom-file ...)` yang mengarah ke path aneh.
   - Blok yang menonaktifkan verifikasi (`package-check-signature nil`) tanpa alasan jelas.
3. Gunakan `M-x check-parens` untuk validasi struktur.
4. Simpan init di version control (git) — riwayat perubahan = jejak audit.

Sandbox: Emacs dalam Isolasi

Kadang kalian butuh Emacs yang benar-benar bersih — untuk testing paket, mencoba config orang lain, atau memisahkan environment kerja. Dua pendekatan:

1. HOME terpisah (tanpa instalasi tambahan)

Emacs bersih dengan HOME terpisah
mkdir -p ~/emacs-sandbox-home
HOME=~/emacs-sandbox-home emacs -Q

Setiap install/konfigurasi hanya memengaruhi HOME sandbox — aman untuk uji coba.

2. Flatpak sandbox (isolasi penuh)

Install Emacs via flatpak
flatpak install flathub org.gnu.emacs
flatpak run org.gnu.emacs --sandbox --with-package-data

Flatpak menjalankan Emacs dalam isolasi sistem file & network dengan permission minimal. Cocok untuk penggunaan yang membutuhkan jaminan isolasi dari host.

Tip

Untuk mencoba config orang lain (misal dari dotfiles GitHub) tanpa risiko: jalankan dengan HOME sandbox + --with-x-toolkit seperlunya, atau langsung emacs -Q --load /tmp/contoh-config.el. Jangan pernah load config asing dengan init aktif tanpa inspeksi.

Kebijakan Trust yang Sehat — Checklist

Checklist yang direkomendasikan untuk setup apa pun:

  • package-check-signature = t (atau minimal tidak nil).
  • Hanya archive resmi terdaftar; package-pinned-packages untuk kritis.
  • Kredensial hanya di ~/.authinfo.gpg (terenkripsi GPG), bukan init plain text.
  • Init file di-version-control; tiap perubahan bisa di-audit.
  • Paket baru diperiksa source-nya sebelum diinstall (terutama yang menyentuh network/process).
  • Uji config asing di sandbox (HOME terpisah / flatpak) sebelum dipakai.

Penutup

Pada episode 22 ini, kalian telah mengamankan setup Emacs dengan kebijakan trust yang jelas.

Inti yang harus dibawa pulang:

  • Archive menandatangani paket dengan GPG; package-check-signature t memaksa verifikasi.
  • Gunakan archive resmi saja; pin versi untuk produksi (straight.el).
  • Audit paket sebelum install: source, dependensi, perilaku saat load.
  • Init file adalah kode — simpan di git, hindari blok yang menonaktifkan verifikasi.
  • Sandbox (HOME terpisah / flatpak) untuk mencoba config asing tanpa risiko.

Di episode 23 selanjutnya, kita mengamankan data: backup, autosave & recovery — file backup, auto-save, recover-file, plus undo-tree untuk riwayat perubahan yang tahan terhadap kesalahan besar. Sampai jumpa di episode 23!

Belajar Emacs - Security & Trust: Package Signing & Sandbox | Belajar Emacs