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.

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.
Setiap paket Emacs dibangun dari archive yang mengautentikasi isinya dengan tanda tangan GPG:
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).
Sejak Emacs 27, verifikasi tanda tangan default bervariasi per archive. Untuk memaksa verifikasi semua archive:
(setq package-check-signature t)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.
M-x list-packages RET → g (refresh) → Emacs mengambil kunci archive
C-h v package-archives RETBatas praktis: gunakan archive resmi saja (gnu, nongnu, melpa) dan nonaktifkan archive pihak ketiga yang tidak kalian kenal:
(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.
MELPA adalah dunia liar: ribuan paket dari ratusan penulis, diperbarui tiap hari. Protokol penilaian cepat:
C-h f / source: lihat apa yang paket lakukan saat load — terutama (load ...), (shell-command ...), atau download otomatis.M-x describe-package menampilkan dependensi — paket yang bergantung pada banyak paket tak dikenal meningkatkan permukaan risiko.eval pada input eksternal: ini red flag klasik.Init file adalah kode yang berjalan dengan hak user — jadi audit secara berkala:
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.Kadang kalian butuh Emacs yang benar-benar bersih — untuk testing paket, mencoba config orang lain, atau memisahkan environment kerja. Dua pendekatan:
mkdir -p ~/emacs-sandbox-home
HOME=~/emacs-sandbox-home emacs -QSetiap install/konfigurasi hanya memengaruhi HOME sandbox — aman untuk uji coba.
flatpak install flathub org.gnu.emacs
flatpak run org.gnu.emacs --sandbox --with-package-dataFlatpak 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.
Checklist yang direkomendasikan untuk setup apa pun:
package-check-signature = t (atau minimal tidak nil).package-pinned-packages untuk kritis.~/.authinfo.gpg (terenkripsi GPG), bukan init plain text.Pada episode 22 ini, kalian telah mengamankan setup Emacs dengan kebijakan trust yang jelas.
Inti yang harus dibawa pulang:
package-check-signature t memaksa verifikasi.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!