Red Hat System Administration I 10.0

Daftar isi


Mengakses CLI

Login ke sistem remote

# login dengan password
user@host:~$ ssh remoteuser@remotehost

# login dengan key
user@host:~$ ssh -i mylab.pem remoteuser@remotehost

Eksekusi perintah dengan bash

# menggabungkan lebih dari 1 perintah
user@host:~$ command1 ; command2

# menampilkan waktu
user@host:~$ date
Tue Apr 29 17:58:22 UTC 2025
user@host:~$ date +%R
17:58
user@host:~$ date +%x
04/29/25

# mengubah password
user@host:~$ passwd

# mengetahui tipe/jenis file
user@host:~$ file /etc/passwd

# menampilkan file
user@host:~$ cat file1 file2
user@host:~$ less file
user@host:~$ head /etc/passwd
user@host:~$ tail -n 3 /etc/passwd

# menghitung jumlah baris, kata, dan karakter di dalam file
user@host:~$ wc /etc/passwd
user@host:~$ wc -l /etc/passwd ; wc -l /etc/group
user@host:~$ wc -m /etc/group /etc/hosts

Tab completion

# tekan tab 2x
user@host:~$ pasTab+Tab
passt         passt.avx2    pasta       paste
passt-repair  passwd        pasta.avx2

# tekan tab 2x
user@host:~$ passTab+Tab
passt         passt-repair  passt.avx2  passwd

# tekan tab 1x
user@host:~$ passwTab
Current password:

user@host:~$ ls /etc/pasTab

Tulis Perintah Panjang dalam Beberapa Baris

user@host:~$ head -n 3 \
/usr/share/dict/words \
/usr/share/dict/linux.words

Menampilkan history

user@host:~$ history
...output omitted...
   28  ls -lah
   29  date
   30  history

# menggunakan perintah sebelumnya tanpa mengetik ulang semuanya
user@host:~$ !ls
ls -lah

# menggunakan nomor dari history
user@host:~$ !28
ls -lah

Shortcut CLI serbaguna

Shortcut Deskripsi
Ctrl+A Lompat ke awal baris perintah.
Ctrl+E Lompat ke akhir baris perintah.
Ctrl+U Hapus dari posisi kursor hingga awal baris perintah.
Ctrl+K Hapus dari posisi kursor hingga akhir baris perintah.
Ctrl+LeftArrow Lompat ke awal kata sebelumnya pada baris perintah.
Ctrl+RightArrow Lompat ke akhir kata berikutnya pada baris perintah.
Ctrl+R Cari riwayat perintah berdasarkan pola (pattern) yang dimasukkan.

Bantuan dari dokumentasi lokal

Perintah man yang berada di direktori /usr/share/man untuk mengakses bantuan manual. Halaman man dibagi menjadi beberapa bagian. Setiap bagian berisi informasi tentang topik tertentu.

Bagian Tipe Konten Deskripsi
1 User commands Program shell dan program yang dapat dieksekusi.
2 System calls Rutinitas kernel yang dipanggil dari ruang pengguna.
3 Library functions Disediakan oleh pustaka pemrograman.
4 Special files Misalnya, file perangkat (device files).
5 File formats Untuk banyak file konfigurasi dan struktur data.
6 Games and screensavers Bagian historis untuk program-program hiburan.
7 Conventions, standards, and miscellaneous Protokol dan sistem file.
8 System administration and privileged commands Tugas pemeliharaan sistem.
9 Linux kernel API Panggilan internal kernel.
Command Hasil
Spacebar Gulir maju (ke bawah) satu layar.
PageDown Gulir maju satu layar.
PageUp Gulir mundur (ke atas) satu layar.
DownArrow Gulir maju satu baris.
UpArrow Gulir mundur satu baris.
D Gulir maju setengah layar.
U Gulir mundur setengah layar.
/string Cari maju dengan kata “string” pada halaman manual (man page).
N Ulangi pencarian sebelumnya ke arah maju pada halaman manual.
Shift+N Ulangi pencarian sebelumnya ke arah mundur pada halaman manual.
G Ke awal halaman manual.
Shift+G Ke akhir halaman manual.
Q Keluar dari halaman manual dan kembali ke prompt shell perintah.

Cari halaman manual berdasarkan kata kunci

# berdasarkan title
user@host:~$ man -f passwd

# lebih powerful, tidak hanya title tapi juga deskripsi semua halaman (setara perintah apropos)
user@host:~$ man -k passwd

# Perintah man dengan opsi -K (huruf besar) mencari kata kunci di halaman teks lengkap, bukan hanya di judul dan deskripsi. 
# Pencarian teks lengkap menggunakan sumber daya sistem yang lebih besar dan membutuhkan waktu lebih lama.
# Dengan pencarian halaman teks lengkap, perintah man menampilkan halaman pertama yang cocok. 
# Tekan Q untuk keluar dari halaman pertama ini, dan perintah man akan menampilkan halaman berikutnya.
user@host:~# man -K passwd

Mendaftarkan sistem untuk dukungan redhat

Mengggunakan rhc

root@host:~# rhc connect
Connecting host.example.com to Red Hat.
This might take a few seconds.
...

# perintah rhc mengaktifkan 3 fitur utama secara default. Jika hanya ingin mengaktifkan akses ke repositori konten tanpa mendaftar ke Red Hat Insights:
root@host:~# rhc connect --disable-feature=analytics,remote-management

# menggunakan kunci aktivasi
root@host:~# rhc connect --activation-key=<activation_key_name> --organization=<organization_ID>

# membatalkan Pendaftaran Sistem
root@host:~# rhc disconnect

Menggunakan subscription-manager

root@host:~# subscription-manager register

# menggunakan kunci aktivasi
root@host:~# subscription-manager register --activationkey <activation_key_name> --org <organization_ID>

# verifikasi status registrasi
root@host:~# subscription-manager status

Memeriksa kartu identitas

Sistem terdaftar menyimpan beberapa sertifikat di bawah direktori /etc/pki.

Gunakan perintah rct cat-cert untuk memeriksa sertifikat secara lebih detail:

root@host:~# rct cat-cert /etc/pki/product-default/479.pem

Bantuan berbasis AI untuk RHEL Lightspeed

Untuk menggunakan command-line-assistant harus menjalankan sistem yang berlangganan. Bisa menggunakan alat pengelola langganan untuk mengelola langganan sistem. RHEL 10.0 dan RHEL 9.6 serta versi yang lebih baru didukung.

root@host:~# dnf install command-line-assistant

# cara menggunakan
user@host:~$ c chat "How do I list running services?"

# untuk troubleshooting
user@host:~$ c chat "How do I check the status of the sshd service?"

# mode interaktif
user@host:~$ c chat --interactive

# contoh, jika sedang cek log dari Apache dan butuh bantuan untuk mendiagnosis kesalahan terbaru, jalankan perintah berikut
user@host:~$ sudo journalctl -u httpd.service --since "1 hour ago" | c chat "What could be causing errors in these logs?"

# memberikan informasi kepada asisten mengenai penggunaan memori saat ini, sehingga dapat mengidentifikasi konsumsi memori yang tinggi atau meningkat
user@host:~$ ps aux --sort=-%mem | head -n 20 | c chat "Is there a possible memory leak in one of these processes?"

# untuk analisis isi file
user@host:~$ cat /var/log/messages | c chat "Look for critical errors in this log file."

# analisis data
user@host:~$ c chat -a /var/log/boot.log "Why did the last boot take so long?"

Hirarki file sistem

ilustrasi

Lokasi Tujuan
/boot File-file untuk memulai proses booting.
/dev File perangkat khusus yang digunakan sistem untuk mengakses hardware.
/etc File konfigurasi khusus sistem.
/home Direktori home, tempat pengguna biasa menyimpan data dan file konfigurasi mereka.
/root Direktori home untuk pengguna super administratif, root.
/run Data runtime untuk proses yang berjalan sejak booting terakhir. Data ini mencakup file ID proses dan file lock. Isi direktori ini dibuat ulang saat reboot. Direktori ini menggabungkan direktori /var/run dan /var/lock dari versi awal Red Hat Enterprise Linux.
/tmp Ruang yang dapat ditulis oleh semua pengguna untuk file sementara. File yang tidak diakses, diubah, atau dimodifikasi selama 10 hari akan dihapus secara otomatis dari direktori ini. Direktori /var/tmp juga merupakan direktori temporary, di mana file yang tidak diakses, diubah, atau dimodifikasi selama lebih dari 30 hari akan dihapus secara otomatis.
/usr Perangkat lunak yang terinstal, pustaka bersama (shared libraries), termasuk file, dan data program yang hanya dapat dibaca. Subdirektori penting dalam direktori /usr meliputi perintah-perintah berikut:

/usr/bin: Perintah pengguna
/usr/sbin: Perintah administrasi sistem
/usr/local: Perangkat lunak kustom lokal
/var Data variabel khusus sistem yang harus bertahan di antara booting. File yang berubah secara dinamis, seperti database, direktori cache, file log, dokumen cetak antrean (printer-spooled), dan konten website, dapat ditemukan di direktori /var.

Di Red Hat Enterprise Linux 7 dan versi yang lebih baru, empat direktori di direktori root berisi file yang sama dengan file yang sesuai di direktori /usr:

Absolute path dan relative path

# absolute path dimulai dari direktori root (/) dan mencakup setiap subdirektori yang harus dilalui untuk mencapai file tertentu
# contoh: /var/log/messages

# relative path hanya menentukan jalur yang diperlukan untuk mencapai lokasi tersebut dari direktori kerja
# contoh: cd / ; cd var ; cd log ; cd ..
# menampilkan direktori saat ini (print working directory)
user@host:~$ pwd

# membuat file baru
user@host:~$ touch Videos/blockbuster1.ogg
user@host:~$ touch Videos/blockbuster2.ogg
user@host:~$ touch Documents/thesis_chapter1.txt
user@host:~$ touch Documents/thesis_chapter2.txt

# menampilkan daftar file di direktori home
user@host:~$ cd /var/log/
user@host:/var/log$ ls -l ~

# ke direktori sebelumnya
user@host:~$ cd -
user@host:~$ cd ..

Mengelola file dari CLI

Manajemen file

# membuat direktori secara rekursif
user@host:~/Documents$ mkdir -p Thesis/Chapter1 Thesis/Chapter2 Thesis/Chapter3

# menyalin file dan direktori
user@host:~/Videos$ cp blockbuster1.ogg blockbuster3.ogg

# menyalin direktori secara rekursif
user@host:~/ProjectY$ cp -r ../Thesis/ .

# mengubah nama dan memindahkan file/direktori
user@host:~/Documents$ mv thesis_chapter2.txt thesis_chapter2_reviewed.txt
user@host:~/Documents$ mv -v thesis_chapter1.txt Thesis/Chapter1

# menghapus file dan direktori
user@host:~/Documents$ rm Thesis/Chapter1/thesis_chapter1.txt
user@host:~/Documents$ rm -r Thesis/Chapter1

# gunakan opsi -i (interaktif) untuk konfirmasi sebelum neghapus
user@host:~/Documents$ rm -ri Thesis
Aspek Hard Link Symbolic Link (Symlink)
Definisi Referensi langsung ke inode file (data fisik di disk) File khusus yang berisi path ke file target (seperti pintasan)
Inode Memiliki inode yang sama dengan file asli Memiliki inode berbeda dari file target
File asli dihapus Data tetap tersedia melalui hard link karena isi data masih ada Symlink menjadi rusak (broken link) karena target tidak ditemukan
Lintas filesystem Tidak bisa (hanya dalam satu partisi/disk yang sama) Bisa (dapat merujuk ke file di partisi berbeda)
Ke direktori Tidak bisa (kecuali oleh root dengan opsi khusus) Bisa (dapat menunjuk ke direktori)
Link count Meningkatkan hitungan link pada inode Tidak mempengaruhi link count target
Ukuran file Tidak memiliki ukuran tersendiri (hanya entri direktori) Memiliki ukuran kecil (menyimpan path target sebagai teks)
Ciri di ls -l Tidak ada indikasi khusus Menunjukkan -> ke target: symlink -> /path/target
Perintah membuat ln target hardlink ln -s target symlink
File relatif Referensi tetap sama Path relatif bisa berubah jika symlink dipindahkan
Tracking perubahan Semua link selalu sinkron (menunjuk ke data yang sama) Perubahan pada target tercermin, tapi symlink hanya “penunjuk”
# membuat file asli
user@host:~$ echo "Hello" > file.txt

# hard link
user@host:~$ ln file.txt hardlink.txt

# symlink
user@host:~$ ln -s file.txt symlink.txt

# lihat perbedaan (opsi -i untuk menampilkan inode)
user@host:~$ ls -li file.txt hardlink.txt symlink.txt
# 123456 -rw-r--r-- 2 user group 6 Jun 11 10:00 file.txt
# 123456 -rw-r--r-- 2 user group 6 Jun 11 10:00 hardlink.txt
# 123457 lrwxrwxrwx 1 user group 8 Jun 11 10:00 symlink.txt -> file.txt

Mencocokkan nama file dengan ekspansi shell

Ekspansi nama path dan pencocokan pola

Pola Kecocokan
* String apa pun dengan nol atau lebih karakter
? Satu karakter apa pun
[abc…] Salah satu karakter dalam kelas yang diapit (di antara tanda kurung siku)
[!abc…] Satu karakter apa pun yang tidak termasuk dalam kelas yang diapit
[^abc…] Satu karakter apa pun yang tidak termasuk dalam kelas yang diapit
[[:alpha:]] Karakter alfabet apa pun
[[:lower:]] Karakter huruf kecil apa pun
[[:upper:]] Karakter huruf besar apa pun
[[:alnum:]] Karakter alfabet atau digit apa pun
[[:punct:]] Karakter tercetak apa pun yang bukan spasi atau alfanumerik
[[:digit:]] Satu digit tunggal dari 0 hingga 9
[[:space:]] Satu karakter spasi putih tunggal, yang dapat mencakup tab, baris baru, carriage return, form feed, atau spasi
user@host:~/glob$ ls a*
able  alfa
user@host:~/glob$ ls *a*
able  alfa  baker  bravo  cast  charlie  delta  easy
user@host:~/glob$ ls [ac]*
able  alfa  cast  charlie
user@host:~/glob$ ls ????
able  cast  easy  echo
user@host:~/glob$ ls ?????
baker  bravo  delta

