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
bashNote: 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
bashCommand 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
bashMaka 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
bashMaka kita akan bergerak maju satu level ke direktori bernama Documents. Kita juga bisa bergerak mundur dengan menggunakan ..
cd ../
bashMaka 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
bashKira-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
bashOutputnya kira-kira seperti ini
> echo
referenceCommand echo berfungsi untuk... mengoutputkan string ke standard output.
echo "goodbye world"
bashKita juga bisa mengoutputkan variable, contohnya seperti variabel env PATH.
echo "$PATH"
bashLinux 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...
bashFlag pertama yaitu [ugoa] menyatakan user dengan permission mana yang mesti diubah.
uPemilik filegSemua user yang ada di grupoSemua user lain yang ada di luar grupaSemua 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
bashUntuk 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
bashArtinya, pemilik file memiliki permission read dan write karena 4 + 2 = 6. Lalu, grup dan user lain memiliki permission read saja.
chmod 400 ./*
bashCommand 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
bashCommand 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
bashApabila 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
bashCommand berikut akan mengoutputkan isi dari main.c
cat main.c
bash> mkdir
referenceCommand make directory ini berguna untuk... membuat direktori
mkdir ./Documents/projects
bashCommand 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
bashKita 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
bashCommand diatas akan menyalin file fizzbuzz.pl ke direktori programs. Kita juga bisa menyalin dan merename sekaligus.
cp fizzbuzz.pl programs/fizzbuzzer.pl
bashKetika 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
bashJika kita ingin merename beberapa karakter pada nama file kita bisa menggunakannya seperti ini.
mv script{1,69}.py
bashCommand 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
bashLalu untuk menghapus direktori beserta isinya kita menggunakan argumen -r. Berikut kita menghapus folder poggers beserta seluruh isinya.
rm -r poggers
bashNamun 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-rfakan 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
bashApabila 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
bashBiasanya history ini akan sangat panjang, jadi penggunaannya bisa dikombinasikan dengan tail menggunakan pipe (|).
history | tail
bashStream 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
bashOutput 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
bashOutput 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
bashls % 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
bashKita juga dapat menggunakan pipe
cat main.c | grep int
bashKita 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"
bashPerlu 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"
bashApabila kita mau mencari file yang tidak mengikuti pattern tertentu, kita bisa melakukan invert pada pencarian dengan opsi -not.
find -not -iname "main"
bashAtau kita bisa juga menggunakan tanda seru (!), dengan catatan diberikan backslash \ karena tanda seru merupakan karakter khusus.
find \! -iname "main"
bashSelain 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"
bashSelain 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