Rocky Linux: mengatur akses SSH root dengan kunci publik

Anda dapat mengizinkan login SSH untuk akun root di Rocky Linux, tetapi lebih aman dan lebih mudah diaudit menggunakan akun administratif biasa dengan sudo. Jika akses root langsung benar-benar diperlukan, jangan aktifkan login dengan kata sandi dan izinkan hanya autentikasi kunci publik, kemudian terapkan setelah memeriksa pengaturan dan melakukan uji sesi terpisah.

Pertama, tinjau metode yang direkomendasikan

SSH (Secure Shell) menyediakan koneksi terenkripsi dan sshd menerima koneksi tersebut. Panduan ini mengasumsikan SSH sudah berfungsi, hak administratif tersedia, dan konsol independen telah diuji untuk pemulihan. Periksa versi dan manual lokal karena konfigurasi distribusi dapat berbeda.

Akun individual membantu mengaitkan perintah sudo dengan pengguna, tetapi tidak otomatis merekam semua tindakan dalam shell root. Gunakan akun yang sudah sesuai jika tersedia; adminuser adalah nama contoh dan hanya dibuat jika belum ada.

Masuk sebagai pengguna biasa dan menjalankan hanya perintah yang diperlukan dengan sudo mengurangi paparan langsung kredensial root dan memungkinkan pencatatan aktivitas spesifik pengguna.

sudo useradd adminuser
sudo usermod -aG wheel adminuser

Setelah membuat akun, daftarkan kunci publik dan verifikasi bahwa sudo -v berfungsi dalam sesi baru. Anda harus menguji ini sebelum menutup koneksi SSH yang ada untuk menghindari terkunci karena konfigurasi yang salah.

Menyiapkan login dengan kunci publik tidak menetapkan kata sandi sudo untuk akun baru. Jika kebijakan wheel normal meminta kata sandi pengguna tersebut, siapkan dengan sudo passwd adminuser dan uji sudo -v dalam sesi baru di bawah kebijakan yang dimaksud. Jangan memberikan NOPASSWD secara luas sebagai solusi sementara. Jika adminuser sudah ada, periksa saja alih-alih mengulangi useradd.

Pastikan direktori home, shell, aturan sudo, PAM (Pluggable Authentication Modules) dan pembatasan akun sesuai. Buka sesi baru sebelum menguji keanggotaan grup; simpan sesi lama hingga login dan sudo berhasil.

Periksa pengaturan login SSH dan root saat ini

Lebih akurat untuk memeriksa konfigurasi akhir yang efektif menggunakan sshd -T, yang menggabungkan file include dan default, daripada hanya melihat satu baris di file konfigurasi.

sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication|pubkeyauthentication) '
sudo grep -RinE '^[[:space:]]*(PermitRootLogin|PasswordAuthentication|PubkeyAuthentication)' \
  /etc/ssh/sshd_config /etc/ssh/sshd_config.d

Pengaturan di bawah kondisi Match dapat menghasilkan hasil yang berbeda tergantung pada pengguna yang terhubung dan alamat sumber. Dalam lingkungan yang kompleks, verifikasi dengan menentukan kondisi nyata menggunakan sshd -T -C.

Pencarian grep tidak membuktikan berkas yang ditemukan benar-benar disertakan atau mencakup seluruh kebijakan. Periksa Include, AuthenticationMethods, AuthorizedKeysFile, pembatasan pengguna dan grup, serta parameter unit layanan. Jika layanan memakai berkas atau opsi lain, sertakan parameter tersebut saat menguji. Jika direktori konfigurasi tambahan tidak ada, pesan grep saja tidak membuktikan layanan rusak.

Siapkan kunci publik root

File Kunci dan Pengaturan Izin

Daftarkan kunci publik dari administrator tepercaya di authorized_keys root. Ganti string kunci publik dalam perintah di bawah dengan kunci publik yang sebenarnya dalam satu baris.

Periksa AuthorizedKeysFile efektif untuk root; contoh ini memakai jalur konvensional dan harus disesuaikan jika konfigurasi berbeda. Cadangkan berkas yang ada dan pertahankan kunci serta opsi administrator lain. String contoh bukan kunci valid: ganti seluruh baris dengan isi berkas publik .pub yang sebenarnya dan pastikan algoritmanya diterima oleh kebijakan sistem.

sudo install -d -m 700 -o root -g root /root/.ssh
echo 'ssh-ed25519 public_key_string administrator_identifier' | sudo tee -a /root/.ssh/authorized_keys
sudo chown root:root /root/.ssh/authorized_keys
sudo chmod 600 /root/.ssh/authorized_keys
sudo restorecon -Rv /root/.ssh

Jangan unggah kunci privat ke server. Saat menambahkan kunci publik, pastikan tidak ada pemecahan baris yang rusak dan tidak menduplikasi kunci yang sudah terdaftar.

