Ubuntu 22.04 Server / Login sebagai root secara lokal dan melalui SSH

Di Ubuntu 22.04 Server, cara umum bekerja dengan hak root adalah masuk melalui akun biasa lalu menjalankan sudo -i. Login root langsung memerlukan pemeriksaan kata sandi dan kebijakan login secara terpisah; SSH juga bergantung pada PermitRootLogin dan metode autentikasi.

Hak root dan login langsung

Root adalah akun yang mengelola seluruh sistem. Ubuntu mengunci kata sandi root secara bawaan dan mengizinkan pengguna tertentu menjalankan sudo dengan kredensial mereka sendiri. Akun root tetap ada. Rancangan ini dijelaskan dalam dokumentasi pengelolaan pengguna Ubuntu.

Jika hanya membutuhkan shell administratif, gunakan perintah berikut. Autentikasi biasanya memakai kata sandi akun biasa, sesuai kebijakan sudo. Pastikan whoami menampilkan root, lalu gunakan exit setelah selesai untuk kembali ke akun biasa. Ini tidak mengaktifkan kata sandi root atau mengubah kebijakan SSH.

sudo -i
whoami
exit

Atur kata sandi root secara terpisah hanya jika perlu login dengan kata sandi di konsol atau beralih memakai su -. Permintaan sudo pertama memakai kata sandi akun biasa; dua masukan berikutnya menetapkan kata sandi root baru. Karakter tidak ditampilkan saat diketik.

sudo passwd root
su -
whoami
exit

su - memakai kata sandi root yang baru ditetapkan. Mengaturnya tidak otomatis mengizinkan semua metode login: PAM (Pluggable Authentication Modules, modul autentikasi yang dapat dipasang) serta kebijakan konsol dan akses jarak jauh dapat membatasinya. Lihat manual sudo Ubuntu 22.04 untuk sudo -i.

Memeriksa akses dan kebijakan SSH yang ada

Prosedur ini membahas OpenSSH pada server Ubuntu 22.04 yang Anda kelola. Biarkan sesi SSH akun biasa tetap terbuka dan siapkan konsol fisik atau konsol pemulihan cloud. Untuk produksi, pertimbangkan dahulu akun biasa diikuti sudo. Jika root langsung diperlukan, tentukan juga autentikasi kunci publik dan jaringan administrasi yang diizinkan.

Jika server SSH belum terpasang, jalankan sudo apt update, lalu sudo apt install openssh-server. Periksa layanan dengan sudo systemctl status ssh.service. Anda memerlukan alamat dan port SSH sebenarnya; firewall serta aturan cloud harus mengizinkan jalur administrasi tersebut.

Cadangkan konfigurasi dan cari direktif terkait sebelum mengubahnya. Jika nama cadangan sudah ada, pilih nama lain agar tidak menimpanya. Simpan cadangan di luar direktori yang dimuat melalui *.conf, seperti contoh berikut.

sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.before-root-login
sudo cp -a /etc/ssh/sshd_config.d /etc/ssh/sshd_config.d.before-root-login
sudo grep -RnsE '^[[:space:]]*(Include|Match|PermitRootLogin|PasswordAuthentication|PubkeyAuthentication|AuthenticationMethods|AllowUsers|DenyUsers|AllowGroups|DenyGroups)' /etc/ssh/sshd_config /etc/ssh/sshd_config.d