# brace expansion
user@host:~/glob$ echo {Sunday,Monday,Tuesday,Wednesday}.log
user@host:~/glob$ echo file{1..3}.txt
user@host:~/glob$ echo file{a..c}.txt
user@host:~/glob$ echo file{a,b}{1,2}.txt
user@host:~/glob$ echo file{a{1,2},b,c}.txt

# tilde expansion
user@host:~/scripts$ echo ~
/home/user
user@host:~/scripts$ echo ~devops
/home/devops
user@host:/var/log$ ls ~/scripts/run-app.sh
/home/user/scripts/run-app.sh
root@host:/var/log# ls ~user/scripts/run-app.sh
/home/user/scripts/run-app.sh

# variable expansion
user@host:~$ USERNAME=operator
user@host:~$ echo $USERNAME
operator
user@host:~$ echo ${USERNAME}
operator

# substitusi perintah
user@host:~/glob$ echo Today is $(date +%A).
Today is Wednesday.
user@host:~/glob$ echo The time is $(date +%M) minutes past $(date +%l%p).
The time is 26 minutes past 11AM.

Melindungi argumen dari ekspansi

user@host:~/glob$ echo The value of $HOME is your home directory.
The value of /home/user is your home directory.
user@host:~/glob$ echo The value of \$HOME is your home directory.
The value of $HOME is your home directory.

# menggunakan petik tunggal
user@host:~/glob$ echo "Will variable $myhost evaluate to $(hostname -s)?"
Will variable host evaluate to host?
user@host:~/glob$ echo 'Will variable $myhost evaluate to $(hostname -s)?'
Will variable $myhost evaluate to $(hostname -s)?

Mengedit file teks

Menggunakan vim

# menggunakan vim-minimal
user@host:~$ vi namafile

# menggunakan vim-enhanced
user@host:~$ vim namafile

Mode operasi vim

mode-operasi-vim

Alur kerja dasar vim

Salin dan tempel

Di Vim bisa melakukan yank dan put (salin dan tempel). Masuk mode visual untuk seleksi teks:

Mode visual di vim

Mode visual berguna untuk menyorot dan memanipulasi teks di berbagai baris dan kolom. Gunakan kombinasi tombol berikut:

File konfigurasi vim ada di /etc/vimrc dan ~/.vimrc


Mengalihkan input dan output shell

Standar Input, Standar Output, dan Standar Error

Ilustrasi:

std-ioe

Tabel berikut merangkum informasi tentang deskriptor file:

No Nama channel Deskripsi Koneksi default Penggunaan
0 stdin standar input keyboard hanya baca
1 stdout standar output terminal hanya tulis
2 stderr standar error terminal hanya tulis
3+ namafile file lain none baca, tulis, atau keduanya

Redirect output ke file

Penggunaan Penjelasan
> FILE Redirect stdout untuk menimpa (overwrite) sebuah file.
>> FILE Redirect stdout untuk menambahkan (append) ke sebuah file.
2> FILE Redirect stderr untuk menimpa (overwrite) sebuah file.
2> /dev/null Membuang pesan error stderr dengan mengarahkannya ke /dev/null.
> FILE 2>&1 Mengarahkan stdout dan stderr untuk menimpa file yang sama.
&> FILE Cara alternatif untuk mengarahkan stdout dan stderr ke file yang sama (overwrite).
>> FILE 2>&1 Mengarahkan stdout dan stderr untuk menambahkan (append) ke file yang sama.
&>> FILE Cara alternatif untuk mengarahkan stdout dan stderr ke file yang sama (append).

Contoh penggunaan redirect output

# Simpan stempel waktu di file /tmp/saved-timestamp untuk referensi di kemudian hari.
user@host:~$ date > /tmp/saved-timestamp

# Salin 100 baris terakhir dari file /var/log/secure ke file /tmp/last-100-log-secure.
user@host:~$ tail -n 100 /var/log/secure > /tmp/last-100-log-secure

# Gabungkan keempat file langkah tersebut menjadi satu file di direktori tmp.
user@host:~$ cat step1.sh step2.log step3 step4 > /tmp/all-four-steps-in-one

# Cantumkan nama file tersembunyi dan file biasa di direktori home, lalu simpan hasilnya ke file my-file-names.
user@host:~$ ls -a > my-file-names

# Tambahkan output dan kesalahan ke file /tmp/all-message-output.
user@host:~$ find /etc -name passwd >> /tmp/all-message-output 2>&1

Menggunakan pipeline

Pipeline adalah rangkaian satu atau lebih perintah yang dipisahkan oleh karakter pipa (|). Pipeline menghubungkan output standar dari perintah pertama ke input standar dari perintah berikutnya.

ilustrasi-pipeline

Contoh penggunaan

user@host:~$ ls -l /usr/bin | less
user@host:~$ ls | wc -l
user@host:~$ ls -t | head -n 10 > /tmp/first-ten-changed-files

Contoh penggunaan pipeline dengan perintah tee

tee adalah perintah di Linux/Unix yang digunakan untuk membaca dari stdin dan menuliskan ke stdout sekaligus ke satu atau lebih file. Berguna ketika ingin melihat output suatu perintah secara langsung di terminal namun tetap menyimpannya ke dalam file untuk keperluan dokumentasi atau pemrosesan lebih lanjut.

user@host:~$ ls -l | tee /tmp/saved-output | less
user@host:~$ ls -t | head -n 10 | tee /tmp/ten-last-changed-files
# opsi -a untuk append
user@host:~$ ls -l | tee -a /tmp/append-files

Mengelola Users dan Grup lokal

Linux Users dan Grup

Tipe Pengguna dalam Sistem Linux

Akun user lokal

Secara default, sistem menggunakan file /etc/passwd untuk menyimpan informasi tentang pengguna lokal.

user01@host:~$ cat /etc/passwd
...output omitted...
user01:x:1000:1000:User One:/home/user01:/bin/bash

Lnux grup

user01@host:~$ cat /etc/group
...output omitted...
group01:x:10000:user01,user02,user03

Mendapatkan akses superuser (root)

Di RHEL 10, akun root tidak memiliki kata sandi yang valid secara default. Dengan kata lain, tidak ada kata sandi yang memungkinkan pengguna untuk mengautentikasi dan mengakses akun root, baik dengan mencoba masuk langsung sebagai root atau dengan mencoba menggunakan perintah su. Administrator sistem dapat mengatur kata sandi untuk akun root terlebih daulu.

Mengganti akun user

# Contoh ini menggunakan perintah su dari akun user01 untuk beralih ke akun user02:
user01@host:~$ su - user02
Password: user02_password
user02@host:~$

# Jika tidak menyertakan nama pengguna, maka perintah su atau su - akan mencoba beralih ke root secara default.
user01@host:~$ su -
Password: root_password
root@host:~#

Menjalankan perintah dengan sudo

Berbeda dengan perintah su, perintah sudo biasanya mengharuskan pengguna untuk memasukkan kata sandi mereka sendiri untuk otentikasi, bukan kata sandi akun pengguna yang ingin mereka akses.

Perintah sudo dapat dikonfigurasi untuk mengizinkan pengguna tertentu menjalankan perintah apa pun sebagai pengguna lain, atau hanya beberapa perintah sebagai pengguna tersebut. Misalnya, jika mengkonfigurasi perintah sudo untuk mengizinkan pengguna user01 menjalankan perintah usermod sebagai root, maka bisa menjalankan perintah berikut untuk mengunci atau membuka kunci akun pengguna:

user01@host:~$ sudo usermod -L user02
[sudo] password for user01: user01_password
user01@host:~$ su - user02
Password: user02_password
su: Authentication failure
user01@host:~$

Jika pengguna mencoba menjalankan perintah sebagai pengguna lain, dan konfigurasi sudo tidak mengizinkannya, maka Bash akan memblokir perintah tersebut, mencatat upaya tersebut, dan mengirim email ke pengguna root secara default.

user02@host:~$ sudo tail /var/log/secure
[sudo] password for user02: user02_password
user02 is not in the sudoers file.  This incident will be reported.
user02@host:~$

Keuntungan lain dari perintah sudo adalah secara default semua perintah yang dieksekusi dicatat ke dalam file /var/log/secure.

Mendapatkan Shell Root Interaktif dengan sudo

user1@host:~$ sudo -i
[sudo] password for user1: user1_password
root@host:~#

Konfigurasi sudo

File /etc/sudoers adalah file konfigurasi utama. Hanya dapat di edit dengan perintah khusus visudo. Editor visudo juga memvalidasi file tersebut untuk memastikan tidak ada kesalahan sintaks.

%wheel        ALL=(ALL:ALL)       ALL

File /etc/sudoers menyertakan isi dari file apa pun di direktori /etc/sudoers.d. Jadi bisa menambahkan akses sudo untuk pengguna dengan menempatkan file yang sesuai di direktori tersebut.

# Untuk mengaktifkan akses sudo penuh untuk pengguna user01, buat file /etc/sudoers.d/user01 dengan isi sebagai berikut:
user01 ALL=(ALL) ALL

# Untuk mengaktifkan akses sudo penuh untuk grup group01, buat file /etc/sudoers.d/group01 dengan isi sebagai berikut:
%group01 ALL=(ALL) ALL

# Untuk memungkinkan pengguna dalam grup games menjalankan perintah id sebagai pengguna operator, buat file /etc/sudoers.d/games dengan isi sebagai berikut:
%games ALL=(operator) /bin/id

# juga dapat mengatur sudo untuk memungkinkan pengguna menjalankan perintah sebagai pengguna lain tanpa memasukkan kata sandi mereka:
ansible ALL=(ALL) NOPASSWD: ALL

Mengelola akun user

Membuat user baru

Perintah useradd username membuat akun pengguna bernama username. Perintah ini menyelesaikan tugas-tugas berikut untuk menyiapkan dan mengkonfigurasi akun baru:

create-user

  1. Jalankan perintah useradd sebagai superuser.
  2. Perintah useradd membaca konfigurasi pembuatan pengguna dari file /etc/login.defs.
  3. Perintah useradd menulis entri di file /etc/group, /etc/passwd, dan /etc/shadow dengan informasi yang diberikan kepada pengguna username (ID pengguna dan ID grup).
  4. Perintah useradd membuat direktori home pengguna username di jalur /home/username.
  5. Perintah useradd menyalin file profil pengguna di direktori /etc/skel ke direktori home pengguna username (di bawah /home/username).

Modifikasi user yang sudah ada

Gunakan perintah usermod untuk modifikasi user, untuk bantuan usermod --help.

# contoh menambahkan user1 ke grup grup2
user@host: sudo usermod -aG grup2 user1

Menghapus user

Perintah userdel username menghapus nama pengguna user dari file /etc/passwd, tetapi membiarkan direktori home pengguna tetap utuh. Perintah userdel -r username menghapus pengguna dari file /etc/passwd dan menghapus direktori home pengguna.

Mengatur password

root@host: passwd user1

Mengelola akun grup

Membuat grup baru

root@host:~# groupadd -g 10000 group01
root@host:~# tail /etc/group
...output omitted...
group01:x:10000:

# Perintah groupadd dengan opsi -r membuat grup sistem. Seperti halnya grup biasa, grup sistem menggunakan GID dari rentang GID sistem valid yang tercantum dalam file /etc/login.defs. Item konfigurasi SYS_GID_MIN dan SYS_GID_MAX dalam file /etc/login.defs menentukan rentang GID sistem.
root@host:~# groupadd -r group02
root@host:~# tail /etc/group
...output omitted...
group01:x:10000:
group02:x:988:

Modifikasi grup yang sudah ada

# mengubah nama grup
root@host:~# groupmod -n newgroup oldgroup

# Opsi -g menetapkan ulang nama grup ke GID baru.
root@host:~# groupmod -g 20000 group0022
root@host:~# tail /etc/group
...output omitted...
group0022:x:20000:

Menghapus grup

root@host:~# groupdel group0022

Mengelola password user

Setiap pengguna memiliki entri dalam file /etc/shadow. Contoh entri dari file /etc/shadow memiliki sembilan kolom yang dipisahkan oleh titik dua:

root@host:~# cat /etc/shadow
...output omitted...
user03:$y$j9T$qybndwEWzHhr0uTGAwO4Q0$OuNgGC5Mx2RrCO4JOXtR2VJfTA8dLPxa7NV1tvhziHC:20222:0:99999:7:2:20282::

Format Kata Sandi yang Di-hash Secara Kriptografis

$y$j9T$qybndwEWzHhr0uTGAwO4Q0$OuNgGC5Mx2RrCO4JOXtR2VJfTA8dLPxa7NV1tvhziHC

Konfigurasi masa berlaku password

chage

Contoh berikut menunjukkan penggunaan perintah chage untuk mengubah kebijakan kata sandi pengguna sysadmin05. Perintah ini menetapkan usia minimum (-m) 0 hari, usia maksimum (-M) 90 hari, periode peringatan (-W) 7 hari, dan periode tidak aktif (-I) 14 hari.

root@host:~# chage -m 0 -M 90 -W 7 -I 14 sysadmin05

Misalkan ingin menetapkan kebijakan masa berlaku password pengguna cloudadmin10, masa berlaku akun menjadi 30 hari dari hari ini, gunakan perintah berikut:

root@host:~# date +%F
2025-05-14
root@host:~# date -d "+30 days" +%F
2025-06-13
root@host:~# chage -E $(date -d "+30 days" +%F) cloudadmin10
root@host:~# chage -l cloudadmin10 | grep "Account expires"
Account expires						: Jun 13, 2025
  1. Gunakan perintah date untuk mendapatkan tanggal saat ini.
  2. Gunakan perintah date untuk mendapatkan tanggal 30 hari dari sekarang.
  3. Gunakan perintah chage dengan opsi -E untuk mengubah tanggal kedaluwarsa kata sandi untuk pengguna cloudadmin10.
  4. Gunakan perintah chage dengan opsi -l untuk menampilkan kebijakan masa berlaku kata sandi untuk pengguna cloudadmin10.

Misalnya ingin pengguna cloudadmin10 mengubah kata sandi pada saat login berikutnya, gunakan perintah berikut:

root@host:~# chage -d 0 cloudadmin10

Menyesuaikan Masa Berlaku password untuk Pengguna Baru

Modifikasi file /etc/login.defs.

Untuk akun pengguna baru, perintah useradd juga mengambil nilai default dari file /etc/default/useradd.

Membatasi akses user

Batasi akses pengguna ke sistem Linux dengan menggunakan perintah usermod -L untuk mengunci akun pengguna dengan menonaktifkan kata sandi pengguna.

Keterbatasan dari penggunaan opsi -L saja adalah opsi ini tidak memengaruhi otentikasi berbasis kunci SSH. Jika kunci SSH yang valid telah dikonfigurasi untuk pengguna, maka pengguna masih dapat masuk dari jarak jauh tanpa memasukkan kata sandi. Menimbulkan potensi risiko keamanan.

Opsi lain adalah dengan membuat akun kedaluwarsa, mencegah semua upaya masuk, termasuk masuk menggunakan kunci SSH. Opsi -e pada perintah usermod mengatur tanggal kedaluwarsa akun. Tanggal kedaluwarsa dapat diatur dengan menggunakan bilangan bulat untuk menentukan jumlah hari sejak 1 Januari 1970, atau dengan menggunakan format YYYY-MM-DD.

root@host:~# usermod -L -e 2026-06-06 cloudadmin10

# untuk mengaktifkan kembali user:
root@host:~# usermod -U -e '' cloudadmin10

Shell nologin

Praktik keamanan yang baik adalah menonaktifkan akun agar tidak masuk ke sistem ketika akun tidak memerlukannya. Solusi umum untuk situasi ini adalah dengan mengatur shell login pengguna ke /sbin/nologin. Jika pengguna mencoba masuk ke sistem secara langsung, maka shell nologin akan menutup koneksi.

root@host:~# usermod -s /sbin/nologin user1

Mengontrol Akses ke File

Izin file sistem linux

Izin Efek pada File Efek pada Direktori
r (read) Isi file dapat dibaca. Isi direktori (nama-nama file) dapat dilihat/didaftar.
w (write) Isi file dapat diubah. File apa pun dalam direktori dapat dibuat atau dihapus.
x (execute) File dapat dijalankan sebagai perintah. Direktori dapat menjadi direktori kerja saat ini (current working directory). Bisa menjalankan perintah cd untuk berpindah ke direktori tersebut, tetapi juga memerlukan izin baca (read) untuk melihat file di dalamnya.

Melihat Izin dan Kepemilikan File dan Direktori

user@host:~$ ls -l test
-rw-rw-r--. 1 student student 0 Mar  8 17:36 test
user@host:~$ ls -ld /home
drwxr-xr-x. 5 root root 4096 Feb 31 22:00 /home

Mengubah Izin File dan Direktori

Mengubah Izin dengan Metode Simbolik

user@host:~$ chmod Who/What/Which file|directory
Who User class Deskripsi
u user Pemilik file.
g group Anggota dari grup pemilik file.
o other Pengguna yang bukan pemilik file maupun anggota grup pemilik file.
a all Ketiga kelompok sebelumnya (u, g, dan o).

Operator yang digunakan untuk modifikasi izin:

What Operation Deskripsi
+ add Menambahkan izin yang diberikan ke file.
- remove Menghapus izin yang diberikan dari file.
= set exactly Mengatur secara tepat (menimpa) izin yang diberikan ke file.
# Contoh berikut menunjukkan penggunaan metode simbolik untuk menghapus izin baca dan tulis untuk grup dan pengguna lain pada file document.pdf:
user@host:~$ chmod go-rw document.pdf

# Contoh ini menunjukkan cara menambahkan izin eksekusi untuk semua orang pada file myscript.sh:
user@host:~$ chmod a+x myscript.sh

# Gunakan perintah chmod dengan opsi -R untuk mengatur izin secara rekursif pada file di seluruh struktur direktori:
user@host:~$ chmod -R g+rwx /home/user/myfolder

Mengubah Izin dengan Metode Oktal

Dengan metode oktal dapat merepresentasikan izin sebagai angka oktal 3 digit (atau 4 digit, saat mengatur izin tingkat lanjut). Satu digit oktal dapat mewakili nilai tunggal apa pun dari 0-7. Dalam representasi oktal 3 digit untuk izin, setiap digit mewakili satu tingkat akses, dari kiri ke kanan: pengguna, grup, dan lainnya. Untuk menentukan setiap digit:

metode-oktal

# menggunakan metode oktal untuk mengatur izin baca dan tulis untuk pengguna, dan izin baca untuk grup dan lainnya, pada file sample.txt:
user@host:~$ chmod 644 sample.txt

# Mengatur izin baca, tulis, dan eksekusi untuk pengguna, izin baca dan eksekusi untuk grup, dan tidak memberikan izin apa pun untuk yang lain pada direktori sampledir:
user@host:~$ chmod 750 sampledir

Mengubah Kepemilikan Pengguna atau Grup File dan Direktori

# Berikan hak kepemilikan file app.conf kepada pengguna student, gunakan perintah berikut:
root@host:~# chown student app.conf

# Perintah chown dengan opsi -R secara rekursif mengubah kepemilikan seluruh struktur direktori. Perintah berikut memberikan kepemilikan direktori Pictures dan semua file serta subdirektori di dalamnya kepada pengguna student:
root@host:~# chown -R student Pictures

# Gunakan perintah chown untuk mengubah kepemilikan grup pada sebuah file dengan menambahkan titik dua (:) di depan nama grup. Misalnya, perintah berikut mengubah kepemilikan grup direktori Pictures menjadi admins:
root@host:~# chown :admins Pictures

# Gunakan perintah chown untuk mengubah pemilik dan grup secara bersamaan dengan menggunakan sintaks pemilik:grup. Misalnya, untuk mengubah kepemilikan direktori Gambar ke pengguna visitor dan ke grup guests, gunakan perintah berikut:
root@host:~# chown visitor:guests Pictures

Izin khusus

Permission Efek pada File Efek pada Direktori
u+s (suid) File dijalankan sebagai pemilik file (user yang memiliki file), bukan sebagai pengguna yang menjalankan file. Tidak berpengaruh.
g+s (sgid) File dijalankan sebagai grup pemilik file. File yang dibuat di dalam direktori akan memiliki grup pemilik yang sama dengan grup pemilik direktori tersebut.
o+t (sticky) Tidak berpengaruh. Pengguna yang memiliki izin tulis pada direktori tidak dapat menghapus atau mengganti nama file yang bukan milik mereka.

Salah satu contohnya adalah perintah plocate, yang merupakan pengganti modern untuk locate. Izin setgid diatur pada biner /usr/bin/plocate, seperti yang ditunjukkan pada contoh berikut:

user@host:~$ ls -ld /usr/bin/plocate
-rwxr-sr-x. 1 root plocate 318224 Feb 14 00:00 /usr/bin/plocate

Mengatur Izin khusus

Permission Octal Notation Symbolic Notation
setuid 4 u+s
setgid 2 g+s
sticky 1 o+t

Contoh Izin khusus

# Tambahkan bit setgid pada direktori contoh dengan menggunakan metode simbolik:
user@host:~$ chmod g+s example

# Hapus sticky bit dari direktori contoh dengan menggunakan metode simbolik:
user@host:~$ chmod o-t example

# Atur bit setgid dan tambahkan izin baca, tulis, dan eksekusi untuk pengguna dan grup, tanpa akses untuk yang lain, pada direktori contoh dengan menggunakan metode oktal:
user@host:~$ chmod 2770 example

# Hapus bit setgid dan tambahkan izin baca, tulis, dan eksekusi untuk pengguna dan grup, tanpa akses untuk yang lain, pada direktori contoh dengan menggunakan metode oktal.
# Perhatikan bahwa perlu menambahkan angka 0 ekstra di awal nilai izin saat menghapus izin khusus dengan menggunakan metode oktal:
user@host:~$ chmod 00770 example

Izin Default

Pengaturan umask mengubah pengaturan izin untuk file atau direktori yang baru dibuat. umask adalah filter izin yang diterapkan pada izin default saat file atau direktori dibuat. Setiap bit yang diatur dalam umask menghapus izin yang sesuai dari izin akhir file atau direktori baru.

umask Efek pada File Efek pada Direktori
0022 rw-r–r– rwxr-xr-x
0027 rw-r—– rwxr-x—
0002 rw-rw-r– rwxrwxr-x

Di RHEL 9 dan versi yang lebih baru, umask default untuk semua pengguna biasa adalah 0022. Perintah umask tanpa argumen menampilkan nilai umask shell saat ini.

Contoh pengaturan umask

example-umask-file

# Pada contoh berikut, sistem memberikan akses baca dan tulis kepada pemilik file, dan akses baca saja kepada grup dan pihak lain, yang mencerminkan pengaturan umask 0022 yang umum yang membatasi akses tulis untuk non-pemilik.
user@host:~$ umask
0022
user@host:~$ touch default.txt
user@host:~$ ls -l default.txt
-rw-r--r--. 1 user user 0 May 29 22:11 default.txt

example-umask-directory

# Sebagai contoh, nilai umask diatur ke 0, yang mengubah izin file untuk pengguna lain dari baca menjadi baca dan tulis.
# Izin direktori untuk pengguna lain berubah dari baca dan eksekusi menjadi baca, tulis, dan eksekusi.
user@host:~$ umask 0
user@host:~$ touch zero.txt
user@host:~$ ls -l zero.txt
-rw-rw-rw-. 1 user user 0 May 29 22:17 zero.txt
user@host:~$ mkdir zero
user@host:~$ ls -ld zero
drwxrwxrwx. 2 user user 6 May 29 22:17 zero

# Nilai umask 027 memastikan bahwa file baru memiliki izin baca dan tulis untuk pengguna dan izin baca untuk grup.
# Direktori baru memiliki izin baca dan eksekusi untuk grup dan tidak memiliki izin untuk yang lain.
user@host:~$ umask 027
user@host:~$ touch two-seven.txt
user@host:~$ ls -l two-seven.txt
-rw-r-----. 1 user user 0 May 29 22:19 two-seven.txt
user@host:~$ mkdir two-seven
user@host:~$ ls -ld two-seven
drwxr-x---. 2 user user 6 May 29 22:20 two-seven

Menginstal dan Memperbarui Software dengan RPM

Nama file paket RPM terdiri dari empat elemen (ditambah akhiran .rpm): nama-versi-rilis.arsitektur:

rpm-elements

Memeriksa Paket RPM

# Mengambil informasi umum tentang paket yang terpasang:
# - rpm -qa: Mencantumkan semua paket yang terpasang.
# - rpm -qf FILENAME: Menentukan paket mana yang menyediakan FILENAME.
user@host:~$ rpm -qf /etc/yum.repos.d
redhat-release-10.0-30.el10.x86_64

# Dapatkan informasi tentang paket tertentu:
# - rpm -q: Menampilkan versi paket yang terpasang saat ini.
user@host:~$ rpm -q dnf
dnf-4.20.0-12.el10_0.noarch

# Mulai dari RHEL 10, perintah rpmsort dapat digunakan seperti perintah sort dalam pipeline, tetapi dapat mengurutkan string versi RPM dengan benar dalam output perintah:
user@host:~$ rpm -q kernel | sort
kernel-6.12.0-141.el10.x86_64
kernel-6.12.0-45.el10.x86_64
user@host:~$ rpm -q kernel | rpmsort
kernel-6.12.0-45.el10.x86_64
kernel-6.12.0-141.el10.x86_64

# - rpm -qi: Mendapatkan informasi detail paket.
# - rpm -ql: Mencantumkan file yang diinstal oleh paket.
user@host:~$ rpm -ql dnf
/usr/bin/dnf
/usr/lib/systemd/system/dnf-makecache.service
...output omitted...

# - rpm -qc: Hanya menampilkan file konfigurasi yang diinstal oleh paket tersebut.
user@host:~$ rpm -qc openssh-clients
/etc/ssh/ssh_config
/etc/ssh/ssh_config.d/50-redhat.conf

# - rpm -qd: Hanya menampilkan file dokumentasi yang diinstal oleh paket tersebut.
user@host:~$ rpm -qd openssh-clients
/usr/share/man/man1/scp.1.gz
...output omitted...

# - rpm -q --scripts: Menampilkan daftar skrip shell yang dijalankan sebelum atau setelah Anda menginstal atau menghapus paket.
user@host:~$ rpm -q --scripts openssh-server
preinstall scriptlet (using /bin/sh):
...output omitted...

# - rpm -q --changelog: Menampilkan informasi log perubahan untuk paket tersebut.
user@host:~$ rpm -q --changelog audit
* Wed Jan 08 2025 Attila Lakatos <alakatos@redhat.com> - 4.0.3-1
- Rebase to 4.0.3
- Pluginst must have .conf suffix, otherwise skipped
  Resolves: RHEL-58838
...output omitted...

Mengakses File RPM Sebelum Instalasi

rpm -qlp: Mencantumkan file yang diinstal oleh paket lokal.