tee -a menambahkan isi tanpa menimpa seluruh berkas. Pastikan baris terakhir lama berakhir dengan newline agar dua kunci tidak tergabung. Periksa hasil setiap perintah, izin, pemilik dan konteks SELinux. Lihat panduan kunci SSH Rocky Linux.

Pembatasan Kunci Publik

Jika kunci hanya untuk otomatisasi, Anda dapat membatasi sumber koneksi dan fungsi yang dijalankan dengan opsi authorized_keys seperti from=, command=, dan restrict. Namun, pembatasan yang salah dapat mengganggu operasi, jadi uji terlebih dahulu dengan kunci terpisah.

restrict membatasi forwarding, terminal dan eksekusi rc, tetapi tidak memilih perintah wajib dengan sendirinya. Lihat manual sshd dan authorized_keys untuk opsi yang didukung versi Anda.

Wajibkan autentikasi kunci publik dalam kebijakan root yang berlaku

Cadangkan konfigurasi dan periksa struktur Include dan Match pada berkas utama. OpenSSH menggunakan nilai yang diperoleh pertama untuk banyak pengaturan; sebuah nama berkas yang diawali dengan 90 tidak secara otomatis menimpa nilai yang sebelumnya. Berikut adalah blok khusus root di akhir /etc/ssh/sshd_config. Sunting blok Match root yang sudah efektif daripada menduplikasinya. Jangan sembarangan menaruh Match di dalam berkas yang disertakan awal dan mengubah interpretasi pengaturan global kemudian.

Match User root
    PermitRootLogin prohibit-password
    PubkeyAuthentication yes
    AuthenticationMethods publickey

prohibit-password menonaktifkan autentikasi kata sandi root dan interaktif keyboard tetapi tidak meniadakan setiap metode lain yang bukan kata sandi. AuthenticationMethods publickey secara eksplisit memerlukan kunci publik di sini. Jangan mengganti kebijakan multifaktor yang diwajibkan organisasi dengan contoh kunci tunggal ini.

sudo sshd -t
sudo sshd -T -C user=root,host=client.example.test,addr=192.0.2.10 | grep -E "^(permitrootlogin|pubkeyauthentication|passwordauthentication|authenticationmethods) "

Ganti host dan alamat dengan kondisi koneksi yang sebenarnya. Muat ulang hanya setelah sintaks dan kebijakan root serta administrator normal yang efektif sudah benar. Pertahankan koneksi yang ada saat menguji autentikasi yang diterima dan ditolak serta sudo di sesi baru.

Nilai host adalah nama sumber klien yang teresolusi, addr adalah alamat sumber; tambahkan laddr dan lport bila aturan membutuhkannya. Ulangi pemeriksaan untuk administrator biasa. Untuk root harapkan permitrootlogin prohibit-password, pubkeyauthentication yes dan authenticationmethods publickey. Nilai global passwordauthentication yes dapat tetap terlihat, tetapi prohibit-password menolak kata sandi root. Hasil ini belum membuktikan kunci dapat dipakai.

Validasi sintaks, muat ulang dan uji sesi baru

  1. Tetap buka sesi administrator saat ini.
  2. Periksa sintaks dengan sshd -t. Seharusnya tidak ada keluaran dan status keluar harus 0.
  3. Muat ulang layanan SSH.
  4. Uji login kunci publik root di terminal baru.
  5. Pastikan bahwa login dengan kata sandi ditolak dan akun administrator yang ada berfungsi dengan baik.
sudo sshd -t &&
sudo systemctl reload sshd &&
sudo sshd -T -C user=root,host=client.example.test,addr=192.0.2.10 | grep -E '^(permitrootlogin|passwordauthentication|pubkeyauthentication|authenticationmethods) '

Jika pemeriksaan sintaks gagal, jangan memuat ulang layanan. Perbaiki file dan baris yang ditunjukkan oleh kesalahan. Reload meminta layanan membaca ulang konfigurasi; tetap buka sesi saat ini sampai pengujian koneksi baru selesai.

Ganti alamat dan nama sumber contoh sebelum menjalankan blok. Operator && mencegah reload jika validasi gagal; hasil reload sendiri tidak membuktikan autentikasi baru berhasil. Jika gagal, pulihkan hanya perubahan yang dicatat melalui konsol, validasi dan reload kembali.

Untuk uji baru dari klien OpenSSH, gunakan ssh -o ControlMaster=no -o ControlPath=none -o IdentitiesOnly=yes -i /jalur/kunci_privat -p 22 root@server.example.test dengan jalur, port dan server sebenarnya. Kunci privat tetap pada klien dan identitas host harus diverifikasi. Untuk menguji penolakan kata sandi saja, gunakan ssh -o ControlMaster=no -o ControlPath=none -o PubkeyAuthentication=no -o PreferredAuthentications=password -p 22 root@server.example.test. ControlPath=none mencegah penggunaan ulang koneksi yang telah diautentikasi. Lihat manual klien SSH. Uji pula login baru dan sudo -v administrator biasa.

Cara untuk lebih membatasi lingkup akses

