Kernel tidak pernah memeriksa password — tugasnya hanya menegakkan permission atas identitas yang sudah ada. Yang memverifikasi “apakah orang ini benar pemilik akun budi” adalah lapisan userland: program login di console, sshd dari jaringan, keduanya menitipkan pemeriksaan ke kerangka PAM, dan hasilnya dicocokkan dengan hash di /etc/shadow. Chapter ini menelusuri alur tersebut dari layar login sampai shell terbuka, lalu membahas hash password dan praktik autentikasi modern sebagai penutup Section ini.
Alur Login: dari getty sampai Shell #
Login di layar console melibatkan beberapa program yang saling berganti:
- Saat boot, init (systemd pada distro modern) menjalankan
gettypada setiap terminal virtual — program kecil yang hanya mencetak promptlogin:. gettymenyerahkan layar ke programloginbegitu kita mengetik nama user.loginmeminta password, lalu memanggil PAM untuk memverifikasi keduanya terhadap/etc/passwddan/etc/shadow.- Bila lolos,
loginmengganti identitas proses menjadi UID dan GID user tersebut — angka-angka yang dibahas pada Chapter User dan Group Identifiers — menyiapkan environment (HOME,SHELL), lalu menggantikan dirinya dengan shell. - Sejak saat itulah permission yang kita bahas sepanjang Section ini mulai berlaku: setiap proses yang lahir dari shell membawa UID yang sama.
Login lewat jaringan mengikuti alur serupa dengan sshd menggantikan getty dan login — kecuali verifikasi bisa memakai kunci publik alih-alih password.
PAM: Modul Autentikasi yang Bisa Ditukar #
PAM (Pluggable Authentication Modules) memisahkan cara memverifikasi dari program yang memakainya. Alih-alih tiap program menulis logika password sendiri, semuanya tinggal memanggil stack modul PAM. Konfigurasinya tersebar di /etc/pam.d/, satu file per service:
ls -1 /etc/pam.d/Output yang Dihasilkan:
chfn
chpasswd
chsh
common-account
common-auth
common-password
common-session
common-session-noninteractive
login
newusers
other
passwd
runuser
runuser-l
su
su-l
sudo
sudo-iKita bisa melihat service yang kita kenal semuanya di sana — login, su, sudo, passwd. Tiap baris konfigurasi PAM berformat jenis kontrol modul argumen, dan jenisnya menentukan perannya:
| Jenis | Pertanyaan yang dijawab |
|---|---|
auth | benarkah identitas ini? (verifikasi password atau kunci) |
account | bolehkah akun ini login? (belum kedaluwarsa, jam akses) |
session | apa yang disiapkan setelah lolos? (limit, environment) |
password | bagaimana mengganti kredensial? |
Tingkat kontrol seperti required dan sufficient menentukan apakah kegagalan satu modul membatalkan seluruh stack. Modul yang paling sering bekerja adalah pam_unix.so, yang membaca hash dari /etc/shadow; pada Debian, baris-baris umum dirakit di common-auth dan tinggal di-@include oleh tiap service. Daftar modul beserta tingkat kontrolnya dirangkum di wiki Arch Linux tentang PAM
.
Password Disimpan sebagai Hash #
File password dulu bernama /etc/passwd — kini field hash tinggal x dan hash aslinya pindah ke /etc/shadow yang lebih rapat. Kita bandingkan perlindungan keduanya:
stat -c '%a %U %G %n' /etc/passwd /etc/shadowOutput yang Dihasilkan:
644 root root /etc/passwd
640 root shadow /etc/shadow/etc/passwd boleh dibaca semua user (644) karena berisi data umum seperti nama dan home; /etc/shadow dibatasi 640 root:shadow karena isinya hash password. User biasa yang mencoba membacanya langsung ditolak:
grep root /etc/shadow 2>&1Output yang Dihasilkan:
grep: /etc/shadow: Permission deniedHash tidak menyimpan password — hanya sidik jarinya. Saat login, PAM menghitung hash dari password yang diketik lalu membandingkan hasilnya. Formatnya dapat dikenali dari awalan $id$: $1$ MD5 yang uzur, $5$ SHA-256, $6$ SHA-512, dan $y$ yescrypt yang menjadi bawaan Debian sejak Debian 12. Kita bisa melihat bentuknya tanpa menyentuh file asli:
openssl passwd -6 -salt GaramContoh CONTOH_PASSWORD_KUATOutput yang Dihasilkan:
$6$GaramContoh$ORG54mu3gvUyz8LYdNsLhTSKelJa445ggOCSYu8GyJ2YziOqS98VtkjSFSq5cdhIjrNfjxeu4hme9o0cEGXn/1-6: memakai algoritma SHA-512crypt, yang sama dengan format$6$.-salt GaramContoh: salt adalah data acak yang dicampur sebelum hashing, sehingga dua user dengan password sama tetap memiliki hash berbeda dan tabel hash siap pakai (rainbow table) tidak bisa dipakai. Salt yang sama menghasilkan hash yang sama — itulah yang membuat contoh ini bisa direproduksi.CONTOH_PASSWORD_KUAT: input yang di-hash; pada sistem nyata nilai ini tidak pernah ditulis di command line karena ikut tercatat di riwayat shell.
Setelah hash, /etc/shadow juga menyimpan parameter usia password per user — kapan terakhir diganti, umur minimum dan maksimum, masa peringatan sebelum kedaluwarsa — yang dikelola lewat perintah chage. Struktur lengkapnya dibahas pada Chapter User Account
; dokumentasi field-nya ada di halaman manual passwd(5)
.
Praktik Autentikasi Modern #
Password sendiri semakin jarang menjadi satu-satunya faktor. Login ssh paling baik memakai pasangan kunci: kunci privat di komputer kita, kunci publik terdaftar di ~/.ssh/authorized_keys server, dan password tidak pernah dikirim lewat jaringan — dibedah tuntas pada Chapter SSH Keys dan Agent
. Multi-factor authentication menambah faktor kedua — aplikasi TOTP di ponsel atau kunci hardware — melalui modul PAM, sehingga password yang bocor saja belum cukup untuk masuk. Terakhir, percobaan login yang menggila dari satu alamat IP bisa dipangkas otomatis oleh fail2ban yang memantau log autentikasi — bahasan yang bersambung ke Section Security.
Dengan alur login, PAM, dan hash password, lingkaran identitas di Linux tertutup: sistem mengenali kita lewat angka, memverifikasi lewat hash, dan menegakkan permission lewat kernel. Tugas administratif berikutnya setelah user dan permission adalah mengelola perangkat lunak itu sendiri — menginstal, memperbarui, dan menghapus paket — pembuka Section Package Management.