user@host:~$ ls -l podman-5.4.0-1.el10.x86_64.rpm
-rw-r--r--. 1 user user 16494682 Jun  9 23:43 podman-5.4.0-1.el10.x86_64.rpm

user@host:~$ rpm -qlp podman-5.4.0-1.el10.x86_64.rpm
/usr/bin/podman
...output omitted...

Menginstal Paket RPM

root@host:~# rpm -ivh podman-5.4.0-1.el10.x86_64.rpm
Verifying...                 ################################# [100%]
Preparing...                 ################################# [100%]
Updating / installing...
        podman-6:5.4.0-1     ################################# [100%]

Mengekstrak Paket RPM

Gunakan perintah rpm2cpio untuk mengekstrak file dari file paket RPM tanpa menginstal paket tersebut. Perintah rpm2cpio mengkonversi paket RPM menjadi arsip cpio. Setelah paket RPM dikonversi menjadi arsip cpio, perintah cpio dapat mengekstrak daftar file. Gunakan perintah cpio dengan opsi -i untuk mengekstrak file dari input standar. Gunakan opsi -d untuk membuat subdirektori sesuai kebutuhan, dimulai dari direktori kerja saat ini. Gunakan opsi -v untuk output yang lebih detail.

user@host:~/tmp-extract$ rpm2cpio httpd-2.4.63-1.el10.x86_64.rpm | cpio -idv
...output omitted...
121 blocks
user@host:~/tmp-extract$ ls -l
total 56
drwxr-xr-x. 3 user user       19 Jun  9 23:51 etc
-rw-r--r--. 1 root root    54557 Jun  9 23:50 httpd-2.4.63-1.el10.x86_64.rpm
drwxr-xr-x. 5 user user       43 Jun  9 23:51 usr

Ekstrak file satu per satu dengan menentukan jalur file tersebut:

user@host:~$ rpm2cpio httpd-2.4.63-1.el10.x86_64.rpm | \
cpio -id "/etc/httpd/conf.modules.d/00-systemd.conf"
121 blocks
user@host:~$ ls etc/httpd/conf.modules.d/
00-brotli.conf  00-systemd.conf

Gunakan perintah rpm2cpio dan cpio -t untuk menampilkan daftar file dalam paket RPM. Gunakan opsi -v pada perintah cpio untuk output yang lebih detail.

user@host:~$ rpm2cpio httpd-2.4.63-1.el10.x86_64.rpm | cpio -tv
-rw-r--r--  1 root  root   47 Jan 27 00:00 ./etc/httpd/conf.modules.d/00-brotli.conf
-rw-r--r--  1 root  root   88 Jan 27 00:00 ./etc/httpd/conf.modules.d/00-systemd.conf
...output omitted...
121 blocks

Menginstal dan Memperbarui Paket dengan DNF

Dimulai dengan Red Hat Enterprise Linux 9, DNF (Dandified YUM) menggantikan YUM sebagai manajer paket. Perintah DNF secara fungsional sama dengan perintah YUM. Untuk kompatibilitas, perintah YUM masih ada sebagai tautan simbolis ke DNF.

Mencari Software dengan DNF

user@host:~$ dnf list 'http*'

user@host:~$ dnf search all 'web server'

Perintah dnf info PACKAGENAME mengembalikan informasi detail tentang sebuah paket, termasuk ruang disk yang dibutuhkan untuk instalasi. Misalnya, perintah berikut mengambil informasi tentang paket httpd:

Perintah dnf provides PATHNAME menampilkan paket-paket yang cocok dengan nama jalur yang ditentukan (nama jalur sering kali menyertakan karakter wildcard).

user@host:~$ dnf provides /var/www/html
...output omitted...
httpd-filesystem-2.4.63-1.el10.noarch : The basic directory layout for the
                                      : Apache HTTP Server
Repo        : rhel-10.0-for-x86_64-appstream-rpms
Matched from:
Filename    : /var/www/html

Menginstal, Memperbarui, dan Menghapus Perangkat Lunak dengan DNF

# install
user@host:~$ sudo dnf install httpd

# upgrade
user@host:~$ sudo dnf upgrade

# list kernel
user@host:~$ dnf list kernel

# hapus
user@host:~$ sudo dnf remove httpd

Menginstal dan Menghapus Grup Software dengan DNF

# Menampilkan nama-nama grup yang terpasang dan tersedia
user@host:~$ dnf group list

# menampilkan informasi tentang suatu grup
user@host:~$ dnf group info 'Security Tools'

# Menginstal sebuah grup yang menginstal paket wajib dan paket bawaannya beserta paket-paket yang bergantung padanya.
user@host:~$ sudo dnf group install 'System Tools'

Ringkasan Perintah DNF

Command Tugas
dnf list [NAME-PATTERN] Menampilkan daftar paket yang terinstal dan tersedia berdasarkan nama.
dnf group list Menampilkan daftar grup yang terinstal dan tersedia.
dnf search KEYWORD Mencari paket berdasarkan kata kunci.
dnf info PACKAGENAME Menampilkan detail informasi tentang sebuah paket.
dnf install PACKAGENAME Menginstal sebuah paket.
dnf group install GROUPNAME Menginstal sebuah grup paket.
dnf upgrade Memperbarui (upgrade) semua paket.
dnf remove PACKAGENAME Menghapus sebuah paket.
dnf history Menampilkan riwayat transaksi.

Mengelola Repositori Software

# menampilkan semua repositori yang tersedia dan statusnya
root@host:~# dnf repolist all

# mengaktifkan dan menonaktifkan repositori
root@host:~# dnf config-manager --enable rhel-10-for-x86_64-baseos-debug-rpms

Mengonfigurasi Repositori DNF

Untuk mengkonfigurasi repositori DNF secara manual, buat file .repo di direktori /etc/yum.repos.d/, atau tambahkan bagian [repository] ke file /etc/dnf/dnf.conf. Red Hat merekomendasikan penggunaan file .repo, dan menyimpan file dnf.conf untuk konfigurasi repositori tambahan.

root@host:~# dnf config-manager \
--add-repo="https://https://dl.fedoraproject.org/pub/epel/10/Everything/x86_64/"
Updating Subscription Management repositories.
Adding repo from: https://dl.fedoraproject.org/pub/epel/10/Everything/x86_64/

# File .repo yang bersangkutan dapat dilihat di direktori /etc/yum.repos.d/:
root@host:~# cd /etc/yum.repos.d
root@host:/etc/yum.repos.d# cat dl.fedoraproject.org_pub_epel_10_Everything_x86_64_.repo

Perintah rpm menggunakan kunci GPG untuk menandatangani paket, dan mengimpor kunci publik untuk memverifikasi integritas dan keaslian paket. Perintah dnf menggunakan file konfigurasi repositori untuk menyediakan lokasi kunci publik GPG, dan mengimpor kunci tersebut untuk memverifikasi paket.

Kunci disimpan di berbagai lokasi di situs repositori jarak jauh, seperti https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-10. Administrator sebaiknya mengunduh kunci ke file lokal daripada menggunakan perintah dnf untuk mengambil kunci dari sumber eksternal.

Mengonfigurasi Repositori dengan Menggunakan Paket RPM

user@host:~$ rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-10
user@host:~$ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm

Impor kunci GPG RPM sebelum menginstal paket yang ditandatangani, untuk memastikan bahwa paket berasal dari sumber tepercaya. Jika kunci GPG RPM tidak diimpor, maka perintah dnf gagal menginstal paket yang ditandatangani.

Opsi --nogpgcheck pada perintah dnf mengabaikan kunci GPG yang hilang, tetapi dapat mengakibatkan penginstalan paket yang disusupi atau dipalsukan.

File .repo sering kali mencantumkan beberapa referensi repositori dalam satu file. Setiap referensi repositori diawali dengan nama satu kata dalam tanda kurung siku.


Menginstal dan Memperbarui Aplikasi dengan Menggunakan Flatpak

Mengelola Repositori Jarak Jauh Flatpak

# instal
root@host:~# dnf install flatpak

# cek versi
user@host:~$ flatpak --version

# login ke kontainer radhat dengan podman
user@host:~$ podman login registry.redhat.io

# simpan kredensial pengguna saat ini secara permanen
user@host:~$ cp $XDG_RUNTIME_DIR/containers/auth.json $HOME/.config/flatpak/oci-auth.json

# simpan kredensial di seluruh sistem
root@host:~# cp $XDG_RUNTIME_DIR/containers/auth.json /etc/flatpak/oci-auth.json

# Jika ingin pengguna biasa mengakses repositori jarak jauh dengan kredensial yang sama, ubah izin file pada token otentikasi:
root@host:~# chmod 644 /etc/flatpak/oci-auth.json

# lihat daftar semua repositori jarak jauh yang dikonfigurasi pada sistem
user@host:~$ flatpak remotes

# Tampilkan detail untuk repositori jarak jauh
user@host:~$ flatpak remotes -d

# daftar aplikasi yang tersedia di repositori jarak jauh
user@host:~$ flatpak remote-ls --app

Menambahkan Repositori Jarak Jauh Flatpak

Sebagai contoh, Fedora Project menyediakan registry jarak jauh yang juga dapat digunakan oleh distribusi lain karena desain universal Flatpak. Untuk menambahkan repositori jarak jauh ini, jalankan perintah flatpak remote-add.

user@host:~$ flatpak remote-add --if-not-exists fedora oci+https://registry.fedoraproject.org

# Konfirmasi bahwa repositori Fedora telah ditambahkan sebagai sumber instalasi
user@host:~$ flatpak remotes

# Mengkonfigurasi repositori Flathub dalam mode pengguna
user@host:~$ flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo

# lihat repositori jarak jauh yang tersedia untuk semua pengguna.
user@host:~$ flatpak remotes --system

# lihat repositori jarak jauh yang tersedia untuk pengguna saat ini
user@host:~$ flatpak remotes --user

# Setelah menambahkan repositori jarak jauh, lihat isi repositori dengan menggunakan perintah flatpak remote-ls
user@host:~$ flatpak remote-ls fedora --app

Menghapus Repositori Jarak Jauh Flatpak

user@host:~$ flatpak remote-delete fedora

# disable repositori (daripada menghapus)
user@host:~$ flatpak remote-modify --disable fedora

# enable
user@host:~$ flatpak remote-modify --enable fedora

Mengelola Aplikasi dengan Flatpak CLI

Contoh berikut menunjukkan pencarian yang menggunakan kata kunci thunderbird untuk menemukan aplikasi di repositori jarak jauh Flatpak:

user@host:~$ flatpak -v search thunderbird

Menginstal Objek Flatpak dari Repositori Jarak Jauh

user@host:~$ flatpak install thunderbird

Berikut opsi berguna untuk perintah flatpak install:

Opsi Deskripsi
--runtime Hanya menginstal runtime.
--app Hanya menginstal aplikasi.
--or-update Melakukan pembaruan (update) jika aplikasi atau runtime sudah terinstal.
--system Menginstal aplikasi atau runtime secara sistem-wide (untuk semua pengguna).
-u, --user Menginstal aplikasi atau runtime hanya untuk pengguna saat ini.
-y, --assumeyes Secara otomatis menjawab “ya” untuk semua pertanyaan.
--no-deploy Mengunduh ke cache lokal tanpa menginstal.
--no-pull Menginstal hanya dari cache lokal (tidak mengunduh dari repositori).
--noninteractive Menghasilkan output minimal dan menganggap “ya” untuk semua pertanyaan.

Mengakses Objek Flatpak Secara Lokal

# list objek flatpak yang terinstall
user@host:~$ flatpak list
Name             Application ID          Version Branch Installation
Red Hat Platform com.redhat.Platform     10      el10   system
Thunderbird      org.mozilla.Thunderbird         stable system

# Menampilkan informasi tentang objek yang terpasang berdasarkan pengidentifikasi objek
user@host:~$ flatpak info org.mozilla.Thunderbird

Menginstal Objek Flatpak dari Cabang Tertentu

user@host:~$ flatpak remote-info rhel com.redhat.Platform

# Jika tahu cabang mana yang harus dituju, maka tinggal menentukan versi objek dengan menggunakan tiga pengidentifikasi (identifier triple) nya
user@host:~$ flatpak install com.redhat.Platform/x86_64/el8

Mengupdate Objek Flatpak

user@host:~$ flatpak update com.redhat.Platform

# Untuk mencegah pembaruan yang tidak diinginkan pada objek tertentu, gunakan perintah flatpak mask
user@host:~$ flatpak mask com.redhat.Platform

# Untuk membuka mask sebuah objek, gunakan perintah flatpak mask --remove dengan pengidentifikasi objek
user@host:~$ flatpak mask --remove com.redhat.Platform

Menghapus Instalasi Objek Flatpak

user@host:~$ flatpak uninstall --delete-data thunderbird

Mengakses Removable Media

Sistem Berkas dan Perangkat Penyimpanan

Red Hat Enterprise Linux (RHEL) menggunakan Extents File System (XFS) sebagai sistem file lokal default. RHEL mendukung sistem file Extended File System (ext4) untuk mengelola file lokal. Mulai dari RHEL 10, sistem file Extensible File Allocation Table (exFAT) didukung untuk penggunaan Removable Media.

Tipe Perangkat Pola Penamaan Perangkat
SATA/SAS/USB-attached storage (SCSI driver) /dev/sda, /dev/sdb, /dev/sdc, …
virtio-blk paravirtualized storage (VMs) /dev/vda, /dev/vdb, /dev/vdc, …
virtio-scsi paravirtualized storage (VMs) /dev/sda, /dev/sdb, /dev/sdc, …​
NVMe-attached storage (SSDs) /dev/nvme0, /dev/nvme1, …
SD/MMC/eMMC storage (SD cards) /dev/mmcblk0, /dev/mmcblk1, …

Periksa Sistem Berkas

Contoh berikut menampilkan sistem file dan titik pemasangan (mount point) pada mesin host:

user@host:~$ df
Filesystem  1K-blocks    Used Available Use% Mounted on
/dev/sda3    10213356 2458040   7755316  25% /
devtmpfs         4096       0      4096   0% /dev
tmpfs          873064       0    873064   0% /dev/shm
tmpfs          349228   10784    338444   4% /run
tmpfs            1024       0      1024   0% /run/credentials/systemd-journald...
/dev/sda2      204580    8580    196000   5% /boot/efi

# untuk format yang mudah dibaca manusia
user@host:~$ df -h

# untuk direktori spesifik
root@host:~# du -h /usr/share

# menampilkan ringkasan total penggunaan disk untuk sebuah file atau direktori
[root@host ~]# du -sh /etc /boot /var

Memasang dan Melepas File Sistem

Mengidentifikasi Perangkat Blok

root@host:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   10G  0 disk
├─sda1   8:1    0    1M  0 part
├─sda2   8:2    0  200M  0 part /boot/efi
└─sda3   8:3    0  9.8G  0 part /
sdb      8:16   0    5G  0 disk
sdc      8:32   0    5G  0 disk
sdd      8:48   0    5G  0 disk
sr0     11:0    1  514K  0 rom

Memasang File Sistem dengan Nama Partisi

Contoh berikut memasang partisi /dev/sda3 pada titik pemasangan /mnt/data:

root@host:~# mount /dev/sda3 /mnt/data

Memasang File Sistem dengan UUID Partisi

root@host:~# lsblk -fp
NAME        FSTYPE FSVER LABEL UUID                    FSAVAIL FSUSE% MOUNTPOINTS
/dev/sda
├─/dev/sda1
├─/dev/sda2 vfat   FAT16       7B77-95E7               191.4M  4%     /boot/efi
└─/dev/sda3 xfs          root  15507695-...-...95983f  7.4G    24%    /
/dev/sdb
/dev/sdc
/dev/sdd
/dev/sr0    iso9660 Joliet Extension config-2 2025-06-12-05-06-37-00

# Pasang sistem file berdasarkan UUID sistem file.
root@host:~# mount UUID="15507695-22bb-4c65-94e6-a438e095983f" /mnt/data

Automatically Mounting Removable Storage Devices

Perangkat penyimpanan yang dapat dilepas dipasang di lokasi /run/media/USERNAME/LABEL. USERNAME adalah nama pengguna yang masuk ke lingkungan grafis. LABEL adalah pengidentifikasi, yang biasanya merupakan label pada media penyimpanan.

Untuk melepaskan perangkat yang dapat dilepas dengan aman, lepaskan semua sistem file pada perangkat secara manual terlebih dahulu.

Melepaskan File Sistem

root@host:~# umount /mnt/data

# Pelepasan mount tidak dimungkinkan ketika sistem file yang terpasang sedang digunakan.
# Agar perintah umount berhasil, semua proses harus berhenti mengakses data di bawah titik mount tersebut.
root@host:~# cd /mnt/data
root@host:~# umount /mnt/data
umount: /mnt/data: target is busy.

# Perintah lsof mencantumkan semua file yang terbuka dan proses yang mengakses sistem file.
root@host:~# lsof /mnt/data
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1593 root  cwd    DIR 253,17        6  128 /mnt/data
lsof    2532 root  cwd    DIR 253,17       19  128 /mnt/data

# Identifikasi dan tunggu hingga proses selesai, atau kirim sinyal SIGTERM atau SIGKILL untuk menghentikannya.
# Dalam hal ini bisa beralih ke direktori kerja saat ini yang berada di luar titik pemasangan (mount point).
root@host:~# cd
root@host:~# umount /mnt/data

Mencari File

Mencari File berdasarkan Nama

root@host:~# updatedb

developer@host:~$ locate passwd
/etc/passwd
/etc/passwd-
...output omitted...

root@host:~# locate image
/etc/selinux/targeted/contexts/virtual_image_context
/usr/bin/grub2-mkimage
...output omitted...

# Opsi -i pada perintah locate melakukan pencarian tanpa memperhatikan huruf besar/kecil.
developer@host:~$ locate -i messages
...output omitted...

# Opsi perintah find -n membatasi jumlah hasil pencarian yang dikembalikan
developer@host:~$ locate -n 5 passwd
...output omitted...

Pencarian File Secara Real Time

root@host:~# find / -name sshd_config
/etc/ssh/sshd_config

Mencari File dengan Karakter Wildcard

root@host:~# find / -name '*.txt'

root@host:~# find /etc -name '*pass*'

# Untuk melakukan pencarian nama file tanpa memperhatikan huruf besar/kecil, gunakan opsi -iname pada perintah find.
root@host:~# find / -iname '*messages*'

Mencari File Berdasarkan Kepemilikan atau Izin

developer@host:~$ find -user developer
...output omitted...

developer@host:~$ find -group developer
...output omitted...

developer@host:~$ find -uid 1000
...output omitted...

developer@host:~$ find -gid 1000
...output omitted...

root@host:~# find / -user root -group mail
/var/spool/mail
...output omitted...

# Opsi -perm pada perintah find mencari file dengan set izin tertentu.
root@host:~# find /home -perm 764
...output omitted...

root@host:~# find /home -perm u=rwx,g=rw,o=r
...output omitted...

root@host:~# find /home -perm 764 -ls
...output omitted...

root@host:~# find /home -perm -324
...output omitted...

root@host:~# find /home -perm -u=wx,g=w,o=r
...output omitted...

root@host:~# find /home -perm /442
...output omitted...

root@host:~# find /home -perm /u=r,g=r,o=w
...output omitted...

developer@host:~$ find -perm -004
...output omitted...

developer@host:~$ find -perm -o=r
...output omitted...

developer@host:~$ find -perm -002
...output omitted...

developer@host:~$ find -perm -o=w
...output omitted...

Mencari File Berdasarkan Ukuran

developer@host:~$ find -size 10M
...output omitted...

developer@host:~$ find -size +10G
...output omitted...

developer@host:~$ find -size -10k
...output omitted...

Pencarian File Berdasarkan Waktu Modifikasi

root@host:~# find / -mmin 120
...output omitted...

root@host:~# find / -mmin +200
...output omitted...

root@host:~# find / -mmin -150
...output omitted...

Mencari File Berdasarkan Tipe File

Opsi -type pada perintah find membatasi cakupan pencarian ke tipe file tertentu. Gunakan flag berikut untuk membatasi cakupan pencarian:


Memantau dan Mengelola Proses Linux

Definisi Proses

Suatu proses adalah contoh yang sedang berjalan dari program yang diluncurkan dan dapat dieksekusi. Sejak saat suatu proses dibuat, proses tersebut terdiri dari hal-hal berikut:

Lingkungan suatu proses adalah daftar informasi yang mencakup hal-hal berikut:

process-lifecycle

Status Proses

process-states

Nama Flag Nama dan Deskripsi Status yang Ditentukan Kernel
Running R TASK_RUNNING: Proses sedang dieksekusi pada CPU atau menunggu untuk berjalan. Proses dapat menjalankan rutinitas pengguna atau rutinitas kernel (panggilan sistem), atau berada dalam antrian dan siap ketika dalam status Running (atau Runnable).
Sleeping S TASK_INTERRUPTIBLE: Proses menunggu suatu kondisi: permintaan perangkat keras, akses sumber daya sistem, atau sinyal. Ketika suatu peristiwa atau sinyal memenuhi kondisi tersebut, proses kembali ke status Running.
  D TASK_UNINTERRUPTIBLE: Proses ini juga tidur (sleeping), tetapi tidak seperti status S, proses ini tidak merespons sinyal. Status ini hanya digunakan ketika interupsi proses dapat menyebabkan status perangkat yang tidak dapat diprediksi.
  K TASK_KILLABLE: Sama dengan status D (uninterruptible), tetapi dimodifikasi untuk mengizinkan tugas yang menunggu merespons sinyal untuk menghentikannya (keluar sepenuhnya). Utilitas sering menampilkan proses Killable sebagai status D.
  I TASK_REPORT_IDLE: Subset dari status D yang digunakan untuk thread kernel. Kernel tidak menghitung proses ini saat menghitung beban rata-rata (load average). Bendera TASK_UNINTERRUPTIBLE dan TASK_NOLOAD disetel. Status ini mirip dengan TASK_KILLABLE, dan menerima sinyal fatal.
Stopped T TASK_STOPPED: Proses dihentikan (ditangguhkan), biasanya karena diberi sinyal oleh pengguna atau proses lain. Proses dapat dilanjutkan (diresume) dengan sinyal lain untuk kembali ke status Running.
  T TASK_TRACED: Proses yang sedang di-debug juga dihentikan sementara dan berbagi bendera status T.
Zombie Z EXIT_ZOMBIE: Proses anak memberi sinyal kepada induknya saat keluar. Semua sumber daya kecuali identitas proses (PID) dilepaskan.
  X EXIT_DEAD: Ketika proses induk membersihkan (reaps) struktur proses anak yang tersisa, proses sekarang dilepaskan sepenuhnya. Status ini tidak dapat diamati di utilitas daftar proses.

Proses Penerjemahan Keadaan

user@host:~$ top
PID USER  PR  NI    VIRT    RES    SHR S  %CPU  %MEM   TIME+    COMMAND
  1 root  20   0   49516  41072  10164 S   0.0   0.7   0:02.30  systemd
...output omitted...

user@host:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...output omitted...
root         2  0.0  0.0      0     0 ?        S    11:57   0:00 [kthreadd]
student   2496  0.0  0.0 231132  3872 pts/0    R+   16:45   0:00 ps aux
...output omitted...

Jobs dan Sesi

user@host:~$ ps
    PID TTY          TIME CMD
   2328 pts/0    00:00:00 bash
   8910 pts/0    00:00:00 ps

# Gunakan perintah ps j untuk menemukan informasi proses dan sesi, serta detail tentang pekerjaan.
user@host:~$ ps j
PPID     PID    PGID     SID TTY    TPGID STAT   UID   TIME COMMAND
...output omitted...
8527    8528    8528    8528 pts/0   8633 Ss    1000   0:00 -bash
8528    8559    8559    8528 pts/0   8633 T     1000   0:00 sleep 10000
8528    8633    8633    8528 pts/0   8633 R+    1000   0:00 ps j

Menjalankan Tugas di Latar Belakang

user@host:~$ sleep 10000 &
[1] 5947

user@host:~$ jobs
[1]+ Running    sleep 10000 &

Membawa Tugas Latar Belakang ke Depan

user@host:~$ fg %1
sleep 10000

Mengirim Proses Latar Depan ke Latar Belakang

Gunakan kombinasi tombol Ctrl+Z

user@host:~$ sleep 10000
^Z
[1]+  Stopped                 sleep 10000

Memulai Proses yang Ditangguhkan

user@host:~$ bg %1
[1]+ sleep 10000 &

Mengontrol Proses dengan Sinyal

Sinyal Nama Definisi
1 HUP Hangup : Melaporkan penghentian proses pengendali (controlling process) dari sebuah terminal. Juga meminta inisialisasi ulang proses (reload konfigurasi) tanpa penghentian.
2 INT Keyboard interrupt : Menyebabkan penghentian program. Dapat diblokir atau ditangani. Dikirim dengan menekan urutan tombol INTR (Interrupt) yaitu Ctrl+C.
3 QUIT Keyboard quit : Mirip dengan SIGINT; menambahkan dump proses saat penghentian. Dikirim dengan menekan urutan tombol QUIT yaitu Ctrl+\.
9 KILL Kill, unblockable : Menyebabkan penghentian program secara tiba-tiba. Tidak dapat diblokir, diabaikan, atau ditangani; selalu fatal.
15 (default) TERM Terminate : Menyebabkan penghentian program. Tidak seperti SIGKILL, sinyal ini dapat diblokir, diabaikan, atau ditangani. Memungkinkan program menyelesaikan operasi penting dan membersihkan diri (self-cleanup) sebelum dihentikan.
18 CONT Continue : Dikirim ke proses untuk melanjutkan jika dihentikan (stopped). Tidak dapat diblokir. Meskipun ditangani, sinyal ini tetap melanjutkan proses.
19 STOP Stop, unblockable : Menangguhkan proses. Tidak dapat diblokir atau ditangani.
20 TSTP Keyboard stop : Tidak seperti SIGSTOP, sinyal ini dapat diblokir, diabaikan, atau ditangani. Dikirim dengan menekan urutan tombol suspend yaitu Ctrl+Z.

Setiap sinyal memiliki tindakan default, yang biasanya salah satu dari tindakan berikut:

Mengirim Sinyal Berdasarkan Permintaan Langsung

user@host:~$ kill -l
 1) SIGHUP       2) SIGINT     3) SIGQUIT    4) SIGILL     5) SIGTRAP
 6) SIGABRT      7) SIGBUS     8) SIGFPE     9) SIGKILL   10) SIGUSR1
11) SIGSEGV     12) SIGUSR2   13) SIGPIPE   14) SIGALRM   15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD   18) SIGCONT   19) SIGSTOP   20) SIGTSTP
...output omitted...

user@host:~$ ps aux | grep task
...output omitted...

user@host:~$ kill 6564
[1]   Terminated              task1

user@host:~$ kill -9 6566
[2]-  Killed                  task2

user@host:~$ ps aux | grep task2
user 6568 0.0 0.0 228796 3220 pts/0  S  17:22 0:00 /bin/bash ~/bin/task3
...output omitted...

user@host:~$ kill -SIGKILL 6568
[3]+  Killed                  task3

Mengontrol Proses Tertentu

root@host:~# pgrep -l -u bob
7391 bash
7426 sleep
7427 sleep
7428 sleep
root@host:~# w -u bob
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
bob      tty3                      18:37    5:04   0.03s  0.03s -bash
root@host:~# pkill -t tty3
root@host:~# pgrep -l -u bob
7391 bash

