Belajar Linux Dasar - File Permission
Selamat pagi, siang, atau malam teman-teman Linuxers. Tulisan ini yang keempat seri pembelajaran Linux dasar, buat teman-teman yang belum baca tulisan sebelumnya, ini link-nya:
- Belajar Linux Dasar - Pengenalan Input & Output
- Belajar Linux Dasar - Manajemen file
- Belajar Linux Dasar - Manipulasi Teks dan Stream
Yang keempat ini kita bakal belajar tentang permissions. Permission ini kurang lebih seperti cara mengatur siapa yang bisa berbuat apa di file tertentu. Satu orang cuma bisa baca saja, orang lainnya bisa baca sama edit file, dan sebagainya.
Buat memahami permission, paling tidak ada dua hal yang perlu kita pahami, yaitu pengelompokan user sama mode akses nya. Cara manipulasi permission dan penjelasan tentang SUID, SGID, dan Sticky bit juga ada di tulisan ini.
User, Group, dan Other.
Ada tiga jenis user di Unix dan Linux yang berhubungan dengan file permission; mereka itu User, Group, dan Other. Seperti apakah mereka? di bawah:
User
Ini user yang punya file atau pemilik file. Kalau misalnya saya buat file bernama “blah” pakai command touch blah
, maka file blah
ini punya Saya, kecuali kepemilikan atau ownership file ini dialihkan ke user lain pakai command chown
.
Di Linux masing-masing user punya id yang unik. Kalau kita mau cek nama user kita yang lagi login, pakai command whoami
.
whoami
Kalau mau cek nomor id user kita yang lagi login:
id -u $(whoami)
Untuk nama-nama user yang lain bisa dilihat di file /etc/passwd
.
Group
Beberapa user bisa digabungkan ke dalam satu grup. Sama seperti User, Group ini masing-masing juga punya nama dan nomor id yang unik.
Nama-nama grup bisa dilihat di file /etc/group
. Kalau kita mau lihat user yang kita pakai sekarang tergabung di grup mana saja, ketik command id
.
Other
Kalau yang ini berlaku buat semua user yang bukan pemilik file, juga tidak tergabung dalam grup pemilik file.
Mode akses.
Berikutnya mode akses. Mode akses, atau permission ini yang menentukan hak akses masing-masing user yang sudah dijelaskan sebelumnya.
Setiap file, termasuk file direktori punya tiga mode akses seperti di bawah:
- read. User yang punya akses read dia bisa melihat isi file atau melihat atribut file.
- write. User yang punya akses write berarti dia bisa update, edit, rename, move dan hapus file.
- execute. Mode akses yang ini biasanya cuma diterapkan ke file program atau script, file program atau script tidak bisa dieksekusi kalau tidak punya mode execute. Jadi user yang punya akses execute ke file, dia bisa mengeksekusi file program atau script itu.
Berikutnya coba kita lihat contoh output command ls -l
ls -l blah
-rwxr-xr-- 1 administrator admins 0 Jul 19 13:45 blah
File blah
di atas itu kepunyaan user administrator
sama grup admins
.
Permission-nya ada di kolom yang pertama, itu yang -rwxr-xr--
.
bagaimana cara bacanya ini?
Keterangannya seperti ini:
1) File type
Karakter yang pertama itu menunjukkan jenis file, ada beberapa tipe seperti list di bawah:
-
: Regular file atau gampangnya file biasa.d
: File direktori atau folder, seperti yang dibuat pakai commandmkdir
.l
: Menunjukkan file jenis link seperti yang dibuat pakai commandln -s
.b
: Block device, seperti flash disk, partisi hard drive, dsb.c
: File character class seperti serial console.s
: File socket jenis Unix.
2) User permission
Permission ini berlaku buat pemilik file. Dalam contoh ini rwx
yang berarti si user pemilik file bisa baca (r), edit, rename, move dan hapus (w), dan execute (x).
3) Group Permission
Permission yang ini berlaku buat grup pemilik file, grup ini isinya bisa nol user atau lebih. Di contoh, permission untuk grup r-x
yang berarti para user yang tergabung di grup ini, mereka bisa baca (r) dan execute (x) tapi tidak bisa edit, rename, move atau hapus file karena grup ini tidak punya permission write (w).
4) Other Permission
Triad permission yang terakhir ini berlaku buat semua user selain nomor 2 dan nomor 3 di atas. Di contoh ini, para user yang tergolong other cuma bisa baca file karena cuma ada permission baca atau read (r).
Manipulasi Permission
Hak akses atau permission untuk ketiga jenis user; user, group, dan other itu tidak statik yang artinya permission ini bisa dirubah. Untuk merubah permission kita pakai command chmod
.
Kalau mau rubah permission, kita bisa pilih salah satu dari dua mode chmod
, mode text sama numeric.
Kita lihat satu-satu.
Mode text
Mode chmod yang ini pakai karakter huruf untuk masing-masing jenis user:
u
: yang berarti user pemilik file.g
: grup pemilik file.o
: other.a
: semua useru
,g
, dano
. Kita bisa pakaia
ini daripada harus ketikugo
.
Contoh untuk set permission grup supaya bisa baca, edit dan hapus file:
# chmod g=rw blah
# ls -l blah
-rwxrw-r-- 1 administrator admins 0 Jul 19 13:45 blah
Supaya other
tidak punya permission apa-apa, tidak bisa baca, edit dan execute:
# chmod o= blah
# ls -l blah
-rwxrw---- 1 administrator admins 0 Jul 19 13:45 blah
User pemilik file dengan akses penuh:
# chmod u=rwx blah
# ls -l blah
-rwxrw---- 1 administrator admins 0 Jul 19 13:45 blah
Semua user punya akses penuh:
# chmod ugo=rwx blah
# ls -l blah
-rwxrwxrwx 1 administrator admins 0 Jul 19 13:45 blah
Selain ugo
bisa juga pakai a
untuk semua user.
# chmod a=rwx blah
Di mode ini, selain pakai tanda sama dengan (=)
, kita juga bisa pakai tanda minus (-)
atau plus (+)
.
Misalnya kalau g=rwx
itu berarti berikan hak akses penuh ke grup, g-w
berarti hilangkan permission w
dari grup. g+w
berarti tambahkan permission write (w)
ke grup.
Contoh, kita hilangkan permission w
dan x
dari group dan other.
# chmod go-wx blah
# ls -l blah
-rwxr--r-- 1 administrator admins 0 Jul 19 13:45 blah
Mode Numeric
Kalau mode yang ini kita tidak pakai huruf-huruf seperti u
, g
, atau o
, tapi pakai angka oktal. Oktal? Bilangan yang angkanya cuma 8, dari 0 sampai 7.
Caranya begini, tiga permission r
, w
, dan x
anggap saja seperti tiga kolom terus masing-masing kolom ini punya switch atau saklar on/off pakai bilangan biner yang bersifat boolean. Bilangan biner angkanya cuma 1
sama 0
, 1
berarti hidup dan 0
berarti mati.
Contoh r-x
berarti 101
, rwx
berarti 111
, r--
berarti 100
.
Angka 101
yang mewakili r-x
itu bilangan biner, jadi angka 101
bukan berarti seratus satu, tapi 5
kalau dalam oktal.
chmod
mode numeric pakai tiga angka oktal; angka pertama mewakili permission untuk user, angka kedua mewakili group, dan angka ketiga mewakili permission other.
Contoh untuk set permission jadi rwxr-xr--
:
# chmod 754 blah
command di atas kalau dalam mode text seperti ini :
# chmod u=rwx,g=rx,o=r blah
Saya rasa gambar lebih bisa menjelaskan mode numeric ini.
Gampangnya bisa kita ingat mode-mode permission-nya seperti ini :
r
= 4, atau dalam biner ditulis100
.w
= 2, dalam biner ditulis010
.x
= 1, dalam biner ditulis001
.
Jadi rwx
sama dengan 421
yang kalau angka-angka ini dijumlahkan sama dengan 7.
r-x
berarti 401
, dijumlahkan jadi 5.
r--
berarti 400
, ketiga angka ini dijumlahkan hasilnya 4.
Itulah kenapa 754
sama dengan rwxr-xr--
Contoh lain, mode 644
:
# chmod 644 blah
# ls -l blah
-rw-r--r-- 1 administrator admins 0 Jul 19 13:45 blah
Mode 644
dengan gambar.
Mode 777
# chmod 777 blah
# ls -l blah
-rwxrwxrwx 1 administrator admins 0 Jul 19 13:45 blah
Biar lebih gampang lagi, kita bisa lihat tabel di bawah:
chmod numeric | Oktal | Biner | Teks |
---|---|---|---|
0 |
0+0+0 |
000 |
--- |
1 |
0+0+1 |
001 |
--x |
2 |
0+2+0 |
010 |
-w- |
3 |
0+2+1 |
011 |
-wx |
4 |
4+0+0 |
100 |
r-- |
5 |
4+0+1 |
101 |
r-x |
6 |
4+2+0 |
110 |
rw- |
7 |
4+2+1 |
111 |
rwx |
Buat Saya, pakai numeric ini lebih ringkas daripada harus pakai u
, g
, atau o
.
SUID, SGID, Sticky bit.
Pernah pakai command sudo
? Ya, pakai command sudo
kita bisa jalankan program pakai user lain, root misalnya.
SUID atau Set User ID ini kurang lebih seperti sudo
tapi tanpa perlu pakai perintah sudo
. SUID ini cuma bisa dipakai di file executable seperti file program. Artinya file program executable yang ada flag suid kalau dieksekusi, maka sistem Linux menjalankan prosesnya dengan user pemilik file, bukan user yang mengeksekusinya.
Contoh file /usr/bin/passwd
.
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 53112 Nov 20 2014 /usr/bin/passwd
Coba kita perhatikan di permission yang pertama (rws)
, karakter s
menandakan SUID.
File itu punya user root dan dengan suid, siapapun bisa mengeksekusi file itu dan sistem akan menjalankannya dengan user root
. Karena itu user reguler bisa mengganti passwordnya sendiri biarpun tidak punya akses write
ke file /etc/passwd
.
SGID atau Set Group ID kurang lebih seperti SUID
hanya saja untuk group
. Jadi program dengan sgid yang dijalankan oleh siapapun dianggap group
yang mengeksekusinya.
ls -l /usr/bin/bsd-write
-rwxr-sr-x 1 root tty 9680 Oct 18 2014 /usr/bin/bsd-write
Sama seperti SUID, karakter s
menandakan sgid tapi di permission triad yang tengah.
Sticky bit ini berguna buat mencegah file dihapus oleh user yang bukan pemilik file, biarpun di dalam direktori publik yang open access.
Contohnya direktori /tmp
. Direktori ini punya mode 777
yang artinya siapa saja punya akses penuh ke file-file yang ada di direktori ini, siapa saja bisa buat dan hapus file. Tapi kalau ada Sticky bit, file tidak bisa dihapus, move, atau rename begitu saja oleh sembarang user, cuma user pemilik dan user root
saja yang bisa hapus, move, atau rename.
ls -ld /tmp
drwxrwxrwt 16 root root 4096 Jul 20 15:15 /tmp
Karakter pertama (d)
menandakan file /tmp
itu file direktori. Tiga karakter berikutnya (rwx)
artinya user pemilik folder /tmp
punya akses penuh. Tiga karakter berikutnya untuk group (rwx)
yang juga berarti akses penuh. Terakhir (rwt)
untuk Other yang berarti read, write, dan sticky bit. Jadi karakter t
itu menandakan sticky bit.
Bagaimana set SUID, SGID atau Sticky bit?
Sama seperti setting permission hanya saja kita pakai 4 angka, angka pertama untuk suid, sgid, dan sticky bit, tiga angka berikutnya permission untuk user, group, dan other.
Angka oktal kurang lebih sama seperti permission rwx
.
- SUID : 4 atau dalam biner 100.
- SGID : 2 atau dalam biner 010, dan.
- Sticky bit : 1 atau 001 dalam angka biner.
Contoh untuk set suid dan permission 755 di file blah
:
# chmod 4755 blah
# ls -l blah
-rwsr-xr-x 1 administrator admins 0 Jul 19 13:45 blah
Set SGID:
# chmod 2755 blah
# ls -l blah
-rwxr-sr-x 1 administrator admins 0 Jul 19 13:45 blah
Untuk Sticky bit:
# chmod 1755 blah
# ls -l blah
-rwxr-xr-t 1 administrator admins 0 Jul 19 13:45 blah
Kita bisa set dua flag atau lebih, misal suid + sgid
yang berarti 4 + 2 = 6
.
# chmod 6755 blah
# ls -l blah
-rwsr-sr-x 1 administrator admins 0 Jul 19 13:45 blah
Atau suid + sticky bit
yang berarti 4 + 1 = 5
.
# chmod 5755 blah
# ls -l blah
-rwsr-xr-t 1 administrator admins 0 Jul 19 13:45 blah
Selain mode numeric, kita juga bisa pakai mode text:
- SUID : s.
- SGID : s.
- Sticky bit : t.
chmod u+s
untuk set suid, chmod g+s
untuk set sgid, dan chmod o+t
untuk set sticky bit.
Merubah Ownership
Ownership, atau kepemilikan file baik user atau group bisa diganti atau dialihkan ke user atau group lain.
Untuk merubah user ownership pakai command chown
. Contoh merubah kepemilikan file blah
yang awalnya punya user administrator
dialihkan ke user root
.
# ls -l blah
rwx-r-xr-x 1 administrator admins 0 Jul 19 13:45 blah
# chown root blah
# ls -l blah
rwx-r-xr-x 1 root admins 0 Jul 19 13:45 blah
Untuk mengganti group kita pakai command chgrp
. Contoh rubah group admins ke group root.
# chgrp root blah
# ls -l blah
rwx-r-xr-x 1 root root 0 Jul 19 13:45 blah
Kita juga bisa rubah user sama grupnya pakai satu command chown
. Di bawah contoh buat rubah user ke administrator
dan grup ke admins
.
# chown administrator:admins blah
# ls -l blah
rwx-r-xr-x 1 administrator admins 0 Jul 19 13:45 blah
Jadi, user dan grup dipisahkan dengan titik dua (:)
.
Semua command di atas; chmod
, chown
, dan chgrp
bisa juga dipakai di direktori secara recursive. Artinya kalau kita rubah satu direktori, semua file sama direktori yang ada di dalamnya semua ikut berubah tanpa perlu eksekusi command ke file satu per satu.
Untuk recursive pakai argumen -R
. Contoh, supaya tidak ada yang bisa baca isi folder Documents
selain yang punya.
chmod -R 600 Documents
Dengan -R
semua file dan folder termasuk isinya semua permission-nya berubah.
Baik, semoga tulisan tentang Linux file permission ini bisa dipahami dengan mudah.
Silahkan dikomentari, kritik, share, atau abaikan.
Terima kasih.