Modul Workshop Network and Security Lab B201


Prerequisite

Agar lebih mudah untuk mengikuti, diharapkan peserta sudah memiliki sistem maupun VM yang terinstall linux. Linux yang digunakan boleh dari Debian, Ubuntu, Arch, maupun turunannya.

Kemudian, buka terminal atau command prompt dan jalankan perintah berikut:

cd && wget --no-check-certificate https://github.com/LordRonz/workshop-requirements/archive/refs/heads/main.tar.gz && tar -xf main.tar.gz
bash

Note: Biasanya, cara paste ke terminal adalah menggunakan CTRL + SHIFT + V, dan copy adalah CTRL + SHIFT + C. Bisa juga dengan melakukan klik kanan lalu pilih opsi copy atau paste.

A. Pengenalan Linux

Linux/UNIX merupakan salah satu contoh dari open source yang sering digunakan oleh instansi atau masyarakat umum. Pada tahun 1969, Ken Thompson dan Dennis Ritchie (developer bahasa C), para peneliti di AT&T Bell Laboratory Amerika, membuat sistem operasi UNIX, yaitu cikal bakal dari Linux. UNIX mendapatkan perhatian besar karena merupakan sistem operasi pertama yang dibuat bukan oleh hardware maker. Selain itu, karena seluruh source code yang pernah dibuat menggunakan bahasa C, sehingga mempermudah pemindahannya ke berbagai platform. (Priambodo, 2014).

Dalam waktu singkat UNIX berkembang secara pesat dan terpecah dalam dua aliran. yaitu UNIX yang dikembangkan oleh Universitas Berkeley dan yang dikembangkan oleh AT&T. Dari sini lahirlah proyek POSIX (Portable Operating System Interface for UNIX) yang dimotori oleh IEEE (The Institute of Electrical and Electronics Engineers) yang bertujuan untuk menetapkan spesifikasi standar UNIX. (Priambodo, 2014). Tentu saja untuk memberikan perspektif lebih silahkan ke wikipedia.

B. Linux System Administration

Linux System administration merupakan perintah-perintah dalam mengoperasikan sistem operasi Linux. Mulai dari instalasi, pemeliharaan, hingga tool-tool untuk mendeteksi gejala-gejala yang mungkin akan menimbulkan masalah.

Berikut ini adalah beberapa dari command-command linux yang penting untuk diketahui.

> man

reference

Command man merupakan command untuk menampilkan manual page dari system. Setiap argumen page biasanya adalah nama dari program, fungsi (biasanya bahasa C) atau utilitas. Kemudian manual page untuk program tersebut akan ditampilkan. Sebuah section apabila diberikan maka akan membuat man hanya menampilkan bagian section tersebut.

Daftar dibawah merupakan section number dari manual dan diikuti dengan tipe halaman yang ada di dalamnya.

Section NumberType
1Executable programs or shell commands
2System calls (functions provided by the kernel)
3Library calls (functions within program libraries)
4Special files (usually found in /dev)
5File formats and conventions, e.g. /etc/passwd
6Games
7Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8System administration commands (usually only for root)
9Kernel routines [Non standard]

Berikut ini adalah contoh penggunaannya.

man man
bash

Command dibawah akan menampilkan manual dari fungsi fork dalam bahasa C

man 4 tty
bash

> pwd

reference

Command pwd atau print working directory akan menampilkan nama dari direktori terkini dari terminal yang digunakan untuk memanggil command ini

Contoh penggunaan:

pwd
bash

Maka outputnya kira-kira seperti /home/amogus/HOMEWORK

> cd

reference

Command cd atau change directory berfungsi untuk menavigasi atau berpindah pindah lokasi direktori pada sistem file di Linux. Contoh penggunaannya adalah sebagai berikut

cd Documents
bash

Maka kita akan bergerak maju satu level ke direktori bernama Documents. Kita juga bisa bergerak mundur dengan menggunakan ..

cd ../
bash

Maka kita kembali ke direktori sebelumnya.

Kita juga bisa menggunakan argumen - untuk berpindah ke direktori sebelumnya.

cd -
bash

> ls

reference

Command ls atau list ini berfungsi untuk menampilkan informasi dari file-file yang berada pada direktori tertentu (secara default adalah direktori terkini). Untuk penggunaan lengkapnya bisa dilihat di reference atau dengan command man ls.

Command dibawah akan menampilkan file-file yang tidak hidden pada pwd.

ls
bash

Kira-kira outputnya seperti ini

Output dari ls

Apabila kita menggunakan argumen seperti -l maka outputnya akan lebih deskriptif, dan bila menggunakan -A maka outputnya akan menyertakan file yang berawalan dengan titik (.) alias hidden. Argumen -h akan mengubah tampilan ukuran file menjadi human readable. Biasanya saya menggunakan kombinasi 3 argumen tersebut:

ls -lAh
bash

Outputnya kira-kira seperti ini

Output dari ls -lAh

> echo

reference

Command echo berfungsi untuk... mengoutputkan string ke standard output.

echo "goodbye world"
bash

Kita juga bisa mengoutputkan variable, contohnya seperti variabel env PATH.

echo "$PATH"
bash

Linux file permission

reference

Pada section sebelumnya apabila kita melakukan command ls -l maka kita dapat melihat file permission atau file mode yang mana berguna untuk meregulasi level interaksi pada file atau direktori yang dapat dilakukan oleh system. Ini mirip seperti access control pada windows, namun lebih advanced. Inilah mengapa linux sangat secure (dengan catatan penggunanya menggunakan dengan benar, tentu saja).

Pada output dari ls sebelumnya, terdapat kolom drwxrwxrwx, penjelasannya adalah sebagai berikut.

drwxrwxrwx
Tipe file, secara teknis bukan termasuk dari file permission, kalau regular file nilainya adalah -, apabila direktori maka dPermission yang dimiliki oleh user pemilik filePermission yang dimiliki oleh grup dari userPermission yang dimiliki oleh user-user lain

Tiap-tiap dari permission rwx yang diatas dirincikan sebagai berikut:

KarakterEfek pada fileEfek pada direktori
Read permission-File tidak dapat dibukaIsi direktori tidak dapat dilihat
Read permissionrFile dapat dibukaIsi direktori dapat dilihat
Write permission-File tidak dapat dimodifikasiIsi direktori tidak dapat dimodifikasi
Write permissionwFile dapat dimodifikasiIsi direktori dapat dimodifikasi, seperti membuat file atau folder baru
Execute permission-File tidak dapat dieksekusiDirektori tidak dapat diakses dengan command cd
Execute permissionxFile dapat dieksekusiDirektori dapat diakses atau dibuka dengan command cd

> chmod

reference

Command chmod berfungsi untuk mengubah permission dari sebuah file. Kita dapat menggunakan symbolic maupun numeric mode untuk mengganti permission.

Format dari syntax symbolic modenya adalah sebagai berikut.

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
bash

Flag pertama yaitu [ugoa] menyatakan user dengan permission mana yang mesti diubah.

  • u Pemilik file
  • g Semua user yang ada di grup
  • o Semua user lain yang ada di luar grup
  • a Semua user, sama dengan ugo

Jika flag user ini tidak diberikan maka default adalah a.

Flag berikutnya adalah [-+=] menyatakan operasi yang akan menentukan permission apa yang akan dihapus, ditambah, atau diset.

  • - Menghapus permission
  • + Menambah permission
  • = Mengubah permission menjadi permission yang diberikan. Jika tidak ada argumen permission yang diberikan, semua permission dari user yang siberikan pada flag sebelumnya akan dihapus.

Berikut beberapa contoh penggunaannya

  • Berikan pemilik file permission untuk mengeksekusi
chmod u+x a.out
bash
  • Hapus semua permission untuk membaca file untuk semua user selain pemilik file
chmod go-r a.out
bash
  • Berikan semua permission ke pemilik, read permission ke grup dan tidak ada permission untuk user lain.
chmod u=rwx,g=r,o= a.out
bash

Untuk numeric mode, kita menggunakan angka yang merepresentasikan masing-masing permission.

  • r (read) = 4
  • w (write) = 2
  • r (execute) = 1
  • - (no permission) = 0

Angka dari permission yang dimiliki oleh tiap kelas user direpresentasikan dengan jumlah atau sum dari angka permission.

Misalnya command berikut

chmod 644 a.out
bash

Artinya, pemilik file memiliki permission read dan write karena 4 + 2 = 6. Lalu, grup dan user lain memiliki permission read saja.

chmod 400 ./*
bash

Command diatas akan membuat semua file di dalam pwd menjadi memiliki permission read untuk owner saja, dan no permission untuk kelas user lain.

Note: Jangan sembarangan mengganti permission dari file sistem, silahkan kunjungi link ini untuk penjelasannya.

> chown

reference

Command ini digunakan untuk mengganti owner dari sebuah file atau direktori.

chown root fizzbuzz.hs
bash

Command di atas akan mengganti pemilik file fizzbuzz menjadi root.

Note: kita perlu root privilege untuk mengeksekusi command diatas

> touch

reference

Command touch sejatinya berfungsi untuk mengupdate waktu akses dan modifikasi pada file, namun, apabila file yang dituju tidak ada, maka file tersebut akan dibuat. Inilah mengapa command ini digunakan untuk membuat file baru. Berikut contoh penggunaannya.

touch yep.cock
bash

Apabila file yep.cock ada, maka waktu akses dan modifiednya akan diupdate, sebaliknya maka akan dibuat file kosong dengan nama tersebut.

> cat

reference

Command concatenate ini berfungsi untuk mengoutputkan isi dari file ke standard output.

Apabila argumen nama file tidak diberikan maka cat akan membaca dari standard input kemudian langsung mengoutputkannya

cat
bash

Command berikut akan mengoutputkan isi dari main.c

cat main.c
bash

> mkdir

reference

Command make directory ini berguna untuk... membuat direktori

mkdir ./Documents/projects
bash

Command diatas akan membuat direktori projects yang ada didalam folder Documents.

> nano

reference

Nano merupakan text editor default dari kebanyakan distro Linux. Saya menggunakan Arch Linux dan nano merupakan text editor defaultnya.

> less

reference

Command less digunakan untuk membaca file. Ada command yang mirip namun lebih primitif, more. Less is more than more.

> tail

reference

Command tail digunakan untuk mengoutputkan n baris terakhir dari sebuah file. Default n adalah 10.

tail fizzbuzz.hs
bash

Kita juga bisa menggunakan piping, menggabungkannya dengan command cat.

cat fizzbuzz.hs | tail -5
bash

> head

reference

Command head pada dasarnya sama saja dengan tail, namun dia mengoutputkan n baris pertama dari sebuah file.

head fizzbuzz.hs
bash

> cp

reference

Command cp digunakan untuk menyalin file ke destinasi tertentu. Syntaxnya adalah cp [SOURCE] [DESTINATION].

cp fizzbuzz.pl programs
bash

Command diatas akan menyalin file fizzbuzz.pl ke direktori programs. Kita juga bisa menyalin dan merename sekaligus.

cp fizzbuzz.pl programs/fizzbuzzer.pl
bash

Ketika kita ingin menyalin semua file dalam direktori, kita bisa menggunakan wildcard *.

cp * programs
bash

> mv

reference

Command move digunakan untuk memindahkan file. Ketika kita memindah file, kita sebenarnya juga merename file tersebut. Maka dari itu mv juga digunakan untuk merename sebuah file.

mv script.py scrap.py
bash

Jika kita ingin merename beberapa karakter pada nama file kita bisa menggunakannya seperti ini.

mv script{1,69}.py
bash

Command tersebut merename script1.py menjadi script69.py

> clear

reference

Command ini berguna untuk, membersihkan terminal.

clear
bash

> file

reference

Command file digunakan untuk menampilkan tipe file, contohnya seperti berikut.

file a.out
bash

> rm

reference

Command rm digunakan untuk menghapus file maupun direktori. Command berikut akan menghapus file main.py.

rm main.py
bash

Lalu untuk menghapus direktori beserta isinya kita menggunakan argumen -r. Berikut kita menghapus folder poggers beserta seluruh isinya.

rm -r poggers
bash

Namun kita perlu berhati-hati, karena command ini akan benar-benar menghapus file, tidak memindahkannya ke Recycle Bin seperti OS sebelah. Malahan kita bisa saja tidak sengaja menghapus file sistem.

Note: Perlu kehati-hatian dalam menggunakan command rm, karena user tidak akan ditanyakan konfirmasi, kecuali jika kita menggunakan flag -i. Flag seperti -rf akan menghapus file dan direktori secara rekursif tanpa ampun, sehingga akan destruktif jika targetnya adalah root /. Silahkan kunjungi link ini untuk informasi lebih lanjut.

> sudo

reference

Command superuser do digunakan untuk menjalankan command atau mengakses file yang dimiliki oleh root user. Jika kita memang sudah login dengan root user maka tidak perlu menggunakan command ini. Tapi sebaiknya kita jangan menggunakan root user untuk penggunaan sehari-hari karena alasan keamanan.

sudo cat /etc/shadow
bash

Apabila kita mengeksekusi command diatas dengan menggunakan user non-root tanpa sudo, maka kita akan mendapat error Permission Denied.

> history

reference

Command history digunakan untuk mengoutputkan history dari penggunaan shell command yang kita lakukan. Biasanya text history ini disimpan di ~/.bash_history jika menggunakan bash atau ~/.zsh_history jika menggunakan zsh.

history
bash

Biasanya history ini akan sangat panjang, jadi penggunaannya bisa dikombinasikan dengan tail menggunakan pipe (|).

history | tail
bash

Stream redirection

reference

Terdapat 3 kategori dalam stream redirection, masing-masing untuk standard output, standard input, dan standard error.

  1. Standard Output

> merupakan command yang digunakan untuk redirect dari standard output menuju file.

history | tail > yo.txt
bash

Output dari history akan difilter oleh tail, lalu akan diberikan ke dalam file yo.txt.

  1. Standard Input

< merupakan command yang digunakan untuk redirect dari file ke standard input dari sebuah command.

less < yo.txt
bash

Output dari history akan difilter oleh tail, lalu akan diberikan ke dalam file yo.txt.

  1. Standard Error

< merupakan command yang digunakan untuk redirect dari file ke standard input dari sebuah command.

ls % 2> wad00.txt
bash

ls % akan mengakibatkan error, tapi pesan error tidak dioutputkan di terminal, melainkan dituliskan di file wad00.txt.

Apabila kita menggunakan > maka kita akan melakukan overwrite pada file yang dituju. Jika tidak ingin overwrite, maka kita bisa menggunakan append dengan cara memberikan double bracket seperti >> untuk standard output, << untuk standard input, dan 2>> untuk standard error.

> grep

reference

Command grep mencari dari file input sebuah baris yang cocok dengan pattern yang diberikan. Ketika baris yang cocok ditemukan, baris tersebut dicopy ke standard output(default) yang artinya baris tersebut diprint di terminal.

grep int main.c
bash

Kita juga dapat menggunakan pipe

cat main.c | grep int
bash

Kita juga dapat menggunakan Regular Expression.

grep ^int main.c
bash

> find

reference

Command find digunakan untuk mencari file yang ada di sistem dengan menggunakan berbagai parameter dan filter. Untuk mencari file dengan nama, kita menggunakan syntax berikut

find -name "main"
bash

Perlu diketahui perintah diatas bersifat case sensitive, sehingga mencari main itu berbeda dengan Main. Untuk mencari file tanpa memedulikan case, kita menggunakan opsi -iname.

find -iname "main"
bash

Apabila kita mau mencari file yang tidak mengikuti pattern tertentu, kita bisa melakukan invert pada pencarian dengan opsi -not.

find -not -iname "main"
bash

Atau kita bisa juga menggunakan tanda seru (!), dengan catatan diberikan backslash \ karena tanda seru merupakan karakter khusus.

find \! -iname "main"
bash

Selain menggunakan nama, kita juga bisa menggunakan tipe file, dengan parameter -type.

Berikut adalah beberapa descriptor yang dapat kita gunakan untuk menentukan tipe file:

  • f: regular file
  • d: directory
  • l: symbolic link
  • c: character devices
  • b: block devices

Kita dapat mencari semua file yang berakhiran .py dengan command berikut.

find -type f -name "*.py"
bash

Selain itu masih banyak lagi tipe filter yang dapat kita lakukan, silahkan mengunjungi referensi untuk selengkapnya.

> which

reference

Command which akan mencetak path lengkap dari sebuah executable atau program yang akan dijalankan apabila argumen dari command ini diinputkan di shell prompt. Command ini akan mencari executable yang diberikan sebagai argumen di direktori yang terdapat pada environment variable PATH. PATH merupakan env yang memberi tahu shell di direktori mana kita harus mencari sebuah executable.

which python
bash