root@host:~# pstree -p bob
bash(8391)─┬─sleep(8425)
           ├─sleep(8426)
           └─sleep(8427)
root@host:~# pkill -P 8391
root@host:~# pgrep -l -u bob
bash(8391)
root@host:~# pkill -SIGKILL -P 8391
root@host:~# pgrep -l -u bob
bash(8391)

Mengirim Sinyal ke Beberapa Proses

user@host:~$ ps aux | grep job
user 9259 0.0 0.0 228796 3236 pts/0  S  20:05 0:00 /bin/bash ~/bin/control job1
user 9261 0.0 0.0 228796 3232 pts/0  S  20:05 0:00 /bin/bash ~/bin/control job2
user 9270 0.0 0.0 228796 3240 pts/0  S  20:06 0:00 /bin/bash ~/bin/control job3
...output omitted...
user@host:~$ killall job
[1]   Terminated              control job1
[2]   Terminated              control job2
[3]-  Terminated              control job3

Menghentikan Tugas Latar Belakang

user@host:~$ jobs
[1]-  Running                 sleep 500 &
[2]+  Running                 sleep 1000 &

user@host:~$ kill -SIGTERM %1
user@host:~$ jobs
[2]+  Running                 sleep 1000 &

Keluar Pengguna Secara Administratif

user@host:~$ w -f
 12:43:06 up 27 min,  5 users,  load average: 0.03, 0.17, 0.66
USER  TTY   FROM                LOGIN@   IDLE   JCPU   PCPU WHAT
root  tty2                      12:26   14:58   0.04s  0.04s -bash
bob   tty3                      12:28   14:42   0.02s  0.02s -bash
user  pts/1 desktop.example.com 12:41    2.00s  0.03s  0.03s w
user@host:~$

Perintah w menunjukkan siapa yang sedang login dan apa yang dilakukan setiap pengguna. Sebaliknya, perintah who hanya memberikan informasi dasar tentang pengguna yang sedang login.

user@host:~$ who
root     tty2         2025-06-09 12:26 (tty2)
bob      tty3         2025-06-09 12:28 (tty3)
user     pts/1        2025-06-09 12:41 (desktop.example.com)

# Setelah mengidentifikasi sesi yang akan dihentikan, gunakan perintah pkill -t untuk mengakhirinya.
user@host:~$ sudo pkill -t tty3
user@host:~$ who
root     tty2         2025-06-09 12:26 (tty2)
user     pts/1        2025-06-09 12:41 (desktop.example.com)

Memantau Aktivitas Proses

# Menafsirkan Nilai Rata-Rata Beban
user@host:~$ uptime
 15:29:03 up 14 min,  2 users,  load average: 2.92, 4.48, 5.20

# mengetahui jumlah CPU di sistem
user@host:~$ lscpu

Pemantauan Proses Secara Real-time

user@host:~$ top
...output omitted...
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
16486 root    20   0       0      0      0 I   0.3   0.0   0:00.03 kworker/1:1-events
16811 student 20   0  232736   5624   3448 R   0.3   0.3   0:00.02 top
   1 root     20   0   48740  40544  10352 S   0.0   2.0   0:07.37 systemd
...output omitted...

Kolom output utama default adalah sebagai berikut:


Mengontrol Layanan dan Daemon

Daftar Unit Layanan

root@host:~# systemctl list-units --type=service
  UNIT                       LOAD   ACTIVE SUB          DESCRIPTION
  accounts-daemon.service    loaded active running      Accounts Service
  atd.service                loaded active running      Deferred execution ...
  auditd.service             loaded active running      Security Audit ...
...output omitted...

Dalam contoh ini, opsi --type=service membatasi tipe unit systemd hanya pada unit layanan. Outputnya memiliki kolom-kolom berikut:

Secara default, perintah systemctl list-units --type=service hanya menampilkan unit layanan dengan status aktivasi aktif. Opsi systemctl list-units --all menampilkan semua unit layanan tanpa memperhatikan status aktivasinya. Gunakan opsi --state= untuk memfilter berdasarkan nilai pada kolom LOAD, ACTIVE, atau SUB.

Perintah systemctl tanpa argumen apa pun akan menampilkan daftar unit yang sedang dimuat dan aktif.

# gunakan opsi list-unit-files pada perintah systemctl untuk melihat status semua file unit yang terpasang:
root@host:~# systemctl list-unit-files --type=service
UNIT FILE                         STATE       VENDOR PRESET
arp-ethers.service                disabled    disabled
atd.service                       enabled     enabled
auditd.service                    enabled     enabled
auth-rpcgss-module.service        static      -
autovt@.service                   alias       -
blk-availability.service          disabled    disabled
...output omitted...

Melihat Status Layanan

Lihat status suatu unit dengan perintah systemctl status name.type.

root@host:~# systemctl status sshd.service
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-05-22 14:47:33 UTC; 2h 48min ago
 Invocation: 215ee4e3b9e2426880cb727cb3933db1
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 2212 (sshd)
      Tasks: 1 (limit: 35724)
     Memory: 3.2M (peak: 6.4M)
        CPU: 8.984s
     CGroup: /system.slice/sshd.service
             └─2212 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

May 22 17:33:34 workstation sshd-session[5124]: Connection closed by ...
...output omitted...

Informasi Unit Layanan:

Field Deskripsi
Loaded Apakah unit layanan dimuat ke dalam memori.
Active Apakah unit layanan berjalan, dan jika ya, sudah berapa lama.
Docs Tempat untuk menemukan informasi lebih lanjut tentang layanan.
Main PID ID proses utama dari layanan, termasuk nama perintahnya.
Status Informasi lebih lanjut tentang layanan.
Process Informasi lebih lanjut tentang proses terkait.
CGroup Informasi lebih lanjut tentang grup kontrol (control groups) terkait.

Status Layanan di Output systemctl:

Keyword Deskripsi
loaded File konfigurasi unit telah diproses.
active (running) Layanan sedang berjalan dengan proses yang terus aktif.
active (exited) Layanan berhasil menyelesaikan konfigurasi satu kali (one-time configuration).
active (waiting) Layanan sedang berjalan tetapi menunggu suatu peristiwa (event).
inactive Layanan tidak sedang berjalan.
enabled Layanan akan dimulai pada saat boot.
disabled Layanan tidak disetel untuk dimulai pada saat boot.
static Layanan tidak dapat diaktifkan (enabled), tetapi unit yang diaktifkan mungkin akan memulainya secara otomatis.

Memeriksa Status Layanan

root@host:~# systemctl is-active sshd.service
active

root@host:~# systemctl is-enabled sshd.service
enabled

root@host:~# systemctl is-failed sshd.service
active

Memulai dan Menghentikan Layanan

# verifikasi status layanan
root@host:~# systemctl status sshd.service
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-05-22 14:47:33 UTC; 7h ago
...output omitted...

# memulai layanan
root@host:~# systemctl start sshd

# menghentikan layanan
root@host:~# systemctl stop sshd.service

Memulai Ulang dan Memuat Ulang Layanan

# mulai ulang
root@host:~# systemctl restart sshd.service

# reload konfigurasi, tanpa restart
root@host:~# systemctl reload sshd.service

# jika tidak yakin pakai yang mana
root@host:~# systemctl reload-or-restart sshd.service

Lihat Daftar Dependensi Unit

root@host:~# systemctl list-dependencies sshd.service
sshd.service
○ ├─ssh-host-keys-migration.service
● ├─system.slice
● ├─sshd-keygen.target
○ │ ├─sshd-keygen@ecdsa.service
○ │ ├─sshd-keygen@ed25519.service
○ │ └─sshd-keygen@rsa.service
● └─sysinit.target
...output omitted...

# untuk reverse
root@host:~# systemctl list-dependencies --reverse NetworkManager.service
NetworkManager.service
● ├─NetworkManager-wait-online.service
● └─multi-user.target
●   └─graphical.target

Menonaktifkan (Masking) dan Mengaktifkan (Unmasking) Layanan

root@host:~# systemctl mask httpd.service
Created symlink '/etc/systemd/system/httpd.service''/dev/null'.

# verifikasi status
root@host:~# systemctl status httpd.service
○ httpd.service
     Loaded: masked (Reason: Unit httpd.service is masked.)
     Active: inactive (dead)
...output omitted...
root@host:~# systemctl list-unit-files httpd.service
UNIT FILE     STATE  PRESET
httpd.service masked disabled

# setelah di mask, layanan tidak bisa dijalankan
root@host:~# systemctl start httpd.service
Failed to start httpd.service: Unit httpd.service is masked.

# jika ingin menjalankan, unmask dulu
root@host:~# systemctl unmask httpd.service
Removed '/etc/systemd/system/httpd.service'.
root@host:~# systemctl start httpd.service

Mengaktifkan Layanan untuk Mulai atau Berhenti saat Boot

# enable dari ketika booting
root@root:~# systemctl enable sshd.service
Created symlink '/etc/systemd/system/multi-user.target.wants/sshd.service''/usr/lib/systemd/system/sshd.service'.

# enable ketika boot dan mulai saat ini
root@root:~# systemctl enable --now sshd.service
Created symlink '/etc/systemd/system/multi-user.target.wants/sshd.service''/usr/lib/systemd/system/sshd.service'.

# disable untuk boot milai saat ini
root@host:~# systemctl disable --now sshd.service
Removed '/etc/systemd/system/multi-user.target.wants/sshd.service'.

# verifikasi status
root@host:~# systemctl is-enabled sshd.service
enabled

Ringkasan Perintah systemctl

Perintah Tugas
systemctl status UNIT Menampilkan informasi rinci tentang status suatu unit.
systemctl stop UNIT Menghentikan layanan pada sistem yang sedang berjalan.
systemctl start UNIT Menjalankan layanan pada sistem yang sedang berjalan.
systemctl restart UNIT Memulai ulang (restart) layanan pada sistem yang sedang berjalan.
systemctl reload UNIT Memuat ulang (reload) file konfigurasi dari layanan yang sedang berjalan.
systemctl mask UNIT Menonaktifkan layanan agar tidak dapat dijalankan, baik secara manual maupun saat boot.
systemctl unmask UNIT Mengaktifkan kembali layanan yang telah di-mask.
systemctl enable UNIT Mengonfigurasi layanan agar berjalan saat boot. Gunakan opsi --now untuk juga menjalankan layanan tersebut.
systemctl disable UNIT Menonaktifkan layanan agar tidak berjalan saat boot. Gunakan opsi --now untuk juga menghentikan layanan tersebut.

Pengantar Jaringan Komputer

Model Jaringan TCP/IP

Model jaringan TCP/IP adalah seperangkat protokol komunikasi empat lapisan yang menjelaskan bagaimana komunikasi data dikemas, dialamatkan, ditransmisikan, dirutekan, dan diterima antar komputer melalui jaringan. Protokol ini ditentukan oleh RFC 1122: Requirements for Internet Hosts - Communication Layers.

Empat lapisan model jaringan TCP/IP adalah: aplikasi, transport, internet, dan tautan.

osi-tcp-ip-model

Penamaan Antarmuka Jaringan

Nama antarmuka jaringan diawali dengan jenis antarmuka:

Bagian lain dari nama antarmuka didasarkan pada informasi dari firmware server, atau ditentukan oleh lokasi perangkat dalam topologi PCI.

Jaringan IPv4

Alamat IPv4 adalah angka 32-bit, yang dinyatakan sebagai empat oktet 8-bit dalam format desimal yang nilainya berkisar dari 0 sampai 255, dipisahkan oleh titik tunggal.

ipv4-netmask-calculation

Contoh Perhitungan Jaringan: 192.168.1.107/24

Komponen Notasi Desimal Notasi Biner
Alamat Host 192.168.1.107 11000000.10101000.00000001.01101011
Netmask /24 atau 255.255.255.0 11111111.11111111.11111111.00000000
Alamat Jaringan 192.168.1.0 11000000.10101000.00000001.00000000
Rentang Host 192.168.1.1 - 192.168.1.254 11000000.10101000.00000001.00000001 hingga 11000000.10101000.00000001.11111110
Alamat Broadcast 192.168.1.255 11000000.10101000.00000001.11111111
user@host:~$ ipcalc 10.1.1.18/8
Address:	10.1.1.18
Network:	10.0.0.0/8
Netmask:	255.0.0.0 = 8
Broadcast:	10.255.255.255

Address space:	Private Use
HostMin:	10.0.0.1
HostMax:	10.255.255.254
Hosts/Net:	16777214

Routing IPv4

Paket jaringan bergerak dari host ke host di subnet dan melalui router dari jaringan ke jaringan. Setiap host menggunakan tabel routing untuk menentukan antarmuka jaringan mana yang digunakan untuk mengirim paket ke jaringan tertentu.

example-network-topology

Konfigurasi Alamat IPv4

Sebuah host dapat secara otomatis mengonfigurasi pengaturan jaringan IPv4 dengan berinteraksi dengan server Dynamic Host Configuration Protocol (DHCP). Klien DHCP menyiarkan permintaan penemuan pada segmen jaringan lokalnya untuk menemukan server DHCP yang tersedia. Setelah menerima tawaran dari server DHCP, klien meminta dan diberi alamat IPv4 unik, bersama dengan parameter jaringan lainnya seperti subnet mask, gateway default, dan alamat server DNS.

Jaringan IPv6

Contoh:

Subnet IPv6

ipv6-subnet

Alamat/Jaringan IPv6 Tujuan Deskripsi
::1/128 localhost Setara dengan alamat IPv6 untuk 127.0.0.1/8, yang disetel pada antarmuka loopback.
:: Alamat yang tidak ditentukan (unspecified address) Setara dengan IPv6 untuk 0.0.0.0. Untuk layanan jaringan, ini dapat menunjukkan bahwa layanan mendengarkan (listening) pada semua alamat IP yang dikonfigurasi.
::/0 Rute default (internet IPv6) Setara dengan IPv6 untuk alamat 0.0.0.0/0. Rute default dalam tabel routing cocok dengan jaringan ini; router untuk jaringan ini adalah tempat semua lalu lintas dikirim jika tidak ada rute yang lebih baik.
2000::/3 Alamat unicast global Internet Assigned Numbers Authority (IANA) saat ini mengalokasikan alamat IPv6 publik yang dapat dirutekan dari ruang ini. Alamat-alamat tersebut mencakup semua jaringan yang berkisar dari 2000::/16 hingga 3fff::/16.
fd00::/8 Alamat lokal unik (Unique local addresses - RFC 4193) IPv6 tidak memiliki padanan langsung untuk ruang alamat pribadi RFC 1918, meskipun rentang jaringan ini mendekati. Sebuah organisasi dapat menggunakan jaringan ini untuk mengalokasikan sendiri ruang alamat IP pribadi yang dapat dirutekan secara internal. Namun, jaringan ini tidak dapat digunakan di internet global. Organisasi harus memilih secara acak sebuah /48 dari ruang ini, tetapi dapat melakukan subnetting alokasi menjadi jaringan /64 seperti biasa.
fe80::/10 Alamat link-local Setiap antarmuka IPv6 secara otomatis mengonfigurasi alamat unicast link-local yang tidak dapat dirutekan ke jaringan publik.
ff00::/8 Alamat multicast Setara dengan IPv6 untuk alamat 224.0.0.0/4. Multicast mengirimkan paket ke beberapa host secara bersamaan. Fungsionalitas satu-ke-banyak ini sangat penting, karena IPv6 tidak menggunakan alamat broadcast.

Konfigurasi Alamat IPv6

IPv6 mendukung konfigurasi manual serta dua metode dinamis: DHCPv6 dan SLAAC (Stateless Address Autoconfiguration).

Nama Host dan Resolusi Nama

Metode yang mudah untuk resolusi nama adalah dengan membuat entri statis untuk nama host di file /etc/hosts setiap sistem. Metode ini memiliki kelemahan yang signifikan: yaitu harus memperbarui file hosts secara manual di setiap sistem.

Mendapatkan Informasi Jaringan

Identifikasi Perangkat Jaringan

user@host:~$ ip link show

Menampilkan Alamat IP

user@host:~$ ip addr show ens3

Menampilkan Statistik Performa

user@host:~$ ip -s link show ens3

Memeriksa Koneksi Antar Host

user@host:~$ ping -c3 192.0.2.254

user@host:~$ ping6 2001:db8:0:1::1

user@host:~$ ping6 -c 1 fe80::f482:dbff:fe25:6a9f%ens4

Mengatasi Masalah Routing

Menampilkan Tabel Routing

# untuk ipv4
user@host:~$ ip route

# untuk ipv6
user@host:~$ ip -6 route

Melacak Rute Lalu Lintas

user@host:~$ tracepath access.redhat.com
...output omitted...

user@host:~$ tracepath6 2001:db8:0:2::451

user@host:~$ mtr -r -c 5 access.redhat.com
Start: 2025-05-29T22:41:52+0000
HOST: servera                     Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- classroom.lab.example.com  0.0%     5    0.4   0.4   0.3   0.5   0.1
  2.|-- 72.32.49.3                 0.0%     5    1.0   1.3   0.9   2.3   0.6
  3.|-- 72.32.28.27                0.0%     5    1.3   1.5   1.3   1.7   0.2
  4.|-- aggr172b-54-cored.dfw3.ra  0.0%     5    1.0   1.0   0.8   1.0   0.1
  5.|-- dcpe3-cored.dfw3.rackspac  0.0%     5    1.9   2.1   1.9   2.5   0.2
  6.|-- 10.25.1.101                0.0%     5    2.0   2.0   2.0   2.1   0.1
  7.|-- equinix-dfw2.netarch.akam  0.0%     5   15.8  15.9   6.3  27.9   9.0
...output omitted...

Memperbaiki Masalah Port dan Layanan

Perintah ss, yang menampilkan statistik soket, telah menggantikan alat netstat sebelumnya (dari paket net-tools), meskipun perintah netstat mungkin masih familiar bagi administrator sistem yang berpengalaman.


Mengelola Konfigurasi Jaringan

Mengelola Perangkat dan Koneksi Jaringan

Melihat Informasi Jaringan

root@host:~# nmcli dev status

# menampilkan daftar semua koneksi
root@host:~# nmcli con show
root@host:~# nmcli con show --active

Menambahkan Koneksi Jaringan

# Contoh ini menambahkan koneksi tipe ethernet untuk antarmuka jaringan enp8s0
root@host:~# nmcli con add ifname enp8s0 type ethernet

# Contoh ini membuat koneksi enp9s0 tipe ethernet untuk antarmuka jaringan enp9s0 dengan pengaturan jaringan IPv4 statis.
root@host:~# nmcli con add con-name enp9s0 type ethernet ifname enp9s0 \
ipv4.method manual ipv4.addresses 192.168.0.5/24 ipv4.gateway 192.168.0.254

# Contoh ini membuat koneksi enp10s0 untuk perangkat enp10s0 dengan alamat IPv6 dan IPv4 statis.
# Perintah ini mengkonfigurasi alamat IPv6 2001:db8:0:1::c000:207 dengan prefiks jaringan /64 dan alamat 2001:db8:0:1::1 sebagai gateway default.
root@host:~# nmcli con add con-name enp10s0 type ethernet ifname enp10s0 \
ipv6.method manual ipv6.addresses '2001:db8:0:1::c000:207/64' ipv6.gateway \
'2001:db8:0:1::1' ipv4.method manual ipv4.addresses '192.0.2.7/24' ipv4.gateway '192.0.2.1'

Mengelola Koneksi Jaringan

# mengaktifkan koneksi jaringan pada perangkat yang terikat dengannya
root@host:~# nmcli con show
NAME    UUID                                  TYPE      DEVICE
enp1s0  55e68e96-905d-4613-a29a-f5f88d3a12e8  ethernet  enp1s0
lo      8ddeb3e7-1399-4619-a1bc-c82c9aa11034  loopback  lo
enp8s0  2e779f16-5fc5-4ecc-a92e-c16b9a0cd0a4  ethernet  --

root@host:~# nmcli con up enp8s0

# Memutuskan sambungan perangkat jaringan dan menutup koneksi:
root@host:~# nmcli dev dis enp8s0

Memperbarui Pengaturan Koneksi Jaringan

Koneksi layanan NetworkManager memiliki dua jenis pengaturan. Properti koneksi statis dikonfigurasi oleh administrator dan disimpan dalam file konfigurasi /etc/NetworkManager/system-connections/*.nmconnection. Properti koneksi dinamis diminta dari server DHCP dan tidak disimpan secara permanen.

# Untuk melihat pengaturan koneksi saat ini, gunakan perintah nmcli connection show.
root@host:~# nmcli -p con show enp8s0

# Pilih kolom tertentu saat mencetak detail koneksi:
root@host:~# nmcli -f ipv4.method,ipv4.addresses,ipv4.gateway con show enp8s0

Memperbarui Pengaturan Koneksi dari Baris Perintah:

# Perbarui koneksi enp8s0 untuk mengatur alamat IPv4 192.0.2.2/24 dan gateway default 192.0.2.254.
root@host:~# nmcli con mod enp8s0 ipv4.addresses 192.0.2.2/24 ipv4.gateway 192.0.2.254 connection.autoconnect yes

# perbarui koneksi enp8s0 untuk mengatur alamat IPv6 2001:db8:0:1::a00:1/64 dan gateway default 2001:db8:0:1::1
root@host:~# nmcli con mod enp8s0 ipv6.addresses '2001:db8:0:1::a00:1/64' ipv6.gateway '2001:db8:0:1::1'

# Contoh ini menambahkan server DNS 2.2.2.2 ke koneksi enp8s0.
root@host:~# nmcli con mod enp8s0 +ipv4.dns 2.2.2.2

Mmodifikasi profil jaringan dapat dilakukan dengan mengedit file konfigurasi koneksi di direktori /etc/NetworkManager/system-connections/.

# Setelah memperbarui file konfigurasi koneksi secara manual, gunakan perintah nmcli untuk memuat ulang semua profil koneksi:
root@host:~# nmcli con reload

# Contoh selanjutnya hanya membaca ulang profil koneksi enp8s0 di /etc/NetworkManager/system-connections/enp8s0.nmconnection:
root@host:~# nmcli con reload enp8s0

Menghapus Koneksi Jaringan

root@host:~# nmcli con del enp8s0

Izin untuk Memodifikasi Pengaturan NetworkManager

root@host:~# nmcli gen permissions
PERMISSION                                                        VALUE
org.freedesktop.NetworkManager.checkpoint-rollback                yes
org.freedesktop.NetworkManager.enable-disable-connectivity-check  yes

user@host:~$ nmcli gen permissions
PERMISSION                                                        VALUE
org.freedesktop.NetworkManager.checkpoint-rollback                auth
org.freedesktop.NetworkManager.enable-disable-connectivity-check  no

Perintah NetworkManager yang Berguna

Perintah Tujuan
nmcli dev status Menampilkan status NetworkManager dari semua antarmuka jaringan.
nmcli con show Menampilkan daftar semua koneksi.
nmcli con show name Menampilkan pengaturan saat ini untuk koneksi dengan nama tertentu.
nmcli con add con-name name Menambahkan dan memberi nama pada profil koneksi baru.
nmcli con mod name Mengubah (memodifikasi) koneksi dengan nama tertentu.
nmcli con reload Memuat ulang file konfigurasi setelah pengeditan file secara manual.
nmcli con up name Mengaktifkan (menjalankan) koneksi dengan nama tertentu.
nmcli dev dis dev Memutuskan (disconnect) antarmuka, yang juga menonaktifkan koneksi saat ini.
nmcli con del name Menghapus koneksi yang ditentukan beserta file konfigurasinya.

File Konfigurasi Koneksi

Lokasi File Konfigurasi

File konfigurasi koneksi, yang berada di direktori /etc/NetworkManager/system-connections/, biasanya diberi nama name.nmconnection, di mana name sesuai dengan perangkat atau koneksi yang dikendalikannya.

NetworkManager mengatur file konfigurasinya di direktori berikut:

Contoh Pengeditan File Konfigurasi

[connection]
id=Wired connection 1
uuid=27afa607-ee36-43f0-b8c3-9d245cdc4bb3
type=ethernet
autoconnect=true
interface-name=ens4

[ethernet]
mac-address=00:1A:2B:3C:4D:5E

[ipv4]
method=manual
address1=172.25.0.10/24
gateway=172.25.0.254
dns=172.25.254.254
dns-search=example.com

Untuk spesifikasi tambahan, koneksi dapat menyertakan alamat MAC, tetapi ini tidak wajib.

Dalam skenario berikut mencontohkan jika ingin mengubah alamat IP koneksi static-ens4 secara permanen dari 172.24.250.30 menjadi 172.24.250.40.

Pertama, verifikasi pengaturan antarmuka saat ini. Awalnya, perintah ip dan nmcli sama-sama menampilkan alamat IP aktif 172.25.250.30. Perhatikan bahwa perintah ip menampilkan informasi jaringan secara real-time, sedangkan perintah nmcli con show menampilkan konfigurasi tetap yang digunakan selama startup sistem.

root@host:~# ip -4 -br addr show dev ens4
ens4             UP             172.24.250.30/24

root@host:~# nmcli -f ipv4.addresses con show static-ens4
ipv4.addresses:                         172.24.250.30/24

# Edit file koneksi untuk mengubah informasi alamat IP secara permanen.
root@host:~# sed -i 's/172.24.250.30/172.24.250.40/' /etc/NetworkManager/system-connections/static-ens4.nmconnection

# Terapkan perubahan dari file koneksi.
root@host:~# nmcli con reload

# Setelah melakukan reload, perintah nmcli con show menampilkan alamat IP baru, tetapi perintah ip masih menampilkan alamat asli dalam konfigurasi runtime saat ini.
root@host:~# nmcli -f ipv4.addresses con show static-ens4
ipv4.addresses:                         172.24.250.40/24

root@host:~# ip -4 -br addr show dev ens4
ens4             UP             172.24.250.30/24

# Untuk melihat alamat IP baru dalam konfigurasi runtime, koneksi harus diaktifkan kembali dengan menggunakan perintah nmcli con up:
root@host:~# nmcli con up static-ens4
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)

root@host:~# ip -4 -br addr show dev ens4
ens4             UP             172.24.250.40/24

Memperbarui Nama Host Sistem

Nama host domain yang sepenuhnya memenuhi syarat (FQDN) secara unik mengidentifikasi setiap server dalam jaringan. Perintah hostname menampilkan atau memodifikasi sementara FQDN sistem.

Pada contoh berikut mengubah sementara nama host host.example.com menjadi web1.example.com:

root@host:~# hostname
host.example.com
root@host:~# hostname web1.example.com
root@host:~# hostname
web1.example.com

Untuk mengatur nama host tetap, nama host tersebut harus ditentukan dalam file /etc/hostname, yang dibaca saat sistem dimulai.

# melihat nama host saat ini
root@host:~# hostnamectl hostname
host.example.com
root@host:~# hostnamectl hostname db1.example.com
root@host:~# hostnamectl hostname
db1.example.com

# Pastikan file /etc/hostname telah diperbarui dengan nama host yang baru.
root@host:~# cat /etc/hostname

Mengonfigurasi Resolusi Nama

Secara default, sistem mencoba menyelesaikan permintaan dengan terlebih dahulu menggunakan file /etc/hosts.

Jika file /etc/hosts tidak berisi entri yang cocok, maka resolver stub akan meminta server nama DNS untuk mencari nama host. File /etc/resolv.conf mengontrol bagaimana permintaan DNS ini dilakukan:

root@host:~# cat /etc/resolv.conf
# Generated by NetworkManager
search example.com
nameserver 172.25.250.100

NetworkManager menggunakan pengaturan DNS yang tersimpan dalam profil koneksi untuk memperbarui file /etc/resolv.conf. Gunakan perintah nmcli untuk memodifikasi koneksi:

root@host:~# nmcli con mod 'Wired connection 1' ipv4.dns 172.25.250.220
root@host:~# cd /etc/NetworkManager/system-connections/
root@host:/etc/NetworkManager/system-connections# cat Wired\ connection\ 1.nmconnection
...output omitted...
[ipv4]
...output omitted...
dns=172.25.250.220;
...output omitted...
root@host:/etc/NetworkManager/system-connections# nmcli con up 'Wired connection 1'

Secara default, perintah nmcli con mod ID ipv4.dns IP akan menimpa entri name server yang ada dengan alamat IP yang diberikan. Untuk menambahkan atau menghapus server DNS tertentu, tambahkan karakter plus (+) atau minus (-) di depan opsi ipv4.dns.

root@host:~# nmcli con mod 'Wired connection 1' +ipv4.dns 172.25.254.254
root@host:~# nmcli con up 'Wired connection 1'
root@host:~# cat /etc/resolv.conf
# Generated by NetworkManager
search example.com
nameserver 172.25.250.220
nameserver 172.25.254.254

Pada contoh berikut, server DNS dengan alamat IPv6 2001:4860:4860::8888 ditambahkan ke daftar server nama yang tersimpan dalam profil static-ens4:

root@host:~# nmcli con mod static-ens4 +ipv6.dns 2001:4860:4860::8888

Pengujian Resolusi Nama DNS

root@host:~# host servera.lab.example.com
servera.lab.example.com has address 172.25.250.10
root@host:~# host 172.25.250.10
10.250.25.172.in-addr.arpa domain name pointer servera.lab.example.com.

# Perintah dig adalah alternatif yang lebih ampuh daripada perintah host dasar untuk melakukan kueri ke server DNS.
root@host:~# dig servera.lab.example.com

Gunakan perintah getent hosts untuk menguji resolusi nama host dengan menggunakan panggilan pustaka C standar, yang mengikuti prosedur yang sama seperti aplikasi lain di sistem Anda. Perlu diingat bahwa konfigurasi default memprioritaskan pemeriksaan file /etc/hosts sebelum menggunakan pencarian server DNS.

root@host:~# getent hosts servera.lab.example.com
172.25.250.10  servera.lab.example.com

Mengonfigurasi dan Mengamankan SSH

Pemeriksaan Kunci Host yang Ketat pada Klien

Demi keamanan, pengaturan default klien SSH adalah memerlukan konfirmasi manual sebelum kunci host baru diterima dan disimpan.

Konfigurasi Pemeriksaan Kunci Host dengan File Konfigurasi

Cara klien SSH menangani kunci host dapat disesuaikan dengan mengedit salah satu dari dua file konfigurasi:

Perlu diingat bahwa pengaturan apa pun dalam file ~/.ssh/config akan menimpa pengaturan dalam konfigurasi di seluruh sistem.

Untuk mengontrol cara klien SSH menangani kunci host, ubah parameter StrictHostKeyChecking. Atur parameter ke salah satu opsi berikut:

Mengonfigurasi Pemeriksaan Kunci Host dari Baris Perintah

user@host:~$ ssh -o StrictHostKeyChecking=accept-new hostb
Warning: Permanently added 'hostb' (ED25519) to the list of known hosts.
user@hostb's password: password
...output omitted...
user@hostb:~$

Memverifikasi Sidik Jari Kunci Host SSH

Di server SSH, gunakan perintah ssh-keygen untuk menampilkan sidik jari kunci publiknya:

user@host:~$ ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Qit7NeebQCgP2otXSaVXbw1rGmUVMlybXyV68qaND/M root@hostb (ED25519)

Pada contoh berikut, pengguna harus dengan cermat membandingkan sidik jari server SSH dengan sumber tepercaya, sebelum mengetik “yes” untuk melanjutkan koneksi.

user@host:~$ ssh hostb
The authenticity of host 'hostb (192.168.250.11)' can't be established.
ED25519 key fingerprint is SHA256:Qit7NeebQCgP2otXSaVXbw1rGmUVMlybXyV68qaND/M.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'hostb' (ED25519) to the list of known hosts.
user@hostb's password: password
...output omitted...
user@hostb:~$

Memperbarui Kunci Host SSH pada Server

Mulai dari Red Hat Enterprise Linux 10, server SSH secara default menggunakan tiga pasang kunci dan algoritma kunci host ED25519, ECDSA, dan RSA. File kunci host ini berada di direktori /etc/ssh/ pada server:

user@host:~$ ls -l /etc/ssh/ssh_host_*
-rw-------. 1 root root  480 Jun 13 16:56 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root  162 Jun 13 16:56 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-------. 1 root root  387 Jun 13 16:56 /etc/ssh/ssh_host_ed25519_key
-rw-r--r--. 1 root root   82 Jun 13 16:56 /etc/ssh/ssh_host_ed25519_key.pub
-rw-------. 1 root root 2578 Jun 13 16:56 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root  554 Jun 13 16:56 /etc/ssh/ssh_host_rsa_key.pub

Jika perlu membuat pasangan kunci host SSH baru, hapus pasangan kunci yang ada dan mulai ulang daemon SSH. Unit sshd.service secara otomatis mendeteksi tidak adanya kunci-kunci ini selama proses memulai layanan dan membuat ulang ketiga pasangan kunci tersebut.

root@host:~# rm -f /etc/ssh/ssh_host_*
root@host:~# systemctl restart sshd.service

Mengelola File Known Host pada Klien

Setelah membuat ulang kunci host, untuk setiap klien SSH yang sebelumnya terhubung ke server, kunci host sebelumnya masih tersimpan dalam file known_hosts nya. Klien SSH menyimpan daftar sistem jarak jauh yang dikenal dan kunci host yang sesuai di salah satu dari dua lokasi berikut:

Jika kunci host server jarak jauh berubah, hapus entri yang sudah usang dari file ~/.ssh/known_hosts.

user@host:~$ ssh-keygen -R hostb

# Jika kunci yang bermasalah ada dalam file host yang dikenal di seluruh sistem, maka administrator harus menghapus entri yang sesuai:
root@host:~# ssh-keygen -R hostb -f /etc/ssh/ssh_known_hosts

Mengisi File Host yang Dikenal

# mengambil dan menyimpan kunci publik dari host jarak jauh
user@host:~$ ssh-keyscan hostb >> ~/.ssh/known_hosts

# verifikasi sidik jari kunci host yang disimpan
user@host:~$ ssh-keygen -l -f ~/.ssh/known_hosts
3072 SHA256:1PpHYtWyiygoQh548NRXxRn6GCMvHSzljrtbAaHKqPc hostb (RSA)
256 SHA256:rMXtr4eS4bCSE6Si81a3v7hNb9RXdMCv8ngjFs7Yj1s hostb (ECDSA)
256 SHA256:89iCusliyLGcq5m0JOnvoTUaa9xkjaKaOGODgbXiTmk hostb (ED25519)

# Tambahkan host baru ke file host yang dikenal di seluruh sistem.
root@host:~# ssh-keyscan -q -t ed25519 hostb >> /etc/ssh/ssh_known_hosts

# contoh memindai seluruh segmen jaringan untuk kunci host untuk mengumpulkan kunci host RSA:
root@host:~# ssh-keyscan -q -t rsa 172.25.250.0/24 >> /etc/ssh/ssh_known_hosts

Otentikasi berbasis kunci SSH

Membuat Kunci SSH

user@host:~$ ssh-keygen

# Menentukan jalur file untuk menyimpan pasangan kunci.
user@host:~$ ssh-keygen -f .ssh/key-with-pass

Berbagi Kunci Publik

user@host:~$ ssh-copy-id -i .ssh/key-with-pass.pub user@remotehost

# setelah itu coba login dengan kunci
user@host:~$ ssh -i .ssh/key-with-pass user@remotehost

Otentikasi Non-Interaktif dengan Pengelola Kunci ssh-agent

Perintah ssh-agent menjalankan perintah shell tambahan untuk mengatur variabel lingkungan saat dijalankan secara manual. Variabel lingkungan ini diperlukan saat menggunakan perintah ssh-add.

Contoh berikut menggunakan perintah ssh-add untuk menambahkan kunci pribadi dari file default ~/.ssh/id_ed25519, dan kemudian menambahkan kunci pribadi dari file ~/.ssh/key-with-pass:

user@host:~$ ssh-add
Identity added: /home/user/.ssh/id_ed25519 (user@host.lab.example.com)
user@host:~$ ssh-add .ssh/key-with-pass
Enter passphrase for .ssh/key-with-pass: my-secret
Identity added: .ssh/key-with-pass (user@host.lab.example.com)

Opsi -l pada perintah ssh-add menampilkan sidik jari dari semua kunci SSH yang saat ini dimuat di pengelola kunci ssh-agent.

user@host:~$ ssh-add -l
256 SHA256:+w3lT...mftuM user@host (ED25519)
256 SHA256:sb6vK...jN3YQ user@host (ED25519)

Perintah ssh berikut menggunakan kunci privat ~/.ssh/key-with-pass untuk mengakses akun di server jarak jauh.

user@host:~$ ssh -i .ssh/key-with-pass user@remotehost
...output omitted...
Last login: Thu Jun 19 21:50:35 2025 host.example.com
user@remotehost:~$

Saat keluar dari sesi yang menggunakan pengelola kunci ssh-agent, semua frasa sandi yang tersimpan dalam cache akan dihapus dari memori.

Penyelesaian Masalah Koneksi SSH

SSH dapat tampak rumit ketika akses jarak jauh dengan otentikasi pasangan kunci tidak berhasil. Perintah ssh menyediakan tiga tingkat detail informasi dengan opsi -v, -vv, dan -vvv, yang masing-masing memberikan informasi debugging yang semakin banyak.

Contoh ini menunjukkan informasi yang diberikan saat menggunakan opsi detail informasi terendah:

user@host:~$ ssh -v user@remotehost
OpenSSH_9.9p1, OpenSSL 3.2.2 4 Jun 2024 ---> 1
debug1: Reading configuration data /etc/ssh/ssh_config ---> 2
debug1: Reading configuration data /etc/ssh/ssh_config.d/01-training.conf
debug1: /etc/ssh/ssh_config.d/01-training.conf line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/50-redhat.conf
...output omitted...
debug1: Connecting to remotehost [192.168.1.10] port 22. ---> 3
debug1: Connection established.
...output omitted...
debug1: Authenticating to remotehost:22 as 'user' ---> 4
...output omitted...
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password ---> 5
...output omitted...
debug1: Next authentication method: publickey ---> 6
debug1: Offering public key: /home/user/.ssh/id_ed25519 ED25519 SHA256:+w3lTa7BdiZwVO1AuAP9GjlwRdzwqk+JKcrhosmftuM ---> 7
debug1: Server accepts key: /home/user/.ssh/id_ed25519 ED25519 SHA256:+w3lTa7BdiZwVO1AuAP9GjlwRdzwqk+JKcrhosmftuM ---> 8
Authenticated to remotehost ([192.168.1.10]:22) using "publickey".
...output omitted...
user@remotehost:~$
  1. Versi OpenSSH dan OpenSSL
  2. Berkas konfigurasi OpenSSH
  3. Koneksi ke host jarak jauh
  4. Mencoba mengautentikasi pengguna di host jarak jauh
  5. Metode autentikasi yang diizinkan oleh host jarak jauh
  6. Mencoba mengautentikasi pengguna dengan menggunakan kunci SSH
  7. Menggunakan berkas kunci /home/user/.ssh/id_rsa untuk autentikasi
  8. Host jarak jauh menerima kunci SSH.

Contoh ini menunjukkan akses jarak jauh dengan kunci SSH yang gagal, tetapi kemudian server SSH menawarkan autentikasi kata sandi yang berhasil.

user@host:~$ ssh -v user@remotehost
...output omitted...
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_ed25519 ED25519 SHA256:+w3lTa7BdiZwVO1AuAP9GjlwRdzwqk+JKcrhosmftuM
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
...output omitted...
debug1: Next authentication method: password
user@remotehost's password: user-password
Authenticated to remotehost ([172.25.250.10]:22) using "password".
...output omitted...
user@remotehost:~$

Mengkonfigurasi Klien SSH

Buat file ~/.ssh/config untuk mengkonfigurasi koneksi SSH terlebih dahulu. Di dalam file konfigurasi, tentukan parameter koneksi seperti pengguna, kunci, dan port untuk host tertentu. File ini menghilangkan kebutuhan untuk menentukan parameter perintah secara manual setiap kali terhubung ke host. File ~/.ssh/config berikut mengkonfigurasi dua koneksi host dengan pengguna dan kunci yang berbeda:

user@host:~$ cat ~/.ssh/config
host remotehosta
     HostName                      remotehosta.example.com
     User                          usera
     IdentityFile                  ~/.ssh/id_ed25519_remotehosta

host remotehostb
     HostName                      remotehostb.example.com
     User                          userb
     IdentityFile                  ~/.ssh/id_ed25519_remotehostb

Mengkonfigurasi Server SSH

Daemon sshd menyediakan layanan OpenSSH. Layanan tersebut dapat dikonfigurasi dengan mengedit file /etc/ssh/sshd_config.

Melarang Superuser (root) untuk Masuk

# edif file /etc/ssh/sshd_config, temukan baris PermitRootLogin yes, ubah menjadi no:
PermitRootLogin no

# lalu restart/reload
root@host:~# systemctl reload sshd

Melarang Otentikasi Berbasis Kata Sandi

# edit file /etc/ssh/sshd_config, temukan baris PasswordAuthentication yes, ubah jadi no:
PasswordAuthentication no

# lalu restart/reload