Hanya izinkan jaringan manajemen pada firewall

Jangan membuka port SSH ke seluruh internet; hanya izinkan alamat asli dari VPN atau jaringan manajemen. Alamat di bawah ini adalah contoh untuk keperluan dokumentasi dan harus diganti dengan jaringan manajemen yang sebenarnya.

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" service name="ssh" accept'

Ganti public dan subnet dokumentasi dengan zona nyata dan jaringan manajemen, lalu uji izin runtime. Setelah memverifikasi koneksi baru, tambahkan aturan kaya yang sama dengan --permanent. Hapus izin SSH yang luas hanya setelah memastikan sumber dan jalur pemulihan konsol; jangan pertahankan atau hapus aturan yang tidak terkait.

Rich rule ini menambah izin; layanan, port, aturan lain atau IPv6 yang sudah terbuka tetap dapat mengizinkan sumber lain. Periksa zona, firewall penyedia dan alamat sumber aktual setelah NAT atau bastion. Untuk membatalkan hanya aturan yang baru dibuat, gunakan --remove-rich-rule dengan zona dan aturan yang sama pada cakupan runtime atau permanen yang sesuai. Lihat manual rich rule firewalld dan panduan firewalld Rocky Linux.

Di server remote, jangan hapus aturan yang ada sebelum memverifikasi bahwa aturan izinkan baru sesuai dengan sumber koneksi yang sebenarnya. Lebih aman menguji terlebih dahulu dengan aturan runtime dan mengamankan metode pemulihan konsol.

Memisahkan pengguna dan kunci

  • Terbitkan kunci berbeda untuk setiap orang dan batalkan hanya kunci tersebut ketika seseorang pergi atau berpindah peran.
  • Bedakan antara kunci otomatisasi dan kunci manajemen interaktif untuk manusia.
  • Tetapkan frase sandi pada kunci dan hanya gunakan penerusan agen jika diperlukan.
  • Kumpulkan log SSH dan upaya autentikasi abnormal secara terpusat dan berikan peringatan.

Kasus di mana Anda benar-benar harus mengaktifkan login kata sandi root

Jika Anda mengaktifkan PermitRootLogin yes bersamaan dengan autentikasi kata sandi, serangan brute-force dan kebocoran kredensial dapat langsung mengarah ke akses administratif penuh. Jika ada alasan yang tidak bisa dihindari, seperti peralatan lama, gunakan tanpa mengeksposnya langsung ke Internet, dan gabungkan dengan VPN/jaringan manajemen, waktu aplikasi singkat, kata sandi sementara yang kuat, dan pemantauan intensif.

PermitRootLogin yes
PasswordAuthentication yes
AuthenticationMethods any

Pengecualian ini menggantikan nilai dalam blok Match root yang sama seperti yang digunakan di atas. Menambahkan yes sementara AuthenticationMethods publickey tetap efektif tidak mengaktifkan login hanya menggunakan kata sandi. Kunci akun, PAM, dan aturan firewall tetap berlaku. Pulihkan kebijakan autentikasi asli segera setelah pengecualian berakhir.

AuthenticationMethods any menerima metode tunggal yang diaktifkan dan tidak mempertahankan persyaratan multifaktor. Uji sintaks dan nilai kondisional sebelum reload; batasi masa pengecualian, dan pulihkan kebijakan sebelumnya setelahnya.

Nilai ini hanyalah konfigurasi contoh dan tidak disarankan. Setelah pekerjaan selesai, segera kembalikan ke penggunaan kunci saja atau menonaktifkan login root, dan buang kata sandi yang digunakan.

Nonaktifkan login root langsung lagi

Pertama, verifikasi login kunci publik baru dan sudo untuk administrator normal. Setel PermitRootLogin ke no dalam blok Match root efektif yang sama yang diedit sebelumnya. Jangan mencoba mengembalikan kebijakan dengan menambahkan nilai yang bersaing di drop-in lain.

PermitRootLogin no

Validasi sintaks dengan sshd -t dan nilai efektif dengan sshd -T -C untuk koneksi root yang sebenarnya, lalu terapkan konfigurasi layanan yang sedang berjalan. Tetap buka sesi saat ini sambil memverifikasi bahwa login root baru ditolak dan administrator normal masih bisa terhubung.

Item yang harus diperiksa jika terjadi masalah

Gejala Item yang harus diperiksa
Kunci publik ditolak Periksa izin, pemilik, dan konteks SELinux dari /root/.ssh dan authorized_keys.
Pengaturan tidak diterapkan. Periksa sshd -T, urutan penyertaan, dan kondisi Match.
Koneksi habis waktu. Periksa alamat dan port listen sshd, firewalld, firewall tingkat atas, dan routing.
Reload layanan gagal. Periksa kesalahan sintaks dengan sshd -t dan journalctl -u sshd.

Dokumen Referensi

Arti tepat dari PermitRootLogin, Match, dan pengaturan terkait autentikasi dapat ditemukan di Manual resmi OpenSSH sshd_config.