Tutorial ini akan menunjukkan kepada Anda cara mengatur otentikasi dua faktor SSH di server Ubuntu menggunakan Google Authenticator yang terkenal. Ini akan sangat meningkatkan keamanan layanan SSH di server Ubuntu Anda.
Cara Kerja Otentikasi Dua Faktor
Biasanya, Anda hanya perlu memasukkan kata sandi atau menggunakan kunci SSH untuk masuk ke server Ubuntu Anda dari jarak jauh. Otentikasi dua faktor (2FA) mengharuskan Anda memasukkan dua informasi untuk masuk. Jadi, Anda juga perlu memasukkan kata sandi satu kali berbasis waktu untuk masuk ke server SSH Anda. Kata sandi satu kali ini dihitung menggunakan algoritma TOTP, yang merupakan standar IETF. Saat ini banyak situs web dan layanan (Facebook, Google, Twitter, dll) menawarkan 2FA bagi pengguna untuk mengamankan akun mereka dan sebaiknya Anda juga mengaktifkan 2FA di server SSH Anda.
Tutorial ini akan menunjukkan cara menyiapkan
- Otentikasi sandi dengan 2FA
- Otentikasi kunci publik dengan 2FA
Catatan :Perangkat lunak server open-source yang akan kita gunakan dalam artikel ini bernama libpam-google-authenticator
, yang diinstal dari repositori default Ubuntu. Google perusahaan tidak terlibat dalam proses otentikasi dalam bentuk atau bentuk apa pun. Perangkat lunak server dan aplikasi seluler tidak memerlukan akses jaringan.
Langkah 1:Instal dan Konfigurasikan Google Authenticator di Server Ubuntu
Masuk ke server Ubuntu Anda dan jalankan perintah berikut untuk menginstal Google Authenticator dari repositori paket default Ubuntu.
sudo apt install -y libpam-google-authenticator
Kemudian jalankan google-authenticator
perintah untuk membuat kunci rahasia baru di direktori home Anda.
google-authenticator
Saat ditanya “Apakah Anda ingin token autentikasi berbasis waktu?” Jawab y .
Kemudian Anda akan melihat kode QR yang dapat Anda pindai menggunakan aplikasi TOTP di ponsel Anda. Ada dua aplikasi yang saya rekomendasikan:
- Google Authenticator adalah aplikasi seluler TOTP yang paling terkenal. Anda dapat menginstalnya melalui Google Play atau Apple app store di ponsel Anda.
- Google Authenticator aplikasi seluler bukan sumber terbuka. Jika tidak mempercayai Google, Anda dapat menggunakan FreeOTP, aplikasi seluler TOTP open-source yang dikembangkan oleh Red Hat.
Pindai kode QR dengan Google Authenticator atau FreeOTP di ponsel Anda. Perhatikan bahwa Anda perlu memperbesar jendela terminal untuk memindai kode QR lengkap.
Kode QR mewakili kunci rahasia, yang hanya diketahui oleh server SSH Anda dan aplikasi seluler TOTP Anda. Setelah kode QR dipindai, Anda dapat melihat kata sandi satu kali enam digit di ponsel Anda. Secara default, itu berubah setiap 30 detik. Anda harus memasukkan kata sandi satu kali ini nanti untuk masuk ke server Ubuntu melalui SSH.
Di jendela terminal, Anda dapat melihat kunci rahasia, kode verifikasi, dan kode gores darurat. Sebaiknya Anda menyimpan informasi ini ke tempat yang aman untuk digunakan nanti.
Kemudian Anda dapat memasukkan y untuk menjawab semua pertanyaan yang tersisa. Ini akan memperbarui file konfigurasi Google Authenticator Anda, menonaktifkan beberapa penggunaan token autentikasi yang sama, menambah jendela waktu, dan mengaktifkan pembatasan kecepatan untuk melindungi dari upaya login paksa.
Langkah 2:Konfigurasikan SSH Daemon untuk Menggunakan Google Authenticator
- Otentikasi sandi dengan 2FA
- Otentikasi kunci publik dengan 2FA
Otentikasi Kata Sandi dengan 2FA
Jika Anda tidak menggunakan kunci SSH, ikuti petunjuk di bawah ini.
Buka file konfigurasi server SSH.
sudo nano /etc/ssh/sshd_config
Temukan dua parameter berikut dalam file dan pastikan keduanya disetel ke ya .
UsePAM yes ChallengeResponseAuthentication yes
PAM singkatan dari modul otentikasi pluggable. Ini menyediakan cara mudah untuk memasukkan metode otentikasi yang berbeda ke dalam sistem Linux Anda. Untuk mengaktifkan Google Authenticator dengan SSH, autentikasi PAM dan Challenge-Response harus diaktifkan.
Jika Anda ingin mengizinkan pengguna root untuk menggunakan 2FA, cari PermitRootLogin
parameter dan atur nilainya ke yes
. Tidak bisa PermitRootLogin no
atau PermitRootLogin prohibit-password
.
PermitRootLogin yes
Simpan dan tutup file. Selanjutnya, edit file aturan PAM untuk daemon SSH.
sudo nano /etc/pam.d/sshd
Di awal file ini, Anda dapat melihat baris berikut, yang mengaktifkan otentikasi kata sandi saat ChallengeResponseAuthentication
disetel ke yes
.
@include common-auth
Untuk mengaktifkan 2FA di SSH, tambahkan dua baris berikut.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Simpan dan tutup file. Kemudian restart daemon SSH agar perubahan diterapkan.
sudo systemctl restart ssh
Mulai sekarang daemon SSH akan meminta Anda memasukkan kata sandi pengguna dan kode verifikasi (kata sandi satu kali yang dibuat oleh Google Authenticator). Tangkapan layar berikut menunjukkan sesi login SSH dari kotak CentOS ke server Ubuntu 20.04.
Otentikasi Kunci Publik dengan 2FA
Jika Anda menggunakan kunci SSH untuk masuk ke server SSH, ikuti petunjuk di bawah ini.
Buka file konfigurasi server SSH.
sudo nano /etc/ssh/sshd_config
Temukan dua parameter berikut dalam file dan pastikan keduanya disetel ke ya .
UsePAM yes ChallengeResponseAuthentication yes
PAM singkatan dari modul otentikasi pluggable. Ini menyediakan cara mudah untuk memasukkan metode otentikasi yang berbeda ke dalam sistem Linux Anda. Untuk mengaktifkan Google Authenticator dengan SSH, autentikasi PAM dan Challenge-Response harus diaktifkan.
Jika Anda ingin mengizinkan pengguna root untuk menggunakan 2FA, cari PermitRootLogin
parameter dan atur nilainya ke yes
. Tidak bisa PermitRootLogin no
atau PermitRootLogin prohibit-password
.
PermitRootLogin yes
Selanjutnya, tambahkan baris berikut di akhir file ini. Ini memberi tahu daemon SSH bahwa pengguna harus melewati otentikasi kunci publik dan otentikasi respons tantangan.
AuthenticationMethods publickey,keyboard-interactive
Simpan dan tutup file. Selanjutnya, edit file aturan PAM untuk daemon SSH.
sudo nano /etc/pam.d/sshd
Di awal file ini, Anda dapat melihat baris berikut, yang mengaktifkan otentikasi kata sandi saat ChallengeResponseAuthentication
disetel ke yes
. Kami perlu mengomentari baris ini, karena kami akan menggunakan kunci SSH alih-alih kata sandi.
@include common-auth
Untuk mengaktifkan 2FA di SSH, tambahkan dua baris berikut.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Simpan dan tutup file. Kemudian restart daemon SSH agar perubahan diterapkan.
sudo systemctl restart ssh
Mulai sekarang Anda perlu menggunakan kunci SSH dan kode verifikasi Google Authenticator untuk login.
Catatan
- Setiap pengguna di server Ubuntu Anda perlu menjalankan
google-authenticator
perintah dan pindai kode QR untuk menggunakan otentikasi dua faktor. Jika pengguna tidak menyiapkan dan mencoba masuk, pesan kesalahan “Izin ditolak (interaktif keyboard) ” akan ditampilkan. - Kode Goresan Darurat adalah kode cadangan Anda. Jika Anda kehilangan ponsel, Anda dapat memasukkan salah satu dari lima kode gores darurat alih-alih kata sandi satu kali untuk menyelesaikan verifikasi dua langkah. Kode ini hanya untuk sekali pakai.
- Jika Anda ingin mengubah kunci rahasia, cukup masuk ke server Anda dan jalankan
google-authenticator
perintah lagi untuk memperbarui~/.google_authenticator
berkas. - Karena sandi satu kali dihitung menggunakan kunci rahasia bersama dan waktu saat ini, jadi sebaiknya aktifkan sinkronisasi waktu NTP di server Ubuntu Anda untuk menjaga waktu yang akurat, meskipun sebelumnya kami telah mengizinkan kemiringan waktu 4 menit antara server Ubuntu dan aplikasi seluler. Server Ubuntu Anda dan aplikasi seluler TOTP dapat menggunakan zona waktu yang berbeda.
Cara Menonaktifkan Otentikasi Dua Faktor SSH
Edit file aturan PAM untuk daemon SSH.
sudo nano /etc/pam.d/sshd
Komentari baris berikut.
auth required pam_google_authenticator.so
Simpan dan tutup file. Jika Anda menambahkan baris berikut di /etc/ssh/sshd_config
berkas,
AuthenticationMethods publickey,keyboard-interactive
Hapus keyboard-interactive
metode otentikasi.
AuthenticationMethods publickey
Simpan dan tutup file. Kemudian restart daemon SSH.
sudo systemctl restart ssh