📚 Server Linux 🏠
Alur belajar dari nol: halaman ini adalah kursus Server Linux lengkap berbasis kurikulum LPIC-1 (Linux Professional Institute) — mulai dari apa itu boot, filesystem, dan perintah dasar (Modul 1–4), lalu naik ke shell scripting, user, cron, layanan, jaringan, SSH, sampai keamanan (Modul 5–10). Materi Modul 10 menjadi jembatan ke halaman cPanel Hosting jika tujuannya mengelola web hosting. Uji pemahamanmu di kuis IT.

Belajar Server Linux dari Nol sampai Siap Sertifikasi

Halaman ini adalah modul bacaan lengkap (textbook) yang disusun mengikuti kurikulum LPIC-1 — dua ujian, 101 & 102 — untuk administrasi server Linux (Debian/Ubuntu & RHEL/Fedora). Semua perintah dicontohkan pada kasus nyata: server mail.instansicontoh.id yang kita bangun bertahap dari instalasi kosong sampai siap menghosting aplikasi web.

📚 10 Modul sesuai outline resmi LPI 🎯 Format ujian: 60 soal · 90 menit · lulus 500/800 (per ujian) 📖 Bahasa Indonesia, tanpa asumsi pengetahuan awal 🧪 Latihan praktik: kuis-it.html
Cara memakai halaman ini: baca urut dari Modul 1. Tiap modul diakhiri Cek Pemahaman (jawab dulu sebelum lanjut) dan Lab. Sediakan mesin latihan: VirtualBox/VMware + Ubuntu Server LTS atau WSL2 (distro Debian) — semua perintah di halaman ini bisa dicoba tanpa risiko di VM.
🧭 Lab Proyek — Bangun Server "mail.instansicontoh.id" dari Nol

Ini jalur skill-mu: ikuti urutan langkah di bawah, pelajari teorinya di modul, lalu praktikkan Lab-nya di VM sebelum mencentang. Centangan sinkron dengan tombol "Tandai selesai" di bawah tiap modul — progres tersimpan di browser.

    Modul 1 — Arsitektur SistemBasis sertifikasi LPIC-1: mengenali perangkat keras, proses boot, dan systemd

    1.1 Kenali Perangkat Keras

    Seorang admin server harus tahu apa yang ada di dalam mesin sebelum menginstal atau memecahkan masalah. Linux menyediakan perintah untuk melihat perangkat keras tanpa membuka casing, karena hampir semua perangkat direpresentasikan sebagai file perangkat di /dev.

    Linux memperlakukan hampir semuanya sebagai file. Hard disk? File. Partisi? File. Keyboard? File. Konsep "semua adalah file" inilah yang membuat Linux konsisten dan bisa diotomatisasi dengan mudah.

    Perintah melihat perangkat keras

    # Informasi lengkap perangkat (dmesg sudah lewat, yang ini real-time) lsblk # daftar disk + partisi lspci # perangkat PCI (LAN, VGA, NVMe) lsusb # perangkat USB lscpu # CPU: core, arsitektur, vt free -h # RAM & swap df -h # kapasitas partisi dmesg | tail -30 # pesan kernel terbaru
    File perangkat utama di /dev: /dev/sda = disk pertama (SATA/USB); /dev/sda1 = partisi pertamanya; /dev/nvme0n1 = disk NVMe; /dev/ttyUSB0 = perangkat serial. Nomor major menunjukkan jenis driver, nomor minor menunjukkan instance.
    Nama /dev/sda bisa berubah saat boot (misal disk kedua jadi sda). Itulah sebabnya konfigurasi modern memakai UUID atau LABEL (dibahas di Modul 4), bukan nama perangkat.
    Urutan penamaan disk Linux: sda, sdb, sdc… sesuai urutan deteksi kernel. Partisi diberi nomor: sda1, sda2… Untuk disk GPT lama, partisi >4 memakai nomor yang sama (tidak seperti MBR).

    Mengelola modul kernel

    lsmod # daftar modul yang dimuat modinfo e1000e # info modul tertentu lsmod | grep e1000 # cek modul driver NIC terpasang? modprobe -r e1000e # lepas modul (perlu root)

    1.2 Proses Booting Linux

    Urutan boot Linux modern (firmware UEFI) kira-kira:

    TahapYang terjadiKeterangan
    1. FirmwareUEFI/BIOS menyalakan mesin, tes mandiri (POST)UEFI membaca efibootmgr untuk menemukan bootloader
    2. BootloaderGRUB2 dimuatMenu GRUB & memuat kernel (/boot/grub/grub.cfg)
    3. KernelKernel memuat & initramfs/boot/vmlinuz-* + /boot/initrd.img-*
    4. Init (PID 1)systemd dijalankansystemd mulai mengelola service
    5. TargetTarget default dimuatgraphical.target (desktop) / multi-user.target (server)
    # Lihat bootloader GRUB yang aktif grub-install --version cat /boot/grub/grub.cfg | head ls /boot # kernel & initrd yang tersedia
    GRUB2 adalah bootloader standar Linux. Konfigurasinya dihasilkan dari /etc/default/grub lalu dibangun ulang dengan update-grub (Debian/Ubuntu) atau grub2-mkconfig (RHEL). initramfs (initrd) adalah "kernel sementara" yang memuat driver agar disk root bisa diakses.
    Boot itu seperti membangunkan rumah: UEFI menyalakan listrik (POST), GRUB membuka pintu garasi dan memanggil mobil (kernel), initramfs adalah sopir yang memastikan ban (driver disk) siap, lalu systemd — asisten rumah — menghidupkan semua peralatan (service) satu per satu.

    1.3 Systemd & Target

    systemd adalah init system (PID 1) modern yang mengelola booting, layanan (units), log, timer, dan power management. Ia menggantikan SysV init. Perintah utamanya: systemctl.

    Unit & status service

    systemctl status ssh # status + log terakhir systemctl start|stop|restart ssh # kendalikan service systemctl enable|disable ssh # ikut boot atau tidak systemctl enable --now ssh # aktifkan + langsung jalankan systemctl is-active ssh # aktif? (active/inactive) systemctl is-enabled ssh # ikut boot? (enabled/disabled) systemctl list-units --type=service # semua service systemctl list-unit-files | head # semua unit terpasang

    Target (pengganti runlevel)

    TargetMirip runlevelKegunaan
    poweroff.target0Matikan mesin
    rescue.target1 / sMode pemeliharaan (single user, tanpa jaringan)
    multi-user.target3Server: teks penuh, tanpa GUI
    graphical.target5Desktop dengan GUI
    reboot.target6Restart
    systemctl get-default # target default saat ini systemctl set-default multi-user.target # jadikan server tanpa GUI systemctl isolate rescue.target # pindah sekarang (hati-hati) systemctl list-dependencies multi-user.target | head # apa saja yang ikut
    systemctl isolate rescue.target dari sesi remote akan memutus jaringan & hanya bisa dipulihkan dari konsol fisik/serial. Jangan lakukan tanpa akses fisik.

    1.4 Menutup & Menyalakan Ulang

    shutdown -h now # matikan sekarang shutdown -r +5 # restart 5 menit lagi shutdown -c # batalkan shutdown terjadwal reboot / poweroff # cepat, setara perintah di atas systemctl reboot / systemctl poweroff # via systemd
    Di server produksi, matikan layanan database dulu ( systemctl stop postgresql) sebelum reboot agar data di-flush rapi — walau systemd modern sudah melakukan unmount & sync secara tertib.

    ✅ Cek Pemahaman — Modul 1

    1. Perintah untuk melihat daftar disk dan partisi adalah?

    Jawaban: lsblk. Untuk detail partisi per blok, tambahkan lsblk -f (menampilkan UUID & filesystem).

    2. Apa peran initramfs dalam proses boot?

    Jawaban: Memuat driver (modul) yang dibutuhkan agar kernel bisa membaca disk root (misal driver SCSI/NVMe dan filesystem), sebelum filesystem asli di-mount. Tanpa initramfs, kernel kecil tidak bisa mengakses disk.

    3. Target systemd manakah yang dipakai server tanpa GUI?

    Jawaban: multi-user.target. Setel default dengan systemctl set-default multi-user.target.

    4. Bedakan systemctl start dan systemctl enable.

    Jawaban: start menjalankan service sekarang (sesi berjalan); enable mendaftarkan service agar ikut boot otomatis. Kombinasi: systemctl enable --now ssh.

    🧪 Lab 1 — Kenali Mesin Barumu

    1. Jalankan lsblk dan df -h. Catat nama disk & partisi, dan berapa persen penuh /.
    2. Jalankan lscpu dan free -h. Catat jumlah core & kapasitas RAM.
    3. Baca cat /etc/os-release — distro & versi apa yang kamu pakai?
    4. Lihat kernel yang berjalan: uname -r dan daftar kernel di ls /boot.
    5. Tentukan target default: systemctl get-default. Apakah sesuai jenis mesinmu (server/desktop)?

    Modul 2 — Instalasi & Manajemen PaketPartisi, dua keluarga paket (dpkg/APT dan RPM/YUM), serta pustaka

    2.1 Partisi & Skema

    Saat menginstal Linux kamu diminta membuat partisi — pembagian logis dari disk. Ada dua skema tabel partisi: MBR (tua, maksimal 4 partisi primer) dan GPT (modern, 128 partisi, wajib untuk UEFI). Tiga partisi yang umum dibuat:

    PartisiMount pointKegunaan
    EFI System Partition/boot/efiFile boot UEFI (FAT32, wajib untuk UEFI boot)
    Root/Semua data utama sistem
    SwapswapRuang cadangan saat RAM penuh
    (opsional) Home/homeData user terpisah dari sistem (aman saat upgrade)
    Untuk server: partisi / dan swap adalah minimum. Untuk database, umumnya ada partisi khusus /var/lib/postgresql atau /srv agar log/data bisa tumbuh tanpa memenuhi partisi root.
    # Lihat skema partisi saat ini lsblk -f fdisk -l # tabel partisi lengkap (perlu root) parted -l # alternatif modern
    Jangan menjalankan fdisk tanpa parameter pada disk yang masih dipakai — perintahnya interaktif dan bisa menghapus partisi. Latih di VM saja.

    2.2 dpkg & APT (Debian/Ubuntu)

    Keluarga Debian memakai dpkg sebagai pengelola paket tingkat rendah dan APT (Advanced Package Tool) sebagai lapisan yang menangani dependensi dan repositori. Paket berformat .deb.

    # APT — update index dulu, lalu upgrade apt update # perbarui daftar paket dari repo apt upgrade # naikkan versi paket terpasang apt install nginx # pasang paket + otomatis dependensinya apt remove nginx # hapus paket (konfigurasi tersisa) apt purge nginx # hapus paket + konfigurasinya apt search webserver # cari paket apt show nginx # info rinci paket apt autoremove # bersihkan dependensi tak terpakai

    dpkg — operasi langsung (tanpa dependensi)

    dpkg -i paket.deb # instal file .deb (tak selesaikan dependensi) dpkg -r nama # hapus paket dpkg -l | head # daftar paket terpasang dpkg -s nginx # status paket terpasang dpkg -L nginx # file apa saja yang diinstal paket dpkg -S /etc/nginx/nginx.conf # file itu punya paket apa
    dpkg itu seperti membawa koper sendiri: kamu pasang paket satu per satu dan harus tahu sendiri barang yang belum ada. apt seperti toko online: ia memeriksa daftar belanjaan (dependensi) dan mengirim semuanya sekaligus.
    Saat apt gagal dengan "unmet dependencies", jalankan apt --fix-broken install lalu apt update lagi. File daftar repo berada di /etc/apt/sources.list dan /etc/apt/sources.list.d/.

    2.3 RPM & YUM/DNF (RHEL)

    Keluarga Red Hat (RHEL, Rocky, AlmaLinux, Fedora) memakai RPM untuk paket tingkat rendah (format .rpm) dan DNF (pengganti yum) sebagai pengelola dependensi.

    # DNF (Fedora/RHEL 9+, Rocky/Alma 9+) dnf update # perbarui paket dnf install nginx # pasang dnf remove nginx # hapus dnf search nginx # cari dnf info nginx # info paket dnf autoremove # bersihkan dependensi tak terpakai
    # RPM — operasi langsung rpm -ivh paket.rpm # instal file .rpm rpm -qa | head # daftar semua paket terpasang rpm -qi nginx # info paket terpasang rpm -ql nginx # file milik paket rpm -qf /etc/nginx/nginx.conf # file itu milik paket apa
    Perbandingan cepat: Debian paket = .deb (dpkg/apt); RHEL paket = .rpm (rpm/dnf). Sintaks keduanya sangat mirip — yang paling berbeda adalah nama alat dan lokasi file konfigurasi. LPIC-1 menguji kedua keluarga.

    2.4 Pustaka & Dependensi

    Banyak program dijalankan dengan bantuan pustaka bersama (shared libraries) — kode yang dipakai banyak program agar tidak perlu diduplikasi. Pustaka berformat .so (Linux) dan disimpan di /lib, /usr/lib. Perintah untuk memeriksa pustaka:

    ldd /usr/bin/curl # pustaka yang dipakai program ldconfig -p | head # daftar pustaka yang dikenal sistem ldconfig # segarkan cache setelah tambah pustaka (root) find /usr/lib -name "*.so" | head # cari pustaka
    Saat kompilasi manual (misal ./configure && make) gagal dengan "cannot find -lxxx", berarti pustaka pengembangan (paket *-dev / *-devel) belum terpasang. Pasang build-essential (Debian) atau "Development Tools" (RHEL) untuk kumpulan tool dasar.
    Selalu pasang paket lewat apt/dnf bila tersedia, bukan kompilasi manual. Keuntungan: manajemen versi, dependensi otomatis, dan keamanan (update cepat).

    ✅ Cek Pemahaman — Modul 2

    1. Di Debian/Ubuntu, perintah untuk memasang paket beserta dependensinya?

    Jawaban: apt install <nama>. APT menangani dependensi secara otomatis; dpkg -i tidak.

    2. Bedakan apt remove dan apt purge.

    Jawaban: remove menghapus program tapi menyimpan file konfigurasi; purge menghapus juga konfigurasinya.

    3. Paket berformat apa yang dipakai keluarga Red Hat, dan alatnya?

    Jawaban: Format .rpm; alat tingkat rendah rpm, pengelola dependensi dnf (sebelumnya yum).

    4. Perintah untuk melihat pustaka yang dipakai sebuah program?

    Jawaban: ldd <program>, misal ldd /usr/bin/curl.

    🧪 Lab 2 — Pasang Web Server Pertamamu

    1. Perbarui sistem: sudo apt update lalu sudo apt upgrade -y (Debian/Ubuntu) atau sudo dnf update -y.
    2. Pasang nginx: sudo apt install nginx -y.
    3. Jalankan & aktifkan: sudo systemctl enable --now nginx.
    4. Cek dengan systemctl status nginx dan buka curl localhost — seharusnya muncul halaman default.
    5. Latih dpkg -L nginx untuk melihat file apa saja yang terpasang.

    Modul 3 — Perintah GNU & UnixShell, file, stream & pipe, regex, proses, dan penyunting teks

    3.1 Shell & Terminal

    Shell adalah program yang menerima perintah dan menjalankannya. Shell default di hampir semua distro adalah Bash (bash). Kamu berinteraksi dengannya lewat terminal (emulator) atau SSH. Setiap perintah yang diketik akan dijalankan sebagai proses.

    # Identitas shell echo $SHELL # shell aktif echo $HOME # direktori rumah whoami # user aktif id # uid/gid + grup hostname # nama mesin pwd # direktori aktif
    PATH adalah daftar direktori (dipisah :) tempat shell mencari perintah. Kalau perintah "command not found", padahal file ada, periksa echo $PATH. Cek lokasi perintah dengan which nginx.

    3.2 Navigasi & File

    cd /etc # pindah direktori ls -lah /etc # daftar isi + detail + hidden mkdir -p a/b/c # buat direktori bertingkat touch file.txt # buat file kosong / update timestamp cp -r src dst # salin rekursif mv a b # pindah / ganti nama rm -rf dir # hapus rekursif & paksa — HATI-HATI cat file # tampilkan isi file less file # baca file dengan navigasi (q untuk keluar) head -n 5 file # 5 baris pertama tail -n 10 file # 10 baris terakhir tail -f /var/log/nginx/access.log # ikuti log real-time
    rm -rf dengan / atau ~ salah ketik adalah bencana klasik. Latih kebiasaan: ketik ls dulu, lalu gunakan path penuh, dan pertimbangkan rm -i (konfirmasi) saat ragu.

    3.3 Stream, Pipe & Filter

    Setiap perintah punya tiga stream standar: stdin (0, input), stdout (1, output normal), stderr (2, pesan error). Kamu bisa mengarahkan stream ke file (redirection) dan menyambung output satu perintah ke input yang lain (pipe |).

    # Redirection ls > daftar.txt # tulis stdout ke file (timpah) ls >> daftar.txt # tulis stdout, tambahkan di akhir cmd 2> err.log # arahkan stderr ke file cmd > out 2>&1 # stdout & stderr ke file yang sama # Pipe — sambungkan perintah ls -la | grep "txt" # cari baris berisi "txt" ps aux | wc -l # hitung jumlah proses cat log | head -20 | tail -5 # potong & potong lagi
    Urutan operator penting: > menimpa, >> menambah, 2> stderr, >&1 gabung ke stdout, | menyambung. Yang sering salah: mengetik 2>&1 setelah file tujuan (harus cmd > file 2>&1).

    Filter dasar

    grep "error" log.txt # cari pola dalam file grep -i "error" log.txt # abaikan besar/kecil huruf grep -c "error" log.txt # hitung baris yang cocok grep -rn "password" /etc # cari rekursif + nomor baris sort file # urutkan uniq file # hilangkan duplikat berurutan cut -d: -f1 /etc/passwd # potong kolom (pisah ':') wc -l file # hitung baris/kata/karakter tr 'a-z' 'A-Z' < file # ubah huruf
    Pola umum: cut + sort + uniq -c untuk menghitung kemunculan. Contoh analisis log sederhana: grep "GET /" access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn | head

    3.4 Regex & grep/sed

    Regex (regular expression) adalah pola pencocokan teks. Ini keterampilan inti untuk admin. Karakter penting: . (karakter apa saja), * (0+ pengulangan), + (1+), ? (0–1), ^ (awal baris), $ (akhir baris), [abc] (kelas karakter), \d (digit), \s (spasi), (...) (grup).

    # grep dengan regex grep -E "^(user|root):" /etc/passwd # baris diawali user: atau root: grep -E "[0-9]{3}" data.txt # baris berisi 3 digit grep -E "\.(php|html)$" file # diakhiri .php atau .html
    # sed — stream editor (mengubah teks) sed -n '5,10p' file # cetak baris 5–10 sed 's/error/warning/g' file # ganti semua "error"→"warning" sed -i 's/old/new/' file # edit file langsung (in-place) sed '/^#/d' config.conf # hapus baris komentar
    Tanpa -i, sed hanya mencetak hasil ke layar (file tidak berubah). Dengan -i, file langsung dimodifikasi — backup dulu bila perlu: sed -i.bak 's/a/b/' file.

    3.5 Proses & Prioritas

    Proses adalah program yang sedang berjalan. Memahami daftar proses dan membunuh/mengatur prioritasnya adalah keseharian admin.

    ps aux # semua proses, format BSD ps -ef # semua proses, format standard ps aux | grep nginx # cari proses nginx top / htop # monitor interaktif pgrep -a nginx # PID proses dengan nama kill PID # kirim sinyal TERM (minta berhenti) kill -9 PID # paksa bunuh (sinyal KILL) pkill -u user # bunuh semua proses milik user jobs / bg / fg # kelola proses latar belakang

    Prioritas & nice

    nice -n 10 command # jalankan dengan prioritas rendah renice 10 -p PID # ubah prioritas proses berjalan (root) top # kolom NI = nice value
    Nilai nice berkisar −20 (prioritas tertinggi) sampai +19 (terendah). Default 0. Untuk proses batch besar yang tidak mendesak (misal kompresi backup), jalankan dengan nice agar tidak mengganggu layanan produksi.
    Gunakan kill -l untuk melihat daftar semua sinyal. Yang paling umum: 1 HUP (reload config), 15 TERM (berhenti wajar), 9 KILL (paksa). Selalu coba TERM dulu.

    3.6 Vim & Penyunting Teks

    Konfigurasi server hampir selalu mengubah file teks. Penyunting teks konsol yang paling universal adalah vim (atau vi). Alternatif yang lebih ramah pemula: nano.

    # nano — mudah, langsung ketik nano /etc/nginx/nginx.conf # Ctrl+O simpan, Ctrl+X keluar # vim — dua mode: perintah & insert vim file.txt # i = masuk mode INSERT (ketik); Esc = kembali ke mode perintah # :w simpan, :q keluar, :wq simpan & keluar, :q! batal keluar
    Vim dijuluki "editor yang sulit dipelajari tapi tak pernah ingin ditinggalkan". Yang wajib dihafal dulu: i (insert), Esc, :w, :q, :wq, dan gerakan dasar h j k l.

    ✅ Cek Pemahaman — Modul 3

    1. Apa perbedaan stdout dan stderr?

    Jawaban: stdout (fd 1) membawa output normal program; stderr (fd 2) membawa pesan error. Keduanya bisa diarahkan terpisah: cmd > out 2> err.

    2. Tulis perintah untuk menghitung berapa banyak user di /etc/passwd.

    Jawaban: cat /etc/passwd | wc -l (satu user per baris) atau wc -l /etc/passwd.

    3. Apa fungsi sed -i 's/http/https/' nginx.conf?

    Jawaban: Mengganti teks http menjadi https (kemunculan pertama per baris) langsung di file (karena -i).

    4. Bagaimana cara menjalankan proses dengan prioritas rendah?

    Jawaban: nice -n 10 <perintah>. Untuk proses berjalan: renice 10 -p <PID>.

    🧪 Lab 3 — Pipa & Analisis Log

    1. Buat beberapa baris contoh: echo "user1:berhasil" >> log.txt diulang beberapa kali dengan nilai berbeda.
    2. Hitung baris: wc -l log.txt.
    3. Ambil user dan hitung kemunculan: cut -d: -f1 log.txt | sort | uniq -c | sort -rn.
    4. Cari hanya yang "berhasil": grep berhasil log.txt.
    5. Latih vim: buka file kosong, ketik beberapa baris, simpan dengan :wq.

    Modul 4 — Filesystem & FHSHierarki standar, mount, izin, link, dan pencarian file

    4.1 Hierarki FHS

    FHS (Filesystem Hierarchy Standard) adalah aturan di mana file diletakkan. Memahami FHS memudahkan menemukan konfigurasi, log, dan binary di mesin mana pun.

    DirektoriIsi
    /bin & /usr/binProgram (binary) penting untuk semua user
    /sbin & /usr/sbinProgram administrasi (root)
    /etcFile konfigurasi sistem
    /homeDirektori rumah user
    /rootDirektori rumah root
    /varData berubah: log, www, mail, cache
    /tmpFile sementara (dibersihkan saat boot)
    /devFile perangkat
    /proc & /sysVirtual: info kernel & hardware
    /bootKernel, initrd, konfigurasi bootloader
    /optProgram pihak ketiga terpisah
    /srvData layanan (web, ftp)
    Aturan emas: konfigurasi sistem di /etc, log di /var/log, data user di /home, web server di /var/www atau /srv.

    4.2 Partisi, Mount & UUID

    Sebuah partisi harus di-mount (dipasang) ke sebuah direktori agar bisa diakses. Mount saat boot diatur di /etc/fstab. Setiap partisi diidentifikasi unik lewat UUID.

    mount /dev/sdb1 /mnt/data # pasang partisi manual umount /mnt/data # lepas blkid # tampilkan UUID semua partisi lsblk -f # + filesystem & label cat /etc/fstab # aturan mount saat boot
    # Contoh isi /etc/fstab UUID=8a2f-5b1c / ext4 defaults 0 1 UUID=9c31-22aa /home ext4 defaults 0 2 UUID=45b0-8a1d none swap sw 0 0
    Kesalahan pada /etc/fstab bisa membuat sistem tidak bisa boot (masuk ke rescue). Selalu uji entry baru dengan mount -a sebelum reboot.
    Periksa isi fstab yang valid: findmnt --verify (dari util-linux). Ini memvalidasi semua baris /etc/fstab tanpa me-mount.

    4.3 Izin, Owner & ACL

    Linux membatasi akses file dengan izin (permission). Ada 3 entitas (owner / group / other) × 3 izin (read / write / execute), ditulis sebagai rwxr-xr-- atau angka oktal 755.

    IzinNilaiArti
    r4Baca isi
    w2Ubah isi
    x1Eksekusi (file) / masuk (direktori)
    chmod 755 script.sh # owner rwx, group r-x, other r-x chmod u+x script.sh # tambah execute untuk owner chown user:group file # ganti owner:group chown -R user:group dir/ # rekursif chgrp group file # ganti group saja ls -l file # lihat izin stat file # rinci izin + timestamps
    Menghitung izin oktal: jumlahkan nilai. rwx = 7, r-x = 5, r-- = 4. Direktori web umumnya 755; file konfigurasi rahasia 600; skrip eksekusi 755.

    ACL — izin lanjutan

    getfacl file # lihat ACL setfacl -m u:devops:rw file # beri user devops rw setfacl -m g:web:r file # beri grup web r setfacl -x u:devops file # hapus ACL user
    ACL berguna saat file perlu diakses satu user/group tertentu tanpa mengubah owner. File yang punya ACL akan menampilkan tanda + pada ls -l.

    4.4 Symlink & Hard Link

    ln -s /target /path/link # symlink (soft link) ln /target /path/hard # hard link (file yang sama)
    Soft link (symlink): "jalan pintas" — file yang menunjuk ke path lain. Bisa lintas filesystem, dan putus bila target dihapus. Hard link: nama tambahan ke data yang sama (satu inode). Tidak bisa lintas filesystem; tetap valid meski salah satu nama dihapus.
    Cek dengan ls -l: symlink ditandai huruf l di awal dan panah →. Hard link ditandai kolom link count > 1.

    4.5 Mencari File: find & locate

    find /etc -name "*.conf" # cari berdasarkan nama find /var -size +100M # file lebih besar 100MB find / -type f -perm 777 # file berizin terbuka penuh find /home -user budi # file milik user find /tmp -mtime +7 -delete # hapus file 7+ hari (hati-hati) locate nginx.conf # cepat, dari indeks (updatedb)
    find selalu segar tapi lambat (memindai disk); locate sangat cepat karena memakai indeks (basis data updatedb), tapi bisa basi untuk file baru. Pakai find saat kepastian penting.

    ✅ Cek Pemahaman — Modul 4

    1. Di direktori mana file konfigurasi sistem diletakkan?

    Jawaban: /etc. Log ada di /var/log.

    2. Apa nilai oktal dari izin rwxr-xr--?

    Jawaban: 754 (7+5+4).

    3. Bedakan soft link dan hard link.

    Jawaban: Soft link menunjuk ke path (bisa lintas filesystem, putus bila target hilang). Hard link menunjuk ke inode yang sama (tidak bisa lintas filesystem, tetap valid).

    4. Perintah mencari file lebih besar dari 500MB di /var?

    Jawaban: find /var -size +500M.

    5. Mengapa mount saat boot memakai UUID, bukan /dev/sdb1?

    Jawaban: Nama perangkat /dev/sdX bisa berubah antar boot; UUID adalah identitas tetap partisi sehingga entry fstab tidak "patah".

    🧪 Lab 4 — Eksplorasi Filesystem

    1. Jelajahi ls /etc, ls /var/log, ls /bin. Kenali isinya.
    2. Periksa fstab: cat /etc/fstab dan cek valid: findmnt --verify.
    3. Buat file, ubah izin: touch coba.txt lalu chmod 640 coba.txt dan ls -l coba.txt.
    4. Buat symlink: ln -s /etc/passwd passwd-link lalu cat passwd-link.
    5. Temukan semua file konfigurasi nginx: find /etc/nginx -type f.

    Modul 5 — Shell & Shell ScriptingVariabel, environment, percabangan, perulangan, fungsi, dan skrip nyata

    5.1 Variabel & Environment

    Shell menyimpan nilai dalam variabel. Variabel yang diwariskan ke program anak disebut environment variable. Cara membacanya: $NAMA atau ${NAMA} (disarankan saat di dalam teks).

    # Definisi variabel lokal nama="Budi" echo "Halo $nama" # → Halo Budi # Environment variable (diwariskan ke anak) export EDITOR=vim env | head # lihat semua env var echo $PATH # path pencarian perintah # Variabel khusus shell echo $? # exit code perintah terakhir (0 = sukses) echo $$ # PID shell saat ini echo $# # jumlah argumen skrip echo $0 # nama skrip
    Jangan beri spasi di sekitar = saat menetapkan variabel (nama="Budi" benar; nama = "Budi" salah — itu akan menjalankan perintah nama). Kutip ganda "$var" mengembangkan variabel; kutip tunggal '$var' tidak.

    5.2 Kondisi & Perulangan

    # if-then-else if [ -f /etc/nginx/nginx.conf ]; then echo "konfigurasi ada" else echo "belum terpasang" fi
    # Perulangan for for ip in 192.168.1.1 192.168.1.2 192.168.1.3; do ping -c 1 $ip > /dev/null && echo "$ip hidup" || echo "$ip mati" done # Perulangan while (baca baris file) while read baris; do echo "Baris: $baris" done < /etc/hostname
    Operator tes [ ... ] yang umum: -f file (file ada & reguler), -d dir (direktori ada), -z str (string kosong), str1 = str2 (string sama), n1 -gt n2 (angka lebih besar), ! kondisi (negasi), -a (dan), -o (atau). Versi modern: [[ ... ]] mendukung &&/||.

    5.3 Fungsi & Skrip Real

    # Fungsi cek_port() { ss -tln | grep -q ":$1 " && echo "port $1 terbuka" || echo "port $1 tertutup" } cek_port 80 cek_port 22

    Sebuah skrip nyata yang berguna untuk backup sederhana:

    #!/bin/bash # backup-web.sh — backup /var/www ke /backup dengan nama bertanggal set -e # berhenti bila ada error SRC=/var/www DST=/backup STAMP=$(date +%Y%m%d-%H%M) mkdir -p "$DST" tar -czf "$DST/www-$STAMP.tar.gz" -C / var/www echo "Backup selesai: $DST/www-$STAMP.tar.gz"
    # Membuat skrip eksekusi & menjalankannya chmod +x backup-web.sh ./backup-web.sh # atau: bash backup-web.sh
    Baris pertama #!/bin/bash (shebang) memberitahu kernel shell mana yang menjalankan skrip. Selalu mulai skrip dengan set -e dan set -u (gagal pada variabel tak terdefinisi) untuk menulis skrip yang aman. Jalankan bash -n skrip.sh untuk cek sintaks tanpa menjalankan.

    ✅ Cek Pemahaman — Modul 5

    1. Apa arti echo $??

    Jawaban: Menampilkan exit code perintah yang terakhir dijalankan. 0 = sukses, selain itu = gagal.

    2. Mengapa nama = "Budi" salah?

    Jawaban: Ada spasi di sekitar =. Shell menafsirkannya sebagai menjalankan perintah nama dengan argumen — bukan menetapkan variabel.

    3. Tulis loop yang mencetak angka 1 sampai 5.

    Jawaban: for n in 1 2 3 4 5; do echo $n; done atau for n in $(seq 1 5); do echo $n; done.

    4. Apa fungsi shebang #!/bin/bash?

    Jawaban: Menunjukkan interpreter yang dipakai untuk menjalankan skrip (bash), sehingga skrip bisa dieksekusi langsung (./skrip.sh).

    🧪 Lab 5 — Tulis Skrip Pertamamu

    1. Buat file nano info-server.sh berisi shebang lalu perintah-perintah: hostname, uptime, free -h, df -h.
    2. Simpan (Ctrl+O, Enter), keluar (Ctrl+X).
    3. Jadikan eksekusi: chmod +x info-server.sh.
    4. Jalankan ./info-server.sh dan amati outputnya.
    5. Tambahkan loop for yang mengecek 3 host (misal localhost dan 2 IP) dengan ping, lalu jalankan kembali.

    Modul 6 — User, Grup & Tugas TerjadwalAkun lokal, sudo, serta penjadwalan dengan cron dan at

    6.1 User & Grup Lokal

    Setiap proses di Linux dijalankan atas nama user. User dikelompokkan dalam grup. Data user tersimpan di /etc/passwd, sandi (hash) di /etc/shadow, dan grup di /etc/group.

    useradd -m -s /bin/bash budi # buat user + home + shell passwd budi # set sandi usermod -aG sudo budi # tambahkan ke grup sudo (admin) userdel -r budi # hapus user + home-nya groupadd devops # buat grup groupdel devops # hapus grup groups budi # daftar grup user id budi # uid/gid + grup
    Kolom di /etc/passwd: user:x:UID:GID:deskripsi:home:shell. UID 0 adalah root. UID < 1000 umumnya akun sistem; ≥ 1000 akun manusia. File /etc/shadow hanya bisa dibaca root — di situlah hash sandi (jangan pernah dibagikan).
    Sandi tidak pernah disimpan sebagai teks biasa. Linux menyimpan hash (mis. SHA-512/argon2) di /etc/shadow. Saat login, hash input dibandingkan dengan hash tersimpan.

    6.2 Sudo & Hak Istimewa

    Best practice keamanan: jangan login sebagai root. Pakai user biasa, dan naikkan hak lewat sudo. Aturan sudo ada di /etc/sudoers (edit dengan visudo, bukan nano langsung).

    sudo whoami # jalankan sebagai root sudo -i # jadi root (shell root) sudo -u budi command # jalankan sebagai user lain sudo visudo # edit /etc/sudoers (aman)
    # Contoh baris /etc/sudoers budi ALL=(ALL:ALL) ALL # budi boleh semua (admin penuh) %devops ALL=(ALL) /usr/bin/systemctl # grup devops hanya boleh systemctl
    Hak istimewa yang terlalu lebar adalah risiko. Beri user perintah spesifik yang mereka butuhkan, bukan ALL. Log semua aksi sudo bisa dilihat di journalctl _COMM=sudo.

    6.3 Cron & At

    cron menjalankan tugas berulang secara terjadwal. Konfigurasi per-user: crontab -e. Format lima kolom: menit jam hari-tanggal bulan hari-minggu.

    # Format cron: menit jam hari bulan hari-minggu perintah # Backup setiap hari pukul 02:30 30 2 * * * /root/backup-web.sh # Restart layanan setiap hari Minggu 05:00 0 5 * * 0 systemctl restart postfix # Tiap 15 menit cek disk */15 * * * * df -h >> /var/log/df.log
    crontab -e # edit crontab user saat ini crontab -l # tampilkan crontab -r # hapus systemctl status cron # cek daemon cron aktif grep CRON /var/log/syslog # log eksekusi cron
    Aturan sistem di /etc/crontab punya kolom tambahan user sebelum perintah (karena satu file untuk semua user). Direktori khusus: /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.weekly/ — skrip yang diletakkan di sana jalan sesuai jadwalnya.
    * = semua nilai, */15 = tiap 15 satuan, 1,15 = 1 dan 15, 1-5 = rentang 1 sampai 5. Kalender cron mudah salah — gunakan crontab.guru untuk memastikan.

    at — tugas sekali jalan

    at now + 1 hour # jalankan perintah 1 jam lagi at 18:00 # jalankan pukul 18:00 atq # daftar tugas terjadwal atrm N # batalkan tugas nomor N
    Saat cron menjalankan skrip, environment-nya minimal (PATH pendek). Dalam skrip, selalu pakai path absolut untuk perintah (mis. /usr/bin/rsync) atau set PATH di awal skrip agar tidak "command not found" tanpa alasan.

    ✅ Cek Pemahaman — Modul 6

    1. Perintah membuat user baru beserta home directory?

    Jawaban: useradd -m -s /bin/bash <nama> lalu set sandi dengan passwd <nama>.

    2. Di file mana hash sandi user disimpan?

    Jawaban: /etc/shadow (hanya bisa dibaca root).

    3. Tulis entry cron untuk backup setiap hari pukul 02:30.

    Jawaban: 30 2 * * * /root/backup-web.sh.

    4. Apa fungsi visudo?

    Jawaban: Membuka /etc/sudoers di editor yang melakukan validasi sintaks sebelum menyimpan — mencegah file rusak yang bisa membuat sudo tidak berfungsi.

    🧪 Lab 6 — User, Sudo & Jadwal Backup

    1. Buat user sudo useradd -m -s /bin/bash operator dan beri sandi.
    2. Tambahkan ke grup sudo: sudo usermod -aG sudo operator.
    3. Uji: login sebagai operator (su - operator) lalu sudo whoami → harus root.
    4. Buat skrip backup-web.sh dari Modul 5 dan letakkan di /root.
    5. Jadwalkan: sudo crontab -e lalu tambahkan 30 2 * * * /root/backup-web.sh. Verifikasi dengan sudo crontab -l.

    Modul 7 — Layanan EsensialWaktu & NTP, log dengan journalctl, printing, dan lokalisasi

    7.1 Waktu & NTP

    Server yang salah waktu adalah sumber banyak masalah: log tidak sinkron, sertifikat TLS gagal, cron berjalan di jam keliru. Solusinya: sinkronkan waktu ke server NTP.

    timedatectl # status waktu & zona timedatectl set-timezone Asia/Jakarta # set zona waktu timedatectl set-ntp true # aktifkan sinkronisasi NTP systemctl status systemd-timesyncd # cek sinkronisasi date # tampilkan tanggal & waktu
    Zona waktu disimpan sebagai symlink dari /etc/localtime ke zona di /usr/share/zoneinfo/. Waktu hardware (RTC) diatur ke UTC atau local — periksa timedatectl baris "RTC in local TZ".
    Untuk server yang sangat kritis (database, log forensik), pasang daemon chrony (systemctl enable --now chronyd / chrony) sebagai pengganti timesyncd — akurasinya lebih tinggi.

    7.2 Log & journalctl

    Log adalah catatan kejadian sistem. Linux modern menyimpan log terstruktur di journald dan menulisnya juga ke file teks di /var/log. Alat utamanya: journalctl (systemd) dan file log klasik.

    journalctl # semua log (systemd) journalctl -u nginx # log unit nginx journalctl -u nginx -f # ikuti real-time journalctl --since "1 hour ago" # log 1 jam terakhir journalctl -p err -b # error saja, boot ini journalctl --disk-usage # ukuran journal
    # File log klasik tail -f /var/log/syslog # log sistem (Debian/Ubuntu) tail -f /var/log/messages # log sistem (RHEL) tail -f /var/log/nginx/access.log # akses web tail -f /var/log/nginx/error.log # error web grep -i "error" /var/log/syslog | tail # filter
    Kesalahan umum saat memecahkan masalah: cari log di tempat yang tepat. Service systemd → journalctl -u <unit>. Nginx → /var/log/nginx/. Auth/login → /var/log/auth.log (Debian) atau /var/log/secure (RHEL).
    Untuk mempertahankan log melintasi reboot, konfigurasi journald persisten dengan membuat direktori /var/log/journal (secara default journald menyimpan ke RAM). Diatur di /etc/systemd/journald.conf.

    7.3 Print & Localization

    CUPS adalah sistem printing Linux. Kelola via web UI (port 631) atau perintah lp*. Untuk server, pengetahuan dasar printing cukup.

    lpstat -p # daftar printer lp -d Printer1 file.txt # cetak ke printer tertentu systemctl status cups # cek daemon printing lpadmin -x Printer1 # hapus printer

    Lokalisasi (locale)

    locale # tampilkan locale aktif localectl # info bahasa & keyboard localectl set-keymap us # set tata letak keyboard
    Locale menentukan bahasa, angka, tanggal, dan set karakter. Variabel utamanya: LANG, LC_ALL. Format Indonesia: id_ID.UTF-8. Periksa locale yang tersedia: locale -a.

    ✅ Cek Pemahaman — Modul 7

    1. Perintah melihat log unit systemd nginx secara real-time?

    Jawaban: journalctl -u nginx -f.

    2. Bagaimana menetapkan zona waktu Asia/Jakarta?

    Jawaban: timedatectl set-timezone Asia/Jakarta.

    3. Apa kegunaan file /var/log/auth.log (Debian)?

    Jawaban: Mencatat peristiwa autentikasi (login berhasil/gagal, sudo). Berguna mendeteksi percobaan masuk mencurigakan.

    4. Bagaimana menjadikan journald persisten?

    Jawaban: Buat /var/log/journal (atau ubah Storage=persistent di /etc/systemd/journald.conf), lalu systemctl restart systemd-journald.

    🧪 Lab 7 — Baca Log & Atur Waktu

    1. Lihat status waktu: timedatectl. Set zona waktu bila bukan Asia/Jakarta: sudo timedatectl set-timezone Asia/Jakarta.
    2. Buka log nginx: journalctl -u nginx -f (tekan Ctrl+C untuk berhenti).
    3. Buka log auth: sudo tail -f /var/log/auth.log — lalu dari terminal lain coba SSH masuk, amati baris baru.
    4. Cari error boot ini: journalctl -p err -b.
    5. Periksa locale: locale. Set keyboard: sudo localectl set-keymap us bila perlu.

    Modul 8 — Jaringan LinuxIP, routing, DNS, konfigurasi persisten, dan troubleshooting

    8.1 IP, Route & DNS

    Server tanpa jaringan bukanlah server. Admin wajib bisa memeriksa dan mengubah alamat IP, gateway (route default), dan DNS — cepat, lewat perintah.

    ip addr show # alamat IP semua interface ip addr show enp0s3 # interface tertentu ip route # tabel routing (default = gateway) ip link # status interface (up/down) ss -tlnp # port yang dibuka (listening) cat /etc/resolv.conf # DNS server yang dipakai hostnamectl # hostname & info sistem
    # Set IP sementara (hilang saat reboot) ip addr add 192.168.1.50/24 dev enp0s3 ip route add default via 192.168.1.1 ip link set enp0s3 up
    Pemetaan perintah lama→baru: ifconfig → ip addr; route → ip route; netstat → ss. Paket iproute2 adalah standar modern. (RHEL kadang menyediakan net-tools lama.)

    8.2 Konfigurasi Persisten

    Agar IP tidak hilang saat reboot, konfigurasi diletakkan di file sistem. Dua keluarga cara:

    DistroAlatLokasi config
    Debian/Ubuntunetplan (Ubuntu ≥18) / /etc/network/interfaces/etc/netplan/*.yaml
    RHEL/Rocky/Almanmcli / file ifcfg/etc/NetworkManager/, /etc/sysconfig/network-scripts/
    # Contoh netplan (Ubuntu) — /etc/netplan/01-netcfg.yaml network: version: 2 ethernets: enp0s3: dhcp4: no addresses: [192.168.1.50/24] routes: - to: default via: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1]
    # Terapkan netplan sudo netplan apply # terapkan tanpa reboot sudo netplan try # uji, batalkan otomatis bila gagal
    # nmcli (RHEL) — manajer jaringan nmcli device status # status interface nmcli connection show # profil koneksi nmcli con mod "System enp0s3" ipv4.addresses 192.168.1.50/24 ipv4.gateway 192.168.1.1 ipv4.method manual nmcli con up "System enp0s3" # terapkan
    Mengubah IP secara remote bisa memutus koneksi SSH-mu sendiri. Saat mengubah IP remote, sediakan akses kedua (konsol/VM) atau pakai netplan try / timeout agar dapat kembali bila gagal.
    Setelah mengubah konfigurasi, uji dulu: ip addr show dan ip route untuk memastikan alamat & gateway benar, lalu ping -c 3 1.1.1.1 untuk konektivitas internet.

    8.3 Troubleshooting Jaringan

    ping -c 4 8.8.8.8 # koneksi dasar (ICMP) traceroute 8.8.8.8 # jalur paket (Debian) / tracepath ss -tlnp # port mendengarkan dig example.com # query DNS detail host example.com # query DNS cepat nslookup example.com # alternatif getent hosts example.com # resolver sistem (files + dns) curl -I https://example.com # uji HTTP/HTTPS
    Urutan diagnosis: (1) ping gateway → masalah jaringan lokal? (2) ping 8.8.8.8 → masalah ke internet? (3) ping example.com → masalah DNS? (4) dig/getent → konfirmasi resolusi. (5) curl/ss → masalah di aplikasi/port.
    ss lebih baru dari netstat. Yang sering dipakai: ss -tlnp (TCP listening + program), ss -unap (UDP). Gunakan sudo ss -tlnp untuk melihat nama program.

    ✅ Cek Pemahaman — Modul 8

    1. Perintah melihat tabel routing?

    Jawaban: ip route (baris "default via …" adalah gateway).

    2. Apa pengganti modern dari ifconfig dan netstat?

    Jawaban: ip addr dan ss (dari paket iproute2).

    3. Bagaimana cara cek DNS server yang dipakai sistem?

    Jawaban: cat /etc/resolv.conf atau resolvectl status.

    4. Mengapa ping 8.8.8.8 sukses tapi ping google.com gagal?

    Jawaban: Koneksi IP jalan tapi resolusi DNS bermasalah. Cek /etc/resolv.conf, lalu uji dengan dig google.com.

    🧪 Lab 8 — Diagnosa Jaringan

    1. Tampilkan IP & routing: ip addr show, ip route.
    2. Uji bertahap: ping -c 3 <gateway>, ping -c 3 8.8.8.8, ping -c 3 google.com.
    3. Resolusi DNS: dig google.com dan getent hosts google.com.
    4. Lihat port listening: sudo ss -tlnp. Service apa yang membuka port 22 dan 80?
    5. Uji web: curl -I http://localhost.

    Modul 9 — SSH & Akses JauhKunci SSH, transfer file (scp/sftp/rsync), dan mengamankan daemon sshd

    9.1 SSH: Kunci & Koneksi

    SSH (port 22) adalah cara standar mengelola server Linux dari jarak jauh secara terenkripsi. Autentikasi dua cara: sandi atau pasangan kunci (lebih aman & disarankan).

    # Dari mesin klien (komputer kerja) ssh user@192.168.1.50 # koneksi dengan sandi ssh -p 2222 user@server # port kustom
    # Buat pasangan kunci (klien) ssh-keygen -t ed25519 -C "budi@laptop" # simpan default di ~/.ssh/id_ed25519 # Salin kunci publik ke server ssh-copy-id user@192.168.1.50 # otomatis tambah ke ~/.ssh/authorized_keys # Setelah itu, login tanpa sandi ssh user@192.168.1.50
    Kunci publik boleh disebar; kunci privat (id_ed25519) wajib dijaga (izin file chmod 600). Server menyimpan kunci publik user di ~/.ssh/authorized_keys. Pertama koneksi menampilkan fingerprint host — verifikasi agar tidak kena serangan man-in-the-middle.
    Edit ~/.ssh/config di mesin kerja untuk shortcut: Host prod → HostName 192.168.1.50, User operator, IdentityFile ~/.ssh/id_ed25519. Lalu cukup ketik ssh prod.

    9.2 SCP, SFTP & Rsync

    # scp — salin file lewat SSH scp file.txt user@server:/tmp/ # naik scp user@server:/tmp/file.txt ./ # turun scp -r folder/ user@server:/srv/ # rekursif
    # sftp — seperti FTP tapi lewat SSH sftp user@server # perintah: put, get, ls, bye
    # rsync — sinkronisasi inkremental (hemat bandwidth) rsync -avz ./user@server:/var/www/ # sinkron folder ke server rsync -avz --delete /var/www/ /backup/www/ # sinkron lokal + hapus kelebihan rsync -avz -e "ssh -p 2222" ./ user@server:/srv/ # lewat port SSH kustom
    Rsync hanya mengirim perbedaan file yang sudah ada, jadi sangat efisien untuk deploy berulang & backup. Opsi umum: -a arsip (pertahankan izin/timestamp), -v verbose, -z kompresi, --delete hapus file di tujuan yang tak ada di sumber.

    9.3 Hardening SSH

    Daemon SSH (sshd) adalah pintu masuk server — ia paling sering jadi sasaran serangan brute-force. Amankan dengan konfigurasi di /etc/ssh/sshd_config.

    # /etc/ssh/sshd_config — baris yang direkomendasikan Port 2222 # ubah dari default 22 PermitRootLogin no # larang login root via SSH PasswordAuthentication no # wajib kunci (jangan sandi) PubkeyAuthentication yes AllowUsers operator deployer # hanya user tertentu MaxAuthTries 3 # batas percobaan login ClientAliveInterval 300 # cek koneksi idle tiap 5 mnt
    # Setelah ubah, validasi & restart sshd -t # uji konfigurasi tanpa restart sudo systemctl restart ssh # Debian: unit ssh; RHEL: sshd
    Sebelum menonaktifkan PasswordAuthentication, PASTIKAN kunci ssh-copy-id sudah berhasil dan bisa login tanpa sandi. Kesalahan di sini mengunci akses remote selamanya (kecuali ada akses konsol).
    Jangan pernah mengunci diri karena salah port/perintah: selalu buka sesi kedua (ssh -p 2222) yang berhasil sebelum menutup sesi lama, atau gunakan sudo systemctl reload ssh untuk menerapkan tanpa memutus koneksi yang ada.

    ✅ Cek Pemahaman — Modul 9

    1. Di file mana kunci publik user disimpan di server?

    Jawaban: ~/.ssh/authorized_keys milik user yang bersangkutan.

    2. Perintah menyalin kunci publik ke server dengan sekali perintah?

    Jawaban: ssh-copy-id user@server.

    3. Apa keunggulan rsync dibanding scp untuk deploy berulang?

    Jawaban: Rsync hanya mengirim perbedaan file (inkremental), sehingga lebih cepat & hemat bandwidth; scp selalu mengirim seluruh file.

    4. Sebutkan dua opsi sshd_config untuk keamanan.

    Jawaban: Contoh: PermitRootLogin no, PasswordAuthentication no, MaxAuthTries 3, atau AllowUsers ….

    🧪 Lab 9 — SSH Kunci & Deploy

    1. Pastikan SSH aktif: systemctl status ssh.
    2. Dari mesin kerja: buat kunci ssh-keygen -t ed25519.
    3. Salin: ssh-copy-id user@192.168.1.50.
    4. Login tanpa sandi: ssh user@192.168.1.50.
    5. Salin folder lokal ke server: scp -r site/ user@server:/srv/, lalu ulangi dengan rsync -avz site/ user@server:/srv/ — amati perbedaan waktu kedua perintah.

    Modul 10 — Keamanan & Dasar HostingFirewall, aplikasi web di server, dan jembatan menuju cPanel hosting

    10.1 Firewall ufw / firewalld

    Firewall mengatur paket apa yang boleh masuk/keluar. Linux memakai nftables (penerus iptables) di balik layar; distro menyediakan lapisan yang ramah: ufw (Ubuntu/Debian) dan firewalld (RHEL).

    # ufw (Ubuntu/Debian) sudo ufw status # status & aturan sudo ufw allow 22 # izinkan SSH sudo ufw allow 80 # izinkan HTTP sudo ufw allow 443 # izinkan HTTPS sudo ufw allow from 192.168.1.0/24 # izinkan subnet tertentu sudo ufw enable # aktifkan firewall
    # firewalld (RHEL/Rocky/Alma) sudo systemctl enable --now firewalld sudo firewall-cmd --state sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --add-port=2222/tcp --permanent sudo firewall-cmd --reload # terapkan
    Aktifkan firewall setelah mengizinkan SSH (atau port SSH-mu), jika tidak kamu bisa terkunci di luar. Prinsip default-deny: hanya izinkan port yang dibutuhkan layanan.
    Selalu izinkan port SSH (22 atau port kustom) di firewall sebelum mengaktifkannya. Periksa port yang terbuka di sistem: sudo ss -tlnp — itulah daftar yang harus difilter.

    10.2 Aplikasi Web di Server

    Sebuah server web Linux khas berisi: nginx/apache (web server), PHP atau Node.js (bahasa aplikasi), MySQL/MariaDB (database), dan Let's Encrypt (HTTPS gratis). Mari pasang satu tumpukan sederhana.

    # Install LEMP (Linux + Nginx + MySQL + PHP) — Debian/Ubuntu sudo apt update sudo apt install -y nginx mysql-server php-fpm php-mysql sudo systemctl enable --now nginx mysql # Direktori web & file test sudo mkdir -p /var/www/instansicontoh echo "<h1>Halo dari Server Linux</h1>" | sudo tee /var/www/instansicontoh/index.html
    # Konfigurasi vhost nginx — /etc/nginx/sites-available/instansicontoh server { listen 80; server_name instansicontoh.id www.instansicontoh.id; root /var/www/instansicontoh; index index.html index.php; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php-fpm.sock; } }
    # Aktifkan vhost + uji sintaks sudo ln -s /etc/nginx/sites-available/instansicontoh /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
    Nginx memisahkan konfigurasi per situs: file di /etc/nginx/sites-available/ (tidak aktif) dan symlink di /etc/nginx/sites-enabled/ (aktif). RHEL memakai struktur berbeda (/etc/nginx/conf.d/). Selalu uji nginx -t sebelum reload.
    HTTPS adalah keharusan di era modern. Setelah vhost berjalan, pasang sertifikat gratis dengan Certbot: sudo apt install certbot python3-certbot-nginx lalu sudo certbot --nginx -d instansicontoh.id -d www.instansicontoh.id.

    10.3 Menuju cPanel Hosting

    Kamu sudah punya fondasi admin server Linux. Di dunia nyata, banyak situs di-hosting pada panel seperti cPanel yang menyediakan antarmuka grafis untuk hal-hal yang tadi kamu lakukan manual: membuat database, DNS, email, SSL, backup, dan file manager. Pahami persamaannya:

    Tugas di Linux manualDi cPanel
    useradd + homecPanel Account (akun hosting)
    Membuat database MySQLMySQL Databases
    Vhost nginx / virtual host ApacheAddon / Sub Domains
    /var/www + chmodFile Manager / FTP
    Konfigurasi DNS manualZone Editor
    sshd_config & kunciSSH Access
    Certbot HTTPSSSL/TLS Status (AutoSSL)
    Backup tar/rsyncBackup Wizard
    Postfix emailEmail Accounts
    Lanjutan: jika tujuanmu mengelola web hosting dengan panel, lanjutkan ke halaman berikutnya — Belajar cPanel Hosting. Fondasi Linux di halaman ini membuatmu memahami apa yang terjadi di balik panel, bukan sekadar klik sana-sini.

    ✅ Cek Pemahaman — Modul 10

    1. Perintah ufw untuk mengizinkan port 443?

    Jawaban: sudo ufw allow 443 (atau sudo ufw allow https).

    2. Mengapa harus izinkan port SSH sebelum mengaktifkan firewall?

    Jawaban: Firewall default-nya menolak semua; jika SSH tidak diizinkan, akses remote akan terputus dan kamu terkunci dari server.

    3. Alat untuk memasang HTTPS gratis otomatis di nginx?

    Jawaban: Certbot: sudo certbot --nginx.

    4. Fitur cPanel yang setara dengan useradd di Linux?

    Jawaban: Pembuatan akun hosting (cPanel account) — masing-masing dengan home, domain, email, dan database sendiri.

    🧪 Lab 10 — Server Web Pertamamu

    1. Pasang tumpukan LEMP seperti di atas.
    2. Buat direktori /var/www/instansicontoh + index.html berisi identitasmu.
    3. Konfigurasi vhost nginx, aktifkan, nginx -t, lalu reload.
    4. Buka curl http://localhost — halamanmu harus tampil.
    5. Aktifkan firewall dengan mengizinkan 22, 80, 443: sudo ufw allow 22 && sudo ufw allow 80 && sudo ufw allow 443 && sudo ufw enable.
    6. Verifikasi port terbuka: sudo ufw status.

    Referensi & KomunitasSumber resmi untuk melanjutkan belajar

    Lampiran — Strategi Ujian LPIC-1Format, bobot, dan rencana belajar 6 minggu

    Fakta & Bobot Soal

    LPIC-1 terdiri dari dua ujian terpisah. Kamu harus lulus keduanya (dalam waktu berapa pun) untuk mendapat sertifikasi:

    UjianKodeSoalWaktuLulusDomain utama
    Ujian 1101-5006090 menit500/800Arsitektur, Linux install & paket, perintah GNU, filesystem, shell scripting (Modul 1–5)
    Ujian 2102-5006090 menit500/800Desktop, user/admin task, layanan esensial, jaringan, keamanan (Modul 6–10)
    Ujian berbasis komputer (Pearson VUE), pilihan ganda & fill-in-blank (mengetik perintah). Nilai 500 dari 800; lulus = ≥500. Tidak ada pengurangan nilai untuk jawaban salah.

    Tips Skor Maksimal

    Rencana 6 Minggu

    MingguFokusTarget
    1Modul 1–2Arsitektur & instalasi paket
    2Modul 3Perintah GNU, pipe, regex
    3Modul 4–5Filesystem & scripting
    4Modul 6–7User, cron, layanan
    5Modul 8–9Jaringan & SSH
    6Modul 10 + latihanKeamanan + simulasi ujian

    Command DrillSoal acak untuk menguji hafalan perintah — kerjakan sampai streak tinggi

    Benar 0 · Salah 0 · Streak terbaik 0

    Cheat Sheet PerintahKumpulan perintah yang paling sering dipakai — klik untuk menyalin

    TopikPerintahKegunaan
    Sistemuname -aInfo kernel & arsitektur
    SistemuptimeLama menyala & beban
    HardwarelscpuInfo CPU
    Hardwarefree -hRAM & swap
    Diskdf -hKapasitas partisi
    Disklsblk -fDisk + partisi + UUID
    Systemdsystemctl status nginxStatus service
    Systemdsystemctl enable --now nginxAktif + jalankan
    Systemdsystemctl set-default multi-user.targetServer tanpa GUI
    Paketapt update && apt upgradeUpdate & upgrade (Debian)
    Paketapt install paketPasang (Debian)
    Paketdnf install paketPasang (RHEL)
    Paketdpkg -L nginxFile milik paket
    Filels -lahDaftar isi detail
    Filecp -r a bSalin rekursif
    Filefind /etc -name "*.conf"Cari berdasarkan nama
    Filetail -f /var/log/nginx/access.logIkuti log real-time
    Pipecut -d: -f1 /etc/passwdAmbil kolom pertama
    Pipegrep -rn "pola" /etcCari teks rekursif
    Pipesed -i 's/a/b/g' fileGanti teks in-place
    Prosesps aux | grep nginxCari proses
    Proseskill -9 PIDPaksa bunuh
    Prosesnice -n 10 perintahJalankan prioritas rendah
    Izinchmod 750 fileUbah izin oktal
    Izinchown user:group fileUbah owner & group
    Izinsetfacl -m u:devops:rw fileACL untuk user
    Linkln -s target linkSymlink
    Mountmount /dev/sdb1 /mntPasang partisi
    Mountfindmnt --verifyValidasi fstab
    Useruseradd -m -s /bin/bash namaBuat user
    Userusermod -aG sudo namaTambah ke grup admin
    Sudosudo visudoEdit sudoers aman
    Croncrontab -eJadwal tugas user
    Logjournalctl -u nginx -fLog unit real-time
    Logjournalctl -p err -bError boot ini
    WaktutimedatectlStatus waktu
    Jaringanip addr showAlamat IP
    Jaringanip routeTabel routing
    Jaringanss -tlnpPort listening
    Jaringandig google.comQuery DNS detail
    Jaringantraceroute 8.8.8.8Jalur paket
    SSHssh-keygen -t ed25519Buat pasangan kunci
    SSHssh-copy-id user@serverSalin kunci ke server
    Transferscp -r dir/ user@server:/srv/Salin rekursif lewat SSH
    Transferrsync -avz --delete src/ dst/Sinkronisasi + hapus kelebihan
    Firewallsudo ufw allow 443Buka port HTTPS
    Firewallsudo firewall-cmd --add-service=http --permanentBuka HTTP (RHEL)
    Websudo nginx -tUji konfigurasi nginx
    Websudo certbot --nginx -d domain.idPasang HTTPS
    Scriptbash -n skrip.shCek sintaks skrip
    Scriptchmod +x skrip.shJadikan eksekusi