Berkas server adalah sshd_config, berbeda dari ssh_config milik klien. Ubuntu 22.04 biasanya memuat /etc/ssh/sshd_config.d/*.conf lebih dahulu. Sebagian besar direktif memakai nilai pertama yang diperoleh, sehingga tambahan di akhir berkas belum tentu menimpa nilai sebelumnya. Periksa urutan Include, kondisi Match, dan konfigurasi cloud, lalu verifikasi nilai efektifnya.

Dalam manual sshd_config Ubuntu 22.04, PermitRootLogin yes mengizinkan root jika syarat lain terpenuhi. prohibit-password melarang autentikasi kata sandi dan keyboard-interactive untuk root, tetapi dapat mengizinkan kunci publik. no melarang root melalui SSH. Satu baris bawaan yang dikomentari tidak cukup untuk memastikan kebijakan sebenarnya.

Mengatur SSH root dengan kata sandi

Metode ini membuka autentikasi kata sandi root, jadi pilih hanya jika kebutuhan administrasi mengharuskannya. Atur kata sandi dengan sudo passwd root, lalu edit konfigurasi yang benar-benar diprioritaskan melalui sudoedit /etc/ssh/sshd_config atau berkas potongan terkait. Berikut adalah contoh kebijakan, bukan perintah untuk menambahkan baris sembarangan di akhir.

PermitRootLogin yes
PasswordAuthentication yes

PermitRootLogin yes saja tidak cukup. Autentikasi kata sandi, AuthenticationMethods, batasan pengguna atau grup, PAM, dan status akun juga harus mengizinkan akses. PasswordAuthentication yes global dapat memengaruhi pengguna lain; periksa apakah memperluas kebijakan. Jangan menonaktifkan firewall atau menghapus autentikasi multifaktor untuk mengikuti panduan ini.

Menyimpan berkas belum menyelesaikan penerapan. Ikuti validasi dan pemuatan ulang di bawah sebelum menguji dari klien. Ganti 192.0.2.20 dengan alamat server sebenarnya. Untuk port selain bawaan 22, gunakan ssh -p PORT dengan nomor yang sesuai.

ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password root@192.0.2.20

Pengujian ini memilih kata sandi, bukan kunci publik. Kata sandi saja tidak cukup jika server mewajibkan autentikasi tambahan. Periksa sidik jari kunci host melalui jalur administrasi tepercaya; jangan menonaktifkan verifikasi untuk melewati peringatan perubahan kunci.

Menggunakan kunci publik untuk SSH root

Klien menyimpan kunci privat dan server hanya mendaftarkan kunci publik pasangannya. Mengaktifkan login root dengan kata sandi bukan prasyarat. Kunci dapat didaftarkan melalui sesi administratif atau konsol yang sudah ada, tanpa lebih dahulu membuka SSH root dengan kata sandi.

Jika klien belum memiliki kunci yang sesuai, buat dengan ssh-keygen -t ed25519. Pilih nama berkas baru tanpa menimpa kunci lama dan lindungi kunci privat dengan frasa sandi. Daftarkan satu baris dari ~/.ssh/id_ed25519.pub. Jangan pernah menyalin kunci privat tanpa akhiran .pub ke server.

Dalam sesi administratif server yang sudah terbuka, siapkan izin direktori dan berkas seperti berikut, lalu tambahkan baris kunci publik klien di editor. Pertahankan kunci yang ada dan hindari duplikat. Jika memakai nama berkas lain, pilih kunci publik pasangannya.

sudo install -d -m 700 -o root -g root /root/.ssh
sudo touch /root/.ssh/authorized_keys
sudo chown root:root /root/.ssh/authorized_keys
sudo chmod 600 /root/.ssh/authorized_keys
sudoedit /root/.ssh/authorized_keys

Contoh ini menggunakan lokasi kunci berizin bawaan. Periksa lokasi sebenarnya jika AuthorizedKeysFile menunjuk tempat lain. Pilih kebijakan berikut untuk menolak kata sandi root, sesuaikan direktif sebelumnya yang bertentangan, lalu validasi.

PermitRootLogin prohibit-password
PubkeyAuthentication yes

Setelah konfigurasi server divalidasi dan diterapkan, sambungkan dari klien seperti berikut. Jika diminta frasa sandi kunci privat, masukkan frasa sandi kunci klien, bukan kata sandi root. Kunci publik tetap harus memenuhi kebijakan PAM, akun, dan akses.

ssh -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes root@192.0.2.20

Memvalidasi konfigurasi dan menguji sesi baru

  1. Periksa dahulu sintaks dan kondisi kunci host pada server. Pemeriksaan -t yang berhasil biasanya tidak menampilkan keluaran. Jika ada kesalahan, perbaiki berkas dan baris terkait sebelum memuat ulang. -T menampilkan konfigurasi efektif; dengan -C, kondisi Match untuk koneksi tertentu dapat dievaluasi.
sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T -C user=root,addr=192.0.2.10,host=admin.example | grep -E '^(permitrootlogin|passwordauthentication|pubkeyauthentication|authenticationmethods|authorizedkeysfile|allowusers|denyusers|allowgroups|denygroups) '

Ganti 192.0.2.10 dengan alamat klien administrator sebagaimana terlihat oleh server, dan admin.example dengan hostname klien yang dievaluasi. Jika menggunakan Match LocalAddress atau LocalPort, sertakan laddr dan lport dalam -C. Jika nilai tidak sesuai, selidiki prioritas dan kondisinya dahulu. Opsi dijelaskan dalam manual sshd Ubuntu 22.04.

  1. Setelah sintaks benar dan nilai efektif sesuai kebijakan yang diinginkan, muat ulang layanan. Biarkan sesi administrasi terbuka dan uji kata sandi atau kunci melalui jendela klien lain.
sudo systemctl reload ssh.service
sudo systemctl is-active ssh.service
  1. Layanan active tidak menjamin autentikasi baru berhasil. Dalam sesi root baru, pastikan whoami menampilkan root dan id -u menampilkan 0. Uji pula login akun biasa yang baru dan sudo. Kondisi pengguna, kunci, jaringan, dan akun masih dapat menolak akses.

Menelusuri kegagalan dan membatalkan akses root langsung

Untuk Permission denied, periksa autentikasi, akun, dan kebijakan akses. Untuk timeout atau koneksi ditolak, periksa alamat, port, layanan, dan firewall secara terpisah. Gunakan sudo journalctl -u ssh.service -n 50 --no-pager pada server dan ssh -v root@192.0.2.20 pada klien. Samarkan alamat, nama pengguna, dan informasi sensitif lain sebelum membagikan log.

Untuk melarang root melalui SSH lagi, ubah PermitRootLogin efektif menjadi no, periksa sshd -t dan sshd -T sesuai kondisi koneksi, lalu jalankan sudo systemctl reload ssh.service. Pulihkan pula kebijakan kata sandi yang diubah sementara. Kembalikan hanya berkas dan entri yang diubah, bukan menimpa seluruh direktori potongan secara sembarangan.

Setelah memastikan SSH dan sudo bekerja melalui akun biasa lain, kunci kata sandi root jika Anda mengaktifkannya untuk tugas ini dan tidak memerlukannya lagi. Menurut manual passwd, -l mengunci kata sandi, bukan semua metode akses seperti kunci publik. Verifikasi larangan SSH secara terpisah dengan PermitRootLogin no.

sudo passwd -l root

Mengunci kata sandi atau mengubah SSH tidak otomatis mengakhiri sesi root yang sudah ada. Selesaikan pekerjaan dan tutup shell root yang dibuka dengan exit. Jika perlu memulihkan akses, gunakan sesi akun biasa yang tetap terbuka atau konsol pemulihan berdasarkan cadangan dan catatan perubahan.