Menggunakan YubiKey dengan Fedora
Apa itu YubiKey?
YubiKey adalah perangkat kecil berbasis USB dan NFC, disebut juga token keamanan perangkat keras, dengan modul untuk berbagai penggunaan yang berkaitan dengan keamanan. Alat ini menghasilkan kata sandi sekali pakai (OTP), menyimpan kunci privat, dan secara umum menerapkan berbagai protokol autentikasi. Perangkat ini dibuat dan dijual oleh perusahaan bernama Yubico.
Untuk informasi lebih lanjut tentang fitur YubiKey, lihat halaman produk mereka.
Bagaimana cara mendapatkan YubiKey?
Anda dapat membeli YubiKey dari situs web Yubico.
Pertimbangkan YubiKey cadangan
Begitu Anda mulai bekerja dengan token keamanan perangkat keras, Anda harus mempertimbangkan kemungkinan terkunci dari akun yang terhubung dengan token tersebut. Karena token keamanan perangkat keras bersifat unik dan dirancang agar sangat sulit untuk disalin, Anda tidak dapat membuat salinannya seperti yang bisa dilakukan dengan brankas perangkat lunak seperti Keepass atau AndOTP. Oleh karena itu, untuk setiap registrasi yang Anda lakukan dengan kunci utama, sebaiknya segera lakukan juga dengan kunci cadangan kedua yang disimpan di lokasi aman seperti brankas, atau setidaknya selalu ditinggal di rumah.
Secara praktik, ini berarti mendaftarkan kedua token perangkat keras pada akun Linux dan web Anda, menghasilkan kunci privat dua kali, lalu mengonfigurasi kedua kunci publik, misalnya di GitHub.
Keterbatasan penyimpanan
Untuk beberapa fitur, kunci privat dan rahasia lainnya disimpan di dalam YubiKey. Setiap fitur memiliki ruang penyimpanan tersendiri dan oleh karena itu memiliki jumlah maksimum slot kredensial masing-masing:
-
OTP - Tidak terbatas, karena hanya memerlukan satu rahasia per kunci
-
FIDO U2F - Tidak terbatas, karena hanya memerlukan satu rahasia per kunci
-
FIDO2 - 25 kredensial
-
OATH - 32 kredensial
-
PIV - 24 sertifikat x509 beserta kunci privatnya masing-masing
-
OpenPGP - 3 kunci; masing-masing untuk enkripsi, tanda tangan, dan autentikasi
Menggunakan YubiKey untuk mengautentikasi ke mesin dengan Fedora
Autentikasi sistem lokal menggunakan Pluggable Authentication Modules (PAM). Ada dua opsi di sini: pam_yubico dan pam_u2f. Modul pertama diperlukan untuk YubiKey tanpa FIDO2/U2F. Dukungan terhadap standar FIDO2 tergantung pada firmware dan model perangkat keras kunci Anda.
Langkah pengaturannya adalah sebagai berikut: instal modul PAM, daftarkan YubiKey dengan akun pengguna Anda, buat konfigurasi dasar untuk salah satu dari dua opsi autentikasi tersebut, lalu pilih konfigurasi PAM yang ingin Anda gunakan dengan YubiKey.
Dependensi
Paket yang diperlukan untuk kedua modul PAM tersedia di repositori resmi.
| === Perlu diperhatikan bahwa salah satu perbedaan antara kedua modul PAM ini adalah, dengan pam_yubico Anda tidak perlu menyentuh YubiKey, cukup dengan menyambungkannya ke perangkat Anda. Sedangkan dengan pam_u2f, Anda harus menyentuh kunci setiap kali autentikasi diperlukan. === |
Berkas konfigurasi dasar
Untuk pam_yubico
Ada dua cara untuk mengonfigurasi modul PAM YubiKey agar dapat mengautentikasi pengguna, yaitu melalui YubiCloud atau menggunakan challenge-response. YubiCloud adalah metode standar tetapi bergantung pada layanan cloud Yubico untuk memverifikasi OTP Anda dan karenanya memerlukan koneksi internet yang terus aktif.
Buat dua berkas konfigurasi dasar di /etc/pam.d/yubikey-required dan yubikey-sufficient.
Untuk YubiCloud, gunakan yang berikut ini:
#%PAM-1.0
auth required pam_yubico.so id=[Your API Client ID] key=[Your API Client Key]
#%PAM-1.0
auth sufficient pam_yubico.so id=[Your API Client ID] key=[Your API Client Key]
|
Perhatikan bahwa kunci bersifat opsional, tetapi tanpa kunci tersebut tidak ada verifikasi TLS, yang membuat sistem ini rentan terhadap serangan MitM secara default. Dapatkan kunci di Yubico. |
|
Perhatikan bahwa metode autentikasi daring tidak akan berfungsi jika perangkat dalam keadaan offline dan tidak dapat menjangkau YubiCloud. |
|
Jika Anda menggunakan SELinux dalam mode enforcing (mode default), Anda harus terlebih dahulu mengaktifkan boolean allow_ypbind, karena pam_yubico perlu dapat terhubung ke server autentikasi daring milik Yubico.
|
Untuk challenge-response gunakan konfigurasi berikut:
#%PAM-1.0
auth required pam_yubico.so mode=challenge-response
#%PAM-1.0
auth sufficient pam_yubico.so mode=challenge-response
|
Anda dapat menambahkan opsi debug di akhir baris ini tepat setelah opsi mode untuk mendapatkan informasi pemecahan masalah di journald. |
Jika Anda ingin menggunakan kedua metode untuk kasus penggunaan yang berbeda, cukup buat berkas konfigurasi masing-masing dan gunakan sebagai include seperti dijelaskan pada bagian berikutnya.
Untuk pam_u2f
Buat dua berkas konfigurasi dasar di /etc/pam.d/u2f-required dan u2f-sufficient.
#%PAM-1.0
auth required pam_u2f.so
#%PAM-1.0
auth sufficient pam_u2f.so
|
Anda dapat menambahkan opsi debug di akhir baris ini tepat setelah opsi mode untuk mendapatkan informasi pemecahan masalah di journald. |
Daftarkan YubiKey dengan akun lokal Anda
Untuk pam_yubico
Jika Anda menggunakan metode daring YubiCloud, Anda memerlukan ID dari YubiKey Anda. Untuk memperolehnya, cukup masukkan kunci dan dapatkan kode OTP dengan menekan tombolnya sebentar, lalu ambil 12 karakter pertama — itulah ID kunci Anda.
cccccbcgebif | bclbtjihhbfbduejkuhgvhkehnicrfdj
Buat berkas konfigurasi ~/.yubico/authorized_keys dengan akun pengguna Anda diikuti oleh ID kunci yang dipisahkan dengan tanda titik dua.
fedora-user:cccccbcgebif[:<another-key-id>]
Sebagai alternatif, aktifkan challenge-response di slot 2 dan daftarkan dengan akun pengguna Anda. Perintah pertama (ykman) dapat dilewati jika Anda sudah memiliki kredensial challenge-response yang tersimpan di slot 2 pada YubiKey. (Verifikasi dengan 'ykman otp info') Ulangi kedua langkah atau hanya langkah terakhir jika Anda memiliki kunci cadangan (sangat disarankan).
[…]$ ykman otp chalresp --generate --touch 2 […]$ ykpamcfg -2
Tantangan awal dan respons yang diharapkan disimpan di '/home/<username>/.yubico/challenge-1...5'.
Atau untuk pengguna sistem lainnya dengan menggunakan sudo.
[…]$ sudo -u someuser ykpamcfg -2
Untuk pam_u2f
Gunakan alat pamu2fcfg untuk mendapatkan satu baris konfigurasi yang dimasukkan ke ~/.config/Yubico/u2f_keys. Baris konfigurasi ini terdiri atas nama pengguna dan bagian yang terikat pada kunci, dipisahkan oleh tanda titik dua.
fedora-user:owBYtPIH2yzjlSQaRrVcxB...Pg==,es256,+presence
Jika kunci dilindungi dengan PIN, Anda akan diminta memasukkan PIN untuk operasi ini.
[…]$ mkdir -p ~/.config/Yubico […]$ pamu2fcfg > ~/.config/Yubico/u2f_keys
Jika Anda memiliki kunci cadangan, tambahkan dengan opsi --nouser dan gabungkan hasilnya ke baris kunci yang sudah ada. (Semua keluaran harus berada pada satu baris.)
[…]$ pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
Konfigurasikan modul PAM yang diinginkan
Selanjutnya, konfigurasikan PAM agar menerima YubiKey sebagai sarana autentikasi. Ada banyak opsi di /etc/pam.d yang dapat diubah dan ditambahkan untuk YubiKey, namun kasus penggunaan yang paling umum adalah sebagai berikut:
-
/etc/pam.d/login
-
/etc/pam.d/gdm
-
/etc/pam.d/sudo
-
/etc/pam.d/sshd
Dalam berkas konfigurasi PAM, jika menggunakan {yubikey,u2f}-sufficient tambahkan baris include di atas, atau jika menggunakan {yubikey,u2f}-required tambahkan di bawah baris yang berisi "auth substack system-auth" atau "auth include system-auth". Contoh include untuk yubikey-sufficient tampak seperti ini:
auth include yubikey-sufficient
Contoh berikut menetapkan OTP YubiKey sebagai faktor autentikasi 'sufficient' untuk login terminal. Ini berarti YubiKey saja sudah cukup untuk mengautentikasi pengguna saat login di terminal.
Buka /etc/pam.d/login dengan editor teks pilihan Anda. Temukan baris yang berisi "auth substack system-auth". Di atasnya, sisipkan baris berikut:
auth include yubikey-sufficient
Hasilnya akan terlihat seperti ini:
#%PAM-1.0
auth include yubikey-sufficient
auth substack system-auth
auth include postlogin
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
Pada saat berikutnya Anda membuka konsol (lokal, bukan sesi SSH) dan mencoba login, Anda akan diminta YubiKey for '<user>':. Ketuk YubiKey Anda untuk memasukkan OTP dan Anda akan masuk tanpa perlu mengetikkan kata sandi.
|
Saat menggunakan opsi yubikey-required, pastikan untuk mengujinya terlebih dahulu di sesi lain tanpa menutup sesi Anda saat ini agar tidak terkunci dari sistem. |
Untuk menambahkan YubiKey ke lebih dari sekadar login terminal—seperti server SSH lokal, sudo, atau login GDM—tambahkan include autentikasi yang sesuai ke salah satu berkas konfigurasi di /etc/pam.d.
Menyesuaikan YubiKey dengan Fedora
YubiKey hadir dengan konfigurasi awal untuk Yubico OTP, tetapi selain itu menggunakan PIN default untuk setiap fitur lainnya yang kemungkinan besar ingin Anda ubah sebelum digunakan. Tersedia perangkat lunak untuk menyesuaikan YubiKey di repositori resmi.
Secara umum terdapat dua alat yang digunakan bersama dengan varian GUI masing-masing, yaitu 'yubikey-manager' dan 'ykpersonalize'. 'yubikey-manager' lebih baru tetapi mendukung lebih sedikit opsi dibandingkan 'ykpersonalize'. Untuk mendapatkan semua opsi yang tersedia, instal keduanya.
[…]$ sudo dnf install ykpers
Tersedia GUI untuk perintah ini:
[…]$ sudo dnf install yubikey-personalization-gui
Ada alat yang lebih baru dan lebih sederhana bernama ykman:
[…]$ sudo dnf install yubikey-manager
YubiKey Manager juga memiliki GUI:
[…]$ sudo dnf install yubikey-manager-qt
Menulis kata sandi statis baru ke slot kedua pada kunci
YubiKey generasi baru (YubiKey 2+) memiliki kemampuan untuk menyimpan dua konfigurasi terpisah. Konfigurasi pertama umumnya digunakan untuk OTP, sedangkan konfigurasi kedua untuk kata sandi statis yang kuat. Jika tombol ditekan sebentar, kurang dari 1,5 detik, konfigurasi pertama akan aktif. Jika tombol ditekan lebih lama, antara 2,5 hingga 5 detik, maka konfigurasi kedua yang akan aktif.
Tulis kunci statis menggunakan ykman otp static.
[…]$ ykman otp static 2 cbdefghijklnrtuv
Contoh yang lebih lengkap: menulis kunci statis baru ke slot konfigurasi kedua dengan menggunakan kunci AES tertentu.
[…]$ ykpersonalize -2 -o append-cr -a 123456deadcafebeef65432112345678 -o -man-update
Perintah ini akan menulis kunci statis ke YubiKey berdasarkan kunci AES 32-byte yang ditentukan melalui opsi -a. Opsi -2 digunakan untuk menetapkan slot kedua sebagai target. Dua opsi lainnya adalah pilihan pribadi. Opsi append-cr mengirim karakter carriage return sebagai karakter terakhir pada kunci. Dengan begitu, Anda tidak perlu menekan <ENTER> lagi. Opsi -man-update menonaktifkan pembaruan mudah kunci statis di YubiKey. Jika opsi ini diaktifkan, Anda dapat mengubah kata sandi statis tanpa menggunakan ykpersonalize.
Menulis kunci AES baru ke slot pertama pada kunci
|
Slot 1 bersifat khusus karena berisi kredensial dari pabrik yang telah diunggah ke YubiCloud. Menghapus dan membuat ulang secret Yubico OTP serta mengunggahnya sendiri ke YubiCloud akan menandainya secara khusus, yang memiliki konsekuensi: penyedia layanan mungkin tidak mempercayai kunci tersebut dan Yubico bisa menghapus secret tersebut kapan saja dengan alasan apa pun. |
Untuk menulis konfigurasi baru ke slot pertama pada kunci, Anda perlu menentukan beberapa opsi tambahan. Jika ingin dapat mengunggah kunci ke Yubico agar bisa melakukan autentikasi ke server mereka, ingatlah nilai yang Anda gunakan pada bagian ini. Anda akan membutuhkannya nanti.
[…]$ ykpersonalize -1 -o fixed=vvhhhrhkhgidic -o uid=deadbeefcafe -a 123456deadcfaebeef65432112345678 -o append-cr
Opsi -1 menginstruksikan ykpersonalize untuk menggunakan konfigurasi pertama. Opsi fixed menentukan ID publik YubiKey Anda. Ini nantinya disebut sebagai 'prefix' saat Anda akan mengunggahnya. Nilai yang digunakan di sini harus diawali dengan 'ff' dalam hex atau 'vv' dalam modhex (lihat di bawah). Yubico mewajibkan hal ini ketika Anda mencoba mengunggah kunci ke server mereka. Nilai untuk opsi fixed dapat terdiri dari maksimal 16 karakter.
Sebagai bagian dari OTP, Anda dapat menentukan pengenal internal untuk kunci Anda. Inilah yang dilakukan oleh opsi uid. Nilainya berupa hex biasa, bukan modhex, dan ''harus'' terdiri dari 12 karakter.
Opsi -a, sekali lagi, adalah kunci AES 32-byte dan append-cr akan menambahkan karakter carriage return sebagai karakter terakhir pada kunci.
Ketika Anda menekan tombol <ENTER>, program ykpersonalize akan menampilkan opsi yang Anda pilih dan meminta konfirmasi sebelum melanjutkan:
Firmware version 2.1.1 Touch level 1795 Program sequence 3 Configuration data to be written to key configuration 1:
fixed: m:vvhhhrhkhgidic uid: h:deadbeefcafe key: h:123456deadcfaebeef65432112345678 acc_code: h:000000000000 ticket_flags: APPEND_CR config_flags:
Commit? (y/n) [n]:
Setelah menekan 'y', Anda dapat menghasilkan OTP dengan kunci baru Anda!
Apa itu modhex?
Ketika terhubung, sistem operasi memperlakukan YubiKey sebagai keyboard USB. Keyboard USB mengirim scancode ke sistem operasi, yang kemudian diinterpretasi sebagai penekanan tombol. YubiKey harus memastikan agar tidak terjadi ambiguitas: ada banyak tata letak keyboard yang berbeda, dan scancode tersebut harus diinterpretasi sebagai karakter yang sama di semua jenis tata letak keyboard. Untuk mengatasi hal ini, tim Yubico menciptakan 'modhex', yaitu representasi khusus dari karakter heksadesimal yang hanya menggunakan karakter 'aman'. Karakter 'aman' adalah karakter yang memiliki scancode sama pada semua tata letak keyboard.
Mengunggah kunci AES yang dihasilkan ke Yubico
Jika Anda ingin menyesuaikan kunci AES YubiKey Anda namun tetap ingin menggunakannya untuk autentikasi melalui server Yubico, Anda dapat mengunggah kunci tersebut melalui https://upgrade.yubico.com/getapikey/. Anda akan diminta untuk memasukkan alamat email dan OTP dari YubiKey Anda.
Perbarui PIN pada modul PIV
Modul Personal Identity Verification (PIV) menyimpan kunci privat dan berkas sertifikat terkait untuk keperluan seperti enkripsi, autentikasi, dan tanda tangan. Jika YubiKey Anda mendukung fitur ini, Anda sebaiknya juga mengubah PIN dan PUK serta Management Key.
Atur PIN.
[…]$ ykman piv access change-pin Enter the current PIN: 123456 Enter the new PIN: ******** Repeat for confirmation: ******** New PIN set.
Atur PUK.
[…]$ ykman piv access change-puk Enter the current PUK: 12345678 Enter the new PUK: ******** Repeat for confirmation: ******** New PUK set.
Perbarui Management Key.
[…]$ ykman piv access change-management-key --generate --protect Enter the current management key [blank to use default key]: Enter PIN: ********
Sekarang Anda dapat menggunakan modul PIV dengan aman untuk membuat kunci privat dan menyimpan sertifikat.
Ubah PIN pada modul FIDO2
FIDO2 adalah standar autentikasi terbuka yang mencakup sub-standar dan protokol untuk menyediakan metode autentikasi dua faktor atau bahkan tanpa kata sandi (passwordless).
Salah satu kasus penggunaan menarik dari modul FIDO adalah penyimpanan identitas kunci publik OpenSSH, yang dapat langsung dikenali dan digunakan oleh agen OpenSSH modern. Hal ini membuat kunci SSH menjadi sangat portabel.
Jika kunci Anda mendukung FIDO, ubahlah PIN-nya menggunakan ykman fido access seperti berikut:
[…]$ ykman piv access change-pin Enter the current PIN: 123456 Enter the new PIN: ******** Repeat for confirmation: ******** New PIN set.
Konfigurasikan kata sandi untuk OATH
Fitur OATH menyediakan protokol autentikasi TOTP dan HOTP. Fitur ini dapat dilindungi dengan frasa sandi untuk mengakses dan menghasilkan kode OTP. Hal ini berbeda dengan fitur Yubico OTP, yang menggunakan satu rahasia tersimpan di YubiKey untuk challenge-response.
Ubah kata sandi OATH dengan perintah berikut:
[…]$ ykman oath access change Enter the new password: Repeat for confirmation:
Konfigurasikan perangkat Anda agar mengingat kata sandi ini sehingga Anda tidak perlu memasukkannya kembali.
[…]$ ykman oath access remember
Menggunakan YubiKey untuk autentikasi ke server OpenSSH
Dengan menggunakan FIDO2 dan OpenSSH versi 8.2 atau lebih baru, Anda dapat menghasilkan kunci OpenSSH yang hanya dapat digunakan jika YubiKey terhubung. Penggunaan kunci ini dapat dilindungi dengan autentikasi berbasis kehadiran saja atau kombinasi kehadiran dan masukan PIN.
Hasilkan kunci publik di setiap host yang ingin Anda gunakan bersama kunci privat, sehingga agen OpenSSH dapat menemukannya:
[…]$ ssh-keygen -t ed25519-sk
Hasilkan kunci publik dan simpan identitasnya di dalam modul FIDO2 agar pasangan kunci publik-privat menjadi portabel:
[…]$ ssh-keygen -t ed25519-sk -O resident -O application=ssh:fedora -O verify-required
| Kunci yang disebut resident key memerlukan perlindungan dengan PIN untuk melindungi kunci privatnya. |
Alternatif untuk kunci tanpa dukungan FIDO2
Jika kunci tidak mendukung FIDO2, Anda perlu menggunakan metode alternatif melalui modul PIV dan PKCS#11.
Buat kunci privat ED25519 di dalam modul PIV yang memerlukan masukan PIN setiap kali digunakan dan harus selalu menyentuh tombol YubiKey:
[…]$ ykman piv keys generate --algorithm ED25519 --pin-policy ONCE --touch-policy ALWAYS 9a public.pem Enter PIN: ********
Slot 9a pada kunci dikhususkan untuk autentikasi. Tersedia slot lainnya untuk fitur seperti enkripsi atau tanda tangan.
Buat sertifikat pada slot yang sama untuk pustaka PIV/PKCS#11:
[…]$ ykman piv certificates generate --subject "CN=OpenSSH" --hash-algorithm SHA384 9a pubkey.pem Enter PIN: ******** Touch your YubiKey…
Sekarang hasilkan kunci publik dari sertifikat X.509 yang disimpan di YubiKey. Fitur lain seperti resident key berfungsi sama seperti pendekatan FIDO2, tetapi Anda harus menambahkan opsi tambahan seperti contoh di bawah ini.
[…]$ ssh-keygen -D /usr/lib/libykcs11.so -e
Masuk ke sistem menggunakan kunci publik ini:
[…]$ ssh -I /usr/lib/libykcs11.so user@remote.example.org
ssh-agent juga dapat memuat kunci dari YubiKey dengan perintah berikut:
[…]$ ssh -s /usr/lib/libykcs11.so
Menggunakan YubiKey untuk autentikasi ke situs web
Sejak tahun 2019, sedang dilakukan upaya untuk menstandarkan penggunaan YubiKey di web. Standar baru ini disebut WebAuthn, dan Anda dapat mempelajarinya lebih lanjut di https://www.yubico.com/solutions/webauthn/. Untuk saat ini, cara termudah untuk melihat platform mana saja yang mendukung YubiKey adalah dengan menelusuri katalog Yubico.
Sebagai alternatif untuk Yubico OTP atau WebAuthn, yang keduanya secara default tidak memerlukan penyimpanan kredensial di YubiKey, Anda juga dapat menggunakan TOTP konvensional seperti yang digunakan di sebagian besar situs web saat ini. Tersedia aplikasi desktop dan setidaknya aplikasi Android untuk mempermudah penggunaannya. Anda dapat menyimpan hingga 32 kredensial TOTP pada YubiKey 5.
Instal aplikasi desktop dari repositori resmi:
[…]$ sudo dnf install -y yubioath-desktop
Tambahkan akun TOTP dengan ykman seperti berikut:
[…]$ ykman oath accounts add google <TOTP secret>
Ambil kode TOTP dengan cara berikut:
[…]$ ykman oath accounts code google
Want to help? Learn how to contribute to Fedora Docs ›