Mengenal Access Permission Setuid, Setgid di GNU/Linux


Pada tulisan sebelumnya kita telah membahas mengenai Sticky Bit. Yang mana berfungsi hanya akun owner dan root saja yang bisa memodifikasi perubahan suatu berkas atau direktori. Tulisan kali ini, kita melanjuti pembahasan tentang special permission lainnya, yakni setuid dan setgid, yang mana kedua permission ini memiliki keunggulan masing-masing terutama dalam hal security.

Setuid

Setuid atau SUID adalah special permission yang mana hanya pengguna owner dan root saja yang bisa menghapus atau me-rename. Berbeda dengan sticky bit, yang mana hanya berefek pada berkas/direktori yang mana berada dalam parent/top directory-nya. Setuid ditandai dengan nilai bit 4 dan tulisan s atau S di awal. Jadi ketika kita ingin menggunakan setuid gunakan angka 4 di awal.

Cara menggunakannya

chmod 4777 nama_berkas_atau_direktori

atau

chmod u+s nama_berkas_atau_direktori

Contoh:

Kita buat berkas misalnya bernama Halo lalu isikan dengan apapun dan gunakan permission 4777.

echo "Halo" > Halo
cat Halo
chmod 4777 Halo
su - fulan
echo "Situsali.com" >> Halo
cat Halo
rm Halo

Lihat di atas, berwarna merah dah ada notasi s (kecil/lowercase). Padahal permission mengizinkan semua bisa read, write, execute. Namun kita pengguna lain ingin mencoba menghapus ia tidak bisa. Lalu bagiamana dengan S (kapital/uppercase) ? Ini artinya pada hanya owner tidak diberikan permission execute (x).

Perintah berikut untuk mengaktifkan Setuid bit dengan S.

chmod 4677 nama_berkas
chmod 4666 nama_berkas
chmod 4675 nama_berkas

Setgid

Setgid atau GUID adalah suatu special permission yang mana ia otomatis memaksa hanya mengeset group pada berkas atau direktori di dalamnya disesuaikan dengan primary group dari user yang membuat setgid tersebut.

Setgid ditandai dengan nilai bit 2 atau huruf s dan S di tengah (group). Lihat perbedaanya:

Berkas animal menggunakan setuid sedangkan direktori zoo menggunakan setgid.

Cara menggunakannya

chmod 2777 top_direktori/

atau

chmod g+s top_direktori/

Contoh kasus

Kita buat suatu direktori bernama zoo dengan setiap user primary group-nya masing-masing berbeda. Katakanlah ali:users, fulan:fulan, fulanah:fulanah. Kita bisa mengecek tiap user menggunakan primary gruop yang ia digunakan, dengan perintah id -gn username. Kemudian masing-masing user tersebut memiliki secondary group yang sama yakni group users.

Berikut perintahnya:

id -gn ali
id -gn fulan
id -gn fulanah
mkdir zoo
chmod 2770 zoo
cd zoo
touch penguin
su - fulan
touch kambing
su - fulanah
touch sapi
ls -lh

Perhatikan berkas yang dibuat oleh tiap-tiap user di atas, semua otomatis berubah menjadi group users. Bisa kita cek sendiri group users pada fulan dan fulanah itu masuk dalam secondary group. Bisa dicek dengan perintah groups username.

Kita akan melakukan percobaan lagi, menghapus secondary group dari fulan. Yang mana si fulan mencoba membuat berkas pada direktori zoo. Dalam hal ini fulan berarti masuk dalam kategori others, kita harus merubah permission yang sebelumnya 2770 menjadi 2777. Berikut ini perintahnya:

sudo gpasswd -d fulan users
chmod 2777 zoo
su - fulan
cd zoo
touch macan
ls -lh
groups

Perhatikan gambar di atas ketika fulan membuat berkas bernama macam, ia otomatis berubah menjadi group users. Nah menarik bukan? Tentu saja.

Kesimpulan

Dengan menggunakan setuid berfungsi memberikan suatu proteksi tambahan yakni semua user boleh memodifikasi tetapi tidak bisa mengapus. Mirip seperti sticky bit, hanya saja setuid ini lebih fleksibel kita boleh melekataknnya dimanapun, berbeda dengan sticky bit baru baru berefek di bawah direktori yang diset.

Dengan setgid memberikan suatu keuntungan berkas yang ada di bawahnya dipaksa menggunakan primary group dari user yang mengeset. Hal ini bisa kita manfaatkan misalnya pada direktori /var/www/html di mana semua user dipaksa menggunakan group www-data atau http.

Semoga bermanfaat.