Kawan saya, seorang dosen, mengajar matakuliah pemrograman basis data. Adapun basis data yang digunakan adalah MySQL. Saat ini, MySQL ter-install pada server yang merupakan wewenang saya. Sebagai gambaran, server ini tidak didedikasikan khusus untuk MySQL saja, tetapi juga file server praktikum dan lain sebagainya.

Sebagai dosen matakuliah ini, saya rasa sudah sepantasnya ia memiliki akses untuk paling tidak menyalakan dan mematikan server. Kebutuhkan ini terutama dirasakan saat mengadakan quiz atau ujian praktek. Untungnya, Ubuntu memiliki sudo, tools yang dapat digunakan untuk berbagi dan membatasi wewenang.

Bagi para pengguna Ubuntu, khususnya mereka yang sering bekerja dengan terminal tentunya mengenal sudo. Perintah ini seringkali digunakan untuk mengeksekusi perintah lain yang membutuhkan otentifikasi sebagai administrator atau user lain.

Wewenang untuk melakukan sudo terletak pada file /etc/sudoers. Tentunya untuk mengedit file ini sebelumnya kita juga harus memiliki wewenang melakukan sudo sebagai administrator. Selanjutnya saya akan membahas sedikit mengenai /etc/sudoers yang saya edit untuk membagi wewenang pada kawan saya.

Pertama-tama saya perlu menambahkan user agar kawan saya dapat melakukan login ke server.Username dan groupname yang saya berikan adalah badat.

Selanjutnya, sayang membuka file /etc/sudoers dengan perintah

sudo nano /etc/sudoers

Berikut adalah isi dari file tersebut :

# /etc/sudoers
#
# This file MUST be edited with the ‘visudo’ command as root.
#
# See the man page for details on how to write a sudoers file.
# Host alias specification

# User alias specification
User_Alias DOSEN = badat
# Host alias specification
Host_Alias INTERNAL = 10.10.10.0/255.255.255.0
# Cmnd alias specification
Cmnd_Alias MYSQL = /etc/init.d/mysql, /usr/bin/mysql*
Cmnd_Alias SAMBA = /etc/init.d/samba, /usr/sbin/smbd, /usr/sbin/nmbd

# Defaults

Defaults !lecture,tty_tickets,!fqdn

# User privilege specification
root ALL=(ALL) ALL
badat INTERNAL=NOPASSWD: MYSQL,SAMBA

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

Perhatikan, tulisan yang berwarna merah adalah bagian yang saya tambahkan pada file tersebut, sedangkan yang berwarna hitam adalah default.

Bagian User alias spesification digunakan untuk membuat alias untuk satu atau beberapa user. Contoh saya menunjukkan bahwa user badat memiliki alias, yaitu DOSEN. Artinya, selanjutnya pada file ini, kata DOSEN akan mengacu pada user badat. Satu nama alias dapat menampung beberapa user, sehingga nama alias ini seolah-olah berperan sebagai nama group.

User_Alias DOSEN = badat

Berikutnya adalah bagian host alias spesification. Pada bagian ini, kita dapat menspesifikasikan dari host/komputer mana seseorang yang memiliki remote akses dapat melakukan sudo. Saya memberikan kawan saya akses untuk melakukan sudo dari semua komputer yang terdapat dalam internal network, yaitu komputer dengan IP 10.10.10.* dan netmask 255.255.255.0. Jaringan internal ini saya beri nama alias INTERNAL.

Host_Alias INTERNAL = 10.10.10.0/255.255.255.0

Cmnd alias spesification adalah bagian dimana kita mendefinisikan file-file mana saja yang dapat dieksekusi saat seorang user menggunakan sudo. Kepada file-file tersebut, kita juga memberikan nama alias. Sebagai contoh, karena ingin memberikan akses untuk men-start dan men-shutdown mysql, maka saya membuat baris berikut :

Cmnd_Alias MYSQL = /etc/init.d/mysql, /usr/bin/mysql*

Artinya, kawan saya dapat menjalankan file /etc/init.d/mysql dan file-file executable lain pada folder /usr/bin yang berawalan mysql, misalnya : mysqldump.

User privilege spesification adalah bagian yang terpenting menurut saya. Di bagian ini, kita akan menggunakan semua spesifikasi yang telah kita tuliskan sebelumnya.

root ALL=(ALL) ALL

Kutipan di atas dapat diterjemahkan sebagai “user root dapat melakukan sudo di host manapun (kata ALL pertama), dan berperan sebagai user siapapun (kata ALL kedua, dalam kurung) untuk menjalankan perintah apapun (kata ALL ketiga). Contoh lain adalah sebagai berikut :

badat INTERNAL=NOPASSWD: MYSQL,SAMBA

Berarti user badat dapat melakukan sudo di semua host dalam network internal (INTERNAL, 10.10.10.*/255.255.255.0), secara default berperan sebagai root (karena tidak didefinisikan setelah tanda =), tanpa memerlukan password (NOPASSWD), dan hanya dapat menjalankan perintah yang terdaftar pada alias MYSQL dan SAMBA.

Sekian sharing pengalaman saya dalam menggunakan sudo. Untuk lebih jelas dan lengkap mengenai sudo, silakan manfaatkan fasilitas man.

man sudoers