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 adalahCTRL + 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
referenceCommand 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 Number | Type |
---|---|
1 | Executable programs or shell commands |
2 | System calls (functions provided by the kernel) |
3 | Library calls (functions within program libraries) |
4 | Special files (usually found in /dev) |
5 | File formats and conventions, e.g. /etc/passwd |
6 | Games |
7 | Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) |
8 | System administration commands (usually only for root) |
9 | Kernel 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
referenceCommand 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
referenceCommand 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
referenceCommand 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
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
> echo
referenceCommand 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
referencePada 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.
d | rwx | rwx | rwx |
---|---|---|---|
Tipe file, secara teknis bukan termasuk dari file permission, kalau regular file nilainya adalah - , apabila direktori maka d | Permission yang dimiliki oleh user pemilik file | Permission yang dimiliki oleh grup dari user | Permission yang dimiliki oleh user-user lain |
Tiap-tiap dari permission rwx
yang diatas dirincikan sebagai berikut:
Karakter | Efek pada file | Efek pada direktori | |
---|---|---|---|
Read permission | - | File tidak dapat dibuka | Isi direktori tidak dapat dilihat |
Read permission | r | File dapat dibuka | Isi direktori dapat dilihat |
Write permission | - | File tidak dapat dimodifikasi | Isi direktori tidak dapat dimodifikasi |
Write permission | w | File dapat dimodifikasi | Isi direktori dapat dimodifikasi, seperti membuat file atau folder baru |
Execute permission | - | File tidak dapat dieksekusi | Direktori tidak dapat diakses dengan command cd |
Execute permission | x | File dapat dieksekusi | Direktori dapat diakses atau dibuka dengan command cd |
> chmod
referenceCommand 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 fileg
Semua user yang ada di grupo
Semua user lain yang ada di luar grupa
Semua user, sama denganugo
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) = 4w
(write) = 2r
(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
referenceCommand 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
referenceCommand 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
referenceCommand 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
referenceCommand make directory ini berguna untuk... membuat direktori
mkdir ./Documents/projects
bash
Command diatas akan membuat direktori projects yang ada didalam folder Documents.
> nano
referenceNano merupakan text editor default dari kebanyakan distro Linux. Saya menggunakan Arch Linux dan nano merupakan text editor defaultnya.
> less
referenceCommand less
digunakan untuk membaca file. Ada command yang mirip namun lebih primitif, more
. Less is more than more.
> tail
referenceCommand 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
referenceCommand head
pada dasarnya sama saja dengan tail, namun dia mengoutputkan n baris pertama dari sebuah file.
head fizzbuzz.hs
bash
> cp
referenceCommand 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
referenceCommand 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
referenceCommand ini berguna untuk, membersihkan terminal.
clear
bash
> file
referenceCommand file
digunakan untuk menampilkan tipe file, contohnya seperti berikut.
file a.out
bash
> rm
referenceCommand 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
referenceCommand 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
referenceCommand 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
referenceTerdapat 3 kategori dalam stream redirection, masing-masing untuk standard output, standard input, dan standard error.
- 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
.
- 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
.
- 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
referenceCommand 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
referenceCommand 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 filed
: directoryl
: symbolic linkc
: character devicesb
: 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
referenceCommand 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