Belajar Wget - Authentication & Security Best Practice
Series/Belajar Wget/Episode 14
Episode 14 of 23

Belajar Wget - Authentication & Security Best Practice

Pada episode ini kita akan menyimpan kredensial wget dengan aman: prompt interaktif, file netrc dengan permission yang benar, serta checklist keamanan untuk setiap download mulai dari HTTPS, verifikasi checksum, hingga risiko sumber yang tidak dipercaya.

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

Pendahuluan

Di episode 13 kalian memastikan bahwa server yang kalian ajak bicara benar-benar server yang kalian tuju — identitas pihak lain terverifikasi. Sekarang giliran sisi kalian: banyak server tidak akan mengirimkan apa pun sebelum membuktikan siapa kalian. Episode 14 membahas autentikasi di wget — dan, yang tidak kalah penting, bagaimana menyimpan bukti identitas itu tanpa membocorkannya. Keamanan bukan tentang kunci yang kuat saja; ia tentang kunci yang kuat yang tidak pernah tertinggal di meja.

Jangan Tulis Kredensial di Command Line

Cara paling sederhana memberi kredensial ke wget adalah --user dan --password:

jangan-begini.sh
# JANGAN: password terlihat oleh siapa pun di sekitar
wget --user=budi --password=rahasia123 https://example.com/data

Masalahnya bukan pada mekanismenya, melainkan pada kebocorannya. Perintah itu tercatat di shell history, terlihat di process list (ps) selama proses berjalan, dan menempel di log terminal. Menulis password di command line seperti menulis PIN di dahi lalu mengantar paket — satu foto dan kartu ATM kalian sudah tidak berguna.

Warning

Aturan yang berlaku untuk semua kredensial: tidak pernah di command line, tidak pernah literal di script, tidak pernah di file yang masuk ke git. Riwayat git tidak pernah benar-benar bisa dibersihkan, dan shell history tidak pernah benar-benar bisa dihapus.

--ask-password: Prompt yang Tersembunyi

Untuk sesi manual, biarkan wget yang meminta password. Opsi --ask-password membuat wget menampilkan prompt interaktif dengan input yang disembunyikan:

ask-password.sh
wget --user=budi --ask-password https://example.com/data

Karakter yang kalian ketik tidak tampil di layar, tidak masuk ke shell history, dan tidak muncul di process list. Pola ini adalah kebiasaan yang benar untuk mesin yang dipakai bersama — sesederhana memilih pintu dengan kunci dari pada pintu tanpa kunci sama sekali.

.netrc: Rumah Kredensial

Untuk skrip dan otomasi, wget menyediakan cara yang lebih permanen: file .netrc. Ini adalah file teks berisi pasangan machine, login, dan password:

netrc-contoh.txt
machine docs.example.com
    login budi
    password rahasia123

Agar dipakai, wget perlu diarahkan ke file tersebut — bukan diaktifkan secara default:

netrc.sh
wget --netrc https://docs.example.com/private/data

--netrc membaca ~/.netrc; --netrc-file=/path/file menunjuk file kredensial khusus (misalnya di CI); --no-netrc menegaskan tidak memakai .netrc sama sekali.

Permission yang Benar

.netrc menyimpan password dalam bentuk teks biasa, jadi perlakuannya harus seperti kunci:

netrc-permission.sh
chmod 600 ~/.netrc

Permission 600 berarti hanya pemilik yang bisa membaca dan menulis. File yang bisa dibaca user lain adalah kunci yang ditaruh di depan pintu — dan banyak tool (termasuk wget) menolak atau menurunkan permission file yang terlalu terbuka. Karena kredensial hidup di file, bukan di command line, ia tidak pernah bocor lewat shell history.

Tip

Gunakan entri default di .netrc untuk host yang tidak terdaftar secara eksplisit: baris default login budi password rahasia dipakai sebagai cadangan. Hemat untuk sesi manual; untuk otomasi yang ketat, tulis machine per host agar tidak ada kredensial yang terkirim ke server yang salah.

--auth-no-challenge dan Kebijakan Basic

Satu opsi yang sering disalahpahami: --auth-no-challenge. Secara default, wget menunggu server menantang dengan header WWW-Authenticate sebelum mengirim kredensial Basic. Opsi ini membalik urutan itu — kredensial dikirim lebih dulu tanpa menunggu tantangan:

auth-no-challenge.sh
wget --auth-no-challenge --user=budi --password=rahasia \
  https://api.example.com/data

Keuntungannya: satu round-trip lebih cepat, dan berguna untuk server lama yang tidak mengirim tantangan dengan benar. Kelemahannya: kredensial dikirim bahkan ke server yang tidak memintanya. Gunakan hanya pada server yang kalian kenal baik — ini kebiasaan mengetuk pintu sambil membawa kartu identitas terbuka, cocok di rumah sendiri, berisiko di lingkungan asing.

Checklist: HTTPS di Mana-mana

Sekarang kita masuk bagian paling berharga dari episode ini — kebiasaan yang menyelamatkan kalian dari drama yang tidak perlu.

Selalu HTTPS untuk apa pun yang menyentuh kredensial. Autentikasi Basic di wget mengirim kredensial ter-enkode base64, dan base64 hanyalah encoding, bukan enkripsi — siapapun di jalur jaringan bisa memecahkannya dalam hitungan detik.

jangan-http-plain.sh
# JANGAN: kredensial terkirim hampir telanjang lewat HTTP
wget --user=budi --password=rahasia http://dl.contoh.local/data

HTTP tanpa TLS membuat --user/--password dan isi .netrc terkirim dalam bentuk yang bisa dibaca siapa pun di tengah jalan. HTTPS bukan saran — ia syarat.

Checklist: Verifikasi Checksum dan Signature

Download yang sukses bukan berarti download yang benar. File bisa rusak di tengah jalan, atau sengaja diganti oleh pihak lain. Karena itu sumber terpercaya mempublikasikan checksum — sidik jari matematis file — yang harus kalian bandingkan setelah download. Skrip singkat ini memadukan timestamping dan verifikasi checksum:

verifikasi-checksum.sh
#!/usr/bin/env bash
set -euo pipefail
 
URL="https://example.com/app/app-1.2.3.tar.gz"
EXPECTED="9f2c1a7b4d8e0f3c5a6b7c8d9e0f1a2b3c4d5e6f"
FILE="${URL##*/}"
 
wget --timestamping "$URL"
echo "$EXPECTED  $FILE" | sha256sum -c --status || {
  echo "Checksum tidak cocok — batalkan!" >&2
  exit 1
}
echo "File valid: $FILE"

Bila file sudah terverifikasi checksum-nya, terakhir ia berhenti. sha256sum -c membandingkan sidik jari yang dihitung ulang dengan nilai yang dipublikasikan; skrip berhenti sebelum memakai file yang mencurigakan. Untuk level yang lebih tinggi, verifikasi tanda tangan digital dengan GPG: gpg --verify file.sig file — checksum membuktikan file tidak berubah, signature membuktikan siapa yang menerbitkannya.

Checklist: Risiko Sumber yang Tidak Dipercaya

Setiap download adalah keputusan: mempercayakan eksekusi atau pemakaian file pada sumber tertentu. Mengunduh biner dari situs tidak resmi seperti mengundang orang asing masuk rumah tanpa memeriksa kartu identitas. Tiga pertanyaan yang selalu layak diajukan:

  • Apakah sumbernya resmi — situs utama, mirror resmi, atau CDN yang diumumkan maintainer?
  • Apakah file itu diunduh lewat HTTPS dengan sertifikat valid — bukan dengan --no-check-certificate?
  • Apakah checksum atau signature yang dipublikasikan sudah diverifikasi?

Important

Dua lini pertahanan terakhir kalian adalah verifikasi sertifikat dan verifikasi checksum. Turunkan salah satunya — memakai --no-check-certificate atau mengabaikan checksum — dan seluruh rantai kepercayaan menjadi tebakan.

Penutup

Episode 14 menutup lingkaran keamanan di sisi kalian: menjauhkan kredensial dari command line, memakai --ask-password untuk prompt yang tersembunyi, menyimpan kredensial di .netrc dengan permission 600, memahami --auth-no-challenge, lalu menjalani checklist keamanan — HTTPS di mana-mana, verifikasi checksum dan signature, serta menakar risiko sumber yang tidak dipercaya.

Inti yang perlu diingat: kredensial dan file yang kalian unduh adalah aset — perlakukan keduanya seperti itu. Kunci yang kuat tanpa kebiasaan penyimpanan yang aman hanyalah keyakinan yang salah.

Di episode 15 berikutnya kita beralih dari keamanan ke efisiensi: timestamping dan optimasi incremental — bagaimana membuat wget mengunduh hanya yang berubah, membatasi kecepatan, dan menjadi tetangga yang sopan bagi server. Sampai jumpa!

Belajar Wget - Authentication & Security Best Practice | Belajar Wget