Server Linux hampir tidak pernah cuma dipakai satu orang untuk satu pekerjaan. Ada manusia yang menyetelnya, ada program yang menjalankan website, mungkin ada job latar belakang yang mengambil backup tiap jam 3 pagi, plus beberapa rekan tim yang sesekali login buat ngecek. Linux merapikan semua itu lewat satu ide yang kelihatannya sederhana: setiap tindakan di sistem itu milik seseorang, dan “seseorang” itu disebut user. Kumpulkan beberapa user, jadilah sebuah grup. Dari titik itu, seluruh pertanyaan soal “siapa boleh melakukan apa” langsung jatuh rapi ke tempatnya.
Kalau kamu pernah melihat permission denied di server dan bingung kenapa, inilah potongan yang hilang. User dan grup adalah lapisan identitas di Linux — mereka menentukan kamu ini siapa, dan dari situlah ditentukan apa saja yang boleh kamu sentuh. Ayo kita susun gambarannya dari paling dasar.
User itu sebenarnya apa
User di Linux ya cuma sebuah akun — sebuah identitas yang dikenali sistem. Apa pun yang kamu lakukan di mesin itu (membaca berkas, menjalankan program, membuka koneksi jaringan), kamu melakukannya sebagai user tertentu, dan sistem mengecek hak user itu dulu sebelum mengizinkannya.
Ini bagian yang sering luput dari pemula: tidak semua user itu manusia. Linux juga memakai akun user untuk program. Software web server berjalan sebagai sebuah user (sering kali namanya memang www-data atau nginx). Database berjalan sebagai user-nya sendiri. Akun semacam ini disebut system user atau service account, dan dia ada supaya tiap program punya identitas terbatasnya sendiri, bukan semuanya jalan dengan kuasa penuh. Kalau web server-nya jebol diretas, kerusakannya terkurung sebatas apa yang boleh dilakukan user itu.
Tiap user punya beberapa properti penting:
- Username — nama yang ramah dibaca manusia, seperti
janeatauwww-data. - UID (user ID) — angka yang sebenarnya dipakai kernel secara internal. Namanya untuk manusia, angkanya untuk mesin.
- Home directory — biasanya
/home/username, folder pribadi milik user itu. - Login shell — program yang jalan saat dia login (sering
/bin/bash). Service account sering sengaja diberi shell “tidak bisa login”, supaya tidak ada yang bisa login sebagai dia.
Kamu bisa lihat kamu ini sedang jadi siapa kapan saja:
whoami # menampilkan username-mu
id # menampilkan UID, grup utama, dan semua grup yang kamu ikuti
Keluaran id yang umum kira-kira begini:
uid=1001(jane) gid=1001(jane) groups=1001(jane),27(sudo),998(docker)
Satu baris itu bilang: kamu adalah jane (UID 1001), grup utamamu juga jane, dan kamu ikut tergabung di grup sudo dan docker. Ingat-ingat ini — grup tambahan itulah sumber dari banyak kekuasaanmu.
User istimewa: root
Ada satu user yang berdiri terpisah dari semua yang lain: root, disebut juga superuser. Root punya UID 0 dan boleh melakukan apa pun — membaca berkas mana saja, mematikan proses mana saja, mengubah pengaturan apa saja, bahkan menghapus seluruh sistem kalau dia mau. Tidak ada pengecekan izin untuk root; aturannya memang tidak berlaku buat dia.
Justru karena kuasa sebesar itulah kamu harus memperlakukan root dengan hati-hati. User biasa yang salah ketik perintah umumnya cuma dapat permission denied, dan tidak ada yang rusak. Root yang salah ketik perintah yang sama bisa menghapus seluruh mesin. Maka praktik terbaik zaman sekarang adalah: jangan login sebagai root untuk pekerjaan sehari-hari. Login sebagai user biasa, dan pinjam kuasa root hanya untuk momen spesifik yang memang membutuhkannya.
Jangan hidup sebagai root
Di server yang masih baru, kamu mungkin diberi akun root, dan godaannya besar untuk diam saja di situ karena semuanya “langsung jalan” tanpa error izin. Tahan godaan itu. Bekerja sebagai root seharian berarti satu perintah salah ketik bisa berakibat fatal, dan program apa pun yang kamu jalankan ikut mewarisi kendali penuh atas mesin. Buatlah user biasa untuk dirimu sendiri, beri kemampuan untuk naik level saat dibutuhkan (dibahas di bawah), dan simpan root untuk keadaan darurat sungguhan. Dirimu di masa depan bakal berterima kasih.
Grup itu apa, dan kenapa ada
Grup adalah sekumpulan user yang diberi nama. Konsepnya cuma itu — tapi dia memecahkan masalah yang sangat nyata.
Bayangkan lima developer sama-sama perlu membaca dan menulis berkas sebuah proyek. Tanpa grup, kamu harus memberi akses ke tiap orang untuk tiap berkas satu per satu, lalu memperbarui setiap berkas tiap kali ada yang masuk atau keluar tim. Repot dan rawan salah. Dengan grup, kamu cukup membuat satu grup — misalnya developers — masukkan kelima orang ke dalamnya, lalu beri akses ke berkas proyek untuk grup itu. Datang rekan keenam? Tinggal masukkan ke grup dan dia langsung punya akses. Mau mengeluarkan seseorang? Keluarkan dari grup. Berkasnya tidak perlu diutak-atik sama sekali.
Grup punya dua jenis, dan bedanya sering bikin orang bingung di awal:
- Grup utama (primary) — tiap user punya tepat satu. Saat user itu membuat berkas baru, berkas tadi secara default dimiliki oleh grup ini. Biasanya berupa grup pribadi dengan nama sama persis dengan username-nya (
janeada di grupjane). - Grup tambahan (secondary) — jumlahnya bebas, sifatnya opsional. Ini keanggotaan “kamu juga bagian dari tim ini”. Grup
sudo,docker, dandeveloperspada contoh tadi adalah grup tambahan. Mereka memberi akses ekstra tanpa mengubah identitas utamamu.
GRUP: developers
┌───────────────────────────────┐
│ jane john alex │
│ │ │ │ │
│ └────────┴────────┘ │
│ ketiganya bisa baca/tulis │
│ berkas milik grup ini │
└───────────────────────────────┘
Inilah sistem identitas yang sama yang dipakai sistem berkas Linux untuk menentukan siapa pemilik apa. Tiap berkas mencatat satu user pemilik dan satu grup pemilik, dan Linux mengecek keduanya terhadap dirimu saat kamu mencoba membukanya.
Membuat dan mengelola user
Membuat akun adalah hal yang bakal kamu lakukan di hampir setiap server yang kamu siapkan. Perintah di bawah ini adalah perintah standar dan netral vendor yang ada di praktis semua distribusi Linux. Sebagian besar butuh kuasa root, jadi biasanya kamu memberinya awalan sudo (kita jelaskan sudo sebentar lagi).
Membuat user baru, lengkap dengan home directory:
sudo useradd -m -s /bin/bash jane # -m membuat home dir, -s mengatur login shell
sudo passwd jane # atur (atau reset) password-nya
Sebagian distribusi juga punya skrip adduser yang lebih ramah, yang menanyaimu satu per satu secara interaktif lalu menyiapkan home directory untukmu. Keduanya sama-sama menghasilkan jenis akun yang sama.
Menghapus user saat dia sudah tidak perlu akses:
sudo userdel jane # menghapus akun, menyisakan folder home-nya
sudo userdel -r jane # menghapus akun BESERTA folder home-nya
Mengunci akun tanpa menghapusnya — berguna saat seseorang sedang pergi atau kamu belum yakin:
sudo usermod -L jane # kunci (nonaktifkan login)
sudo usermod -U jane # buka kunci
Daftar asli semua user di sistem tersimpan dalam berkas teks biasa, /etc/passwd. Walau namanya begitu, dia sudah tidak menyimpan password lagi — password di-hash dan disimpan di /etc/shadow, yang hanya bisa dibaca root. Kamu bisa mengintip daftar user-nya kapan saja:
cat /etc/passwd
Tiap baris menjelaskan satu akun: username, sebuah UID, ID grup utama, home directory, dan login shell, dipisahkan tanda titik dua.
Membuat dan mengelola grup
Grup punya sekumpulan perintahnya sendiri yang kecil, mirip perintah user:
sudo groupadd developers # membuat grup
sudo groupdel developers # menghapus grup
Tindakan sehari-hari yang paling penting adalah memasukkan user ke sebuah grup. Cara amannya pakai -aG — huruf a itu penting, karena artinya append alias menambahkan. Lupa pakai dia, dan kamu malah mengganti seluruh grup tambahan seseorang alih-alih menambah, yang bisa diam-diam mengunci dia keluar dari banyak hal.
sudo usermod -aG developers jane # masukkan jane ke "developers" (append — pertahankan grup lainnya)
Kamu bisa memastikan hasilnya dengan id jane, atau melihat daftar anggota sebuah grup dan isi berkas grup secara keseluruhan:
groups jane # jane tergabung di grup apa saja
getent group developers # siapa saja anggota grup "developers"
Keanggotaan grup sering butuh login ulang
Ini teka-teki klasik: kamu menambahkan dirimu ke sebuah grup, lalu menjalankan id, dan… grup barunya tidak muncul. Apa perintahnya gagal? Tidak — keanggotaan grup dihitung saat kamu login, jadi sesi-mu yang sekarang belum tahu soal perubahan itu. Logout lalu login lagi (atau buka sesi SSH baru) dan grup barunya muncul. Perubahannya nyata kok; sesi-mu cuma masih melihat foto lama tentang dirimu siapa.
Berpindah user dan meminjam kuasa: su dan sudo
Karena kamu sebaiknya tidak hidup sebagai root, Linux memberimu dua cara untuk sementara mengambil kuasa lebih saat sebuah tugas memang membutuhkannya.
su (“substitute user”) memindahkanmu ke identitas user lain untuk satu sesi penuh. Jalankan su - dan kamu jadi root (setelah memasukkan password root); jalankan su - john dan kamu jadi John. Kamu tetap jadi user itu sampai kamu mengetik exit. Ini perpindahan yang sifatnya semua-atau-tidak.
sudo (“superuser do”) adalah pendekatan modern yang lebih aman, dan yang paling sering kamu pakai. Dia membolehkan user yang berwenang menjalankan satu perintah saja sebagai root, dengan menanyakan password-mu sendiri (bukan password root), lalu langsung mengembalikanmu ke identitas normalmu:
sudo apt update # jalankan cuma perintah ini sebagai root
sudo systemctl restart nginx # dan yang ini
ls /root # kembali jadi dirimu — ini sekarang bakal bilang "permission denied"
Kelebihan sudo dibanding login sebagai root itu nyata dan layak dipahami:
- Least privilege secara default. Kamu menghabiskan hampir seluruh waktumu sebagai user terbatas, dan baru naik level untuk perintah yang persis membutuhkannya. Jendela untuk berbuat salah jadi sangat sempit.
- Jejak audit. Tiap perintah
sudotercatat lengkap dengan siapa yang menjalankannya dan kapan. Kalau tiga orang mengelola satu server, kamu bisa tahu persis siapa melakukan apa. - Kontrol yang detail. Kamu bisa memberi seseorang izin menjalankan hanya perintah-perintah tertentu lewat
sudo, alih-alih menyerahkan kunci seluruh kerajaan berupa password root.
Siapa yang boleh memakai sudo ditentukan oleh keanggotaan di sebuah grup — biasanya bernama sudo (keluarga Debian/Ubuntu) atau wheel (keluarga Red Hat). Memasukkan user ke grup itu persis adalah cara kamu memberi seorang admin baru kuasanya:
sudo usermod -aG sudo jane # jane kini bisa memakai sudo
Berpikir dulu sebelum tiap sudo
Perlakukan sudo sebagai momen untuk memperlambat, bukan mempercepat. Sepersekian detik antara mengetik perintah sudo dan menekan Enter adalah kesempatan terakhirmu untuk membaca ulang perintah itu. Sebagian besar kecelakaan server yang benar-benar merusak berawal dari sudo di depan perintah yang hampir benar — path yang salah, spasi yang nyasar, wildcard yang salah tempat. Kebiasaan melirik ulang barisnya sebelum dieksekusi adalah salah satu skill paling murah sekaligus paling berharga yang bakal kamu bangun sebagai pengelola server.
Bagaimana user, grup, dan akses saling terkait
Mundur sejenak dan seluruh sistemnya menyatu jadi satu gambar. Linux mengikat semuanya lewat identitas:
- Tiap berkas dan folder punya pemilik — satu user dan satu grup.
- Tiap program yang berjalan jalan sebagai user tertentu, mewarisi hak user itu.
- Saat kamu mencoba melakukan sesuatu, Linux mengecek identitasmu (user-mu, plus semua grup-mu) terhadap apa yang diizinkan oleh sasarannya.
Jadi “boleh nggak aku mengedit berkas ini?” sebenarnya berarti: apakah user-ku memilikinya, atau aku ada di grupnya, dan apakah tingkat kepemilikan itu memberi izin menulis? User dan grup adalah siapa-nya; permission adalah apa yang boleh dilakukannya. Mereka dua paruh dari kunci yang sama. Begitu kamu nyaman dengan sisi identitas di sini, langkah berikutnya yang wajar adalah sisi akses — aturan baca, tulis, dan eksekusi yang sebenarnya menempel di tiap berkas.
Kamu juga bakal sadar betapa banyak hal ini bergantung pada rasa nyaman di prompt. Kalau perintah-perintah di atas terasa asing, ada baiknya memantapkan dulu command line, karena tiap urusan kelola user dan grup terjadi di sana.
Penutup
Ini seluruh idenya dalam satu tempat:
- User adalah sebuah akun — identitas yang dikenali Linux. Sebagian user itu manusia; banyak juga yang berupa program (service account) yang jalan dengan hak terbatas.
- root (UID 0) adalah superuser yang maha-kuasa. Jangan dipakai untuk pekerjaan harian — risikonya terlalu tinggi.
- Grup adalah sekumpulan user yang diberi nama, supaya kamu bisa memberi akses ke satu tim sekaligus, bukan satu per satu.
- Tiap user punya satu grup utama (menentukan grup pada berkas yang dia buat) dan grup tambahan berapa pun (keanggotaan tim ekstra, seperti
sudoataudevelopers). - Kelola akun dengan
useradd,userdel,usermod,passwd; kelola grup dengangroupadd,groupdel, danusermod -aG(selalu append). - Pakai
sudountuk meminjam kuasa root satu perintah pada satu waktu — lebih aman ketimbang hidup sebagai root, dengan jejak audit bawaan dan least privilege secara default.
User dan grup menjawab pertanyaan kamu ini siapa. Pertanyaan persis berikutnya — apa yang boleh dilakukan identitas itu terhadap tiap berkas — ditentukan oleh permission berkas Linux, aturan baca/tulis/eksekusi yang duduk tepat di atas lapisan identitas ini. Di situlah gambarannya menjadi utuh.