Hai semuanya, apa kabar? Kali ini saya mau berbagi lagi tentang Linux, setelah tulisan sebelumnya kan personal, sekarang balik lagi ke Linux hehehe.
Pada Linux, file dan direktori memiliki izin atau tersendiri. Mungkin teman-teman sudah tahu bagaimana cara cek izin dari suatu file atau direktori. Yaitu dengan menggunakan perintah ls -l. Untuk pengujian pada tulisan kali ini, saya menggunakan file skrip kemarin (yang digunakan untuk mengirimkan informasi disk usage via Telegram).
Kita coba cek izin dari file tersebut:
[user@localhost ~]$ ls -l penyimpanan.sh
-r-xr--r--. 1 user user 463 Jan 9 10:08 penyimpanan.sh
Nah, terdapat field yang penting dalam kita belajar tentang izin di Linux. Terdapat 10 bit pada field izin tersebut. File
penyimpanan.sh
pada field tersebut memiliki nilai -r-xr--r--
.
Pada bit pertama merepresentasikan jenis file. Apabila bernilai d artinya adalah direktori, namun apabila bernilai – artinya file biasa.
Biar lebih gampang, saya coba ilustrasiin di gambar 1
gambar 1
Untuk bit selanjutnya (9 bit) dibagi menjadi tiga bagian. User/owner, grup, dan other. Jenis izin juga dibagi tiga, yaitu izin baca (read- r
), tulis (write- w
), dan eksekusi/menjalankan (execute- x
). Apabila tidak memiliki izin, maka dilambangkan dengan -
. Pada gambar 1, artinya file penyimpanan.sh
untuk pemilik file memiliki akses read dan execute, untuk grup dan otherĀ hanya memiliki akses read.
Kita coba yuk. Kan untuk user/owner punya hak akses baca dan eksekusi, nah kita coba deh eksekusi tapi tanpa sudo
, bisa atau nggak ya? Karena sudo
itu perintah yang memungkinkan kita untuk bisa jalanin perintah dengan tingkat privilege yang lebih tinggi. Biasanya kita dapat menjalankan perintah sebagaimana root user.
gambar 2
Mungkin agak membingungkan. Skrip berjalan, berhasil kirim notifikasi, tapi kok ada pesan eror ya? Permission denied. Dan pada notifikasi tidak menampilkan keterangan hari yang sesuai (pembuatan tulisan ini pada 10/1). Hmm kenapa ya?
Yuk kita amati. Kita lihat kode di bawah:
[user@localhost ~]$ cat penyimpanan.sh
#!/bin/bash
echo "Penggunaan Disk Tanggal $(date +'%d/%m/%Y')" > /home/user/penyimpanan.log
df -h / | awk 'NR==2 {print "Filesystem:", $1; print "Size:", $2; print "Used:", $3; print "Avail:", $4; print "Use%:", $5; print "Mounted on:", $6}' >> /home/user/penyimpanan.log
isi_log=$(cat /home/user/penyimpanan.log)
curl -s -F chat_id=<ini chat id> -F text="$isi_log" https://api.telegram.org/bot<ini bot token>/sendMessage >/dev/null
[user@localhost ~]$ ls -l penyimpanan.log
-rw-r--r--. 1 root root 130 Jan 9 10:30 penyimpanan.log
Ketemu penyebabnya. Pada skrip penyimpanan.sh
, terdapat perintah untuk menyimpan tulisan judul yang disertai tanggal terkini dan juga status penyimpanan ke dalam file penyimpanan.log
. Nah, saat pengujian tadi terdapat eror karena kita tidak menjalankan skrip dengan sudo
dan juga karena file penyimpanan.log
tidak memberikan hak akses execute apabila tidak menggunakan sudo/root
.
Jadi, walaupun file penyimpanan.sh
memberikan aksesĀ eksekusi kepada owner, namun tidak dengan file penyimpanan.log
. Sehingga notifikasi tetap dikirim namun tidak berisi informasi terkini karena file penyimpanan.log
tidak memberikan akses tersebut.
Nah, selanjutnya kita coba gunakan akses write pada file penyimpanan.sh
, apakah bisa kita edit tanpa menggunakan sudo
? Kita coba gunakan perintah nano penyimpanan.sh
untuk edit file tersebut.
gambar 3
Saat mencoba edit menggunakan nano, terdapat tulisan File … is unwriteable. Namun kita masih bisa menulis pada file tersebut. Namun, saat kita coba simpan file tersebut (ctrl+x lalu Y), tidak bisa disimpan: Permission denied. Kita tidak bisa menulis atau mengubah file tersebut karena tidak diberikan akses write.
Namun, saat pengujian menggunakan vi editor, sama-sama menampilkan
-- INSERT -- W10: Warning: Changing a readonly file
Press ENTER or type command to continue
dan file masih bisa diedit apabila “dipaksa” save menggunakan perintah :wq!
Untuk tulisan kali ini akan dilanjutkan di tulisan yang akan datang yaa.. Bye~