Pengguna, grup, dan kepemilikan berkas Linux: cara memeriksanya

Linux memberikan ID pengguna (user ID atau UID) kepada akun dan ID grup (group ID atau GID) kepada grup. Berkas menyimpan identitas pengguna dan grup pemiliknya, sedangkan akun dapat memiliki grup utama serta grup tambahan. Gunakan id, groups, getent, dan ls -l untuk memeriksa hubungan tersebut. Panduan ini berfokus pada membaca informasi kepemilikan tanpa mengubah akun atau pemilik berkas.

Pemeriksaan akun dan grup menjadi dasar untuk memahami kepemilikan dan izin akses dalam panduan berbahasa Inggris. Pahami pula mengapa perubahan keanggotaan grup mungkin memerlukan sesi masuk baru sebelum menelusuri masalah akses.

Arti ID pengguna dan ID grup

Nama akun yang mudah dibaca, seperti learner, berhubungan dengan UID berupa angka yang digunakan sistem. Grup juga memiliki nama dan GID numerik. Grup utama pengguna adalah grup pokok yang tercatat dalam data akun; grup tambahan merupakan keanggotaan lain di luar grup utama itu. Penentuan akses mempertimbangkan pemilik berkas, grup, bit izin, dan aturan sistem lainnya. Keanggotaan grup saja tidak memberi hak untuk membaca atau mengubah semua berkas milik grup tersebut.

Akun administrator root biasanya mempunyai UID 0. Jangan beranggapan UID dan GID pengguna biasa selalu dimulai dari 1000; nilainya bergantung pada sistem dan kebijakan pembuatan akun.

Memeriksa pengguna dan grup sesi saat ini

Perintah berikut dapat dijalankan oleh pengguna biasa dan tidak mengubah akun. id menunjukkan nama pengguna dan grup beserta ID numeriknya. id -un mencetak nama pengguna, id -gn mencetak nama grup, dan id -nG mencetak nama grup-grup dalam konteks proses saat ini. Dalam sesi masuk biasa, grup yang ditampilkan id -gn adalah grup utama pengguna; secara khusus, opsi ini membaca grup efektif proses, yang dapat berbeda jika konteks grup proses telah diubah.

id
id -un
id -gn
id -nG
groups

Contoh keluaran id adalah uid=1000(learner) gid=1000(learner) groups=1000(learner),10(wheel). Ini hanya ilustrasi; nama, angka, dan grup yang sebenarnya berbeda-beda. Bagian gid=... menunjukkan ID grup utama dalam contoh tersebut, sedangkan groups=... mencantumkan grup yang berlaku bagi sesi saat ini.

groups memberikan daftar nama grup yang lebih singkat. Jika administrator baru saja mengubah keanggotaan Anda, sesi masuk yang sudah terbuka mungkin belum memperoleh daftar grup baru. Bedakan konfigurasi dalam basis data akun dari grup yang diterapkan pada proses saat ini. Jika pencarian nama grup gagal, periksa ID numerik dengan id -g atau id -G dan telusuri sumber data akunnya; pesan galat pencarian nama tidak berarti grup numeriknya tidak ada.

Mengambil data akun dengan getent

getent meminta data dari basis data akun dan grup melalui Name Service Switch (NSS), mekanisme sistem untuk memilih sumber serta urutan pencarian informasi nama. Bergantung pada konfigurasi, hasilnya dapat berasal dari berkas lokal atau layanan direktori eksternal. Karena itu, getent dapat mencerminkan pencarian nama yang sebenarnya dengan lebih baik daripada membaca /etc/passwd saja. Periksa akun dan grup sesi saat ini dengan:

getent passwd "$(id -un)"
getent group "$(id -gn)"

Baris hasil getent passwd biasanya berisi nama, penanda tempat kata sandi, UID, GID utama, keterangan, direktori beranda, dan shell untuk masuk, yang dipisahkan oleh titik dua. Ini tidak berarti kata sandi ditampilkan sebagai teks biasa. Baris getent group berisi antara lain nama grup dan GID. Daftar anggota pada baris grup belum tentu mencantumkan setiap pengguna yang memakai grup itu sebagai grup utama, sehingga gunakan id untuk memeriksa grup pengguna tertentu.

Karena id -gn mengikuti grup efektif proses, kueri grup di atas mengikuti konteks sesi tersebut. Jika perlu membandingkannya dengan grup utama yang tercatat pada akun, lihat kolom GID utama dalam baris getent passwd. Perbedaan antara data akun dan konteks proses perlu diperiksa sebelum menyimpulkan bahwa hasilnya salah.

Instalasi minimal mungkin tidak menyertakan getent. Jika demikian, periksa alat pencarian yang disediakan oleh pustaka C atau distribusi yang terpasang. Jangan menyunting /etc/passwd atau /etc/group secara sembarangan untuk mengubah data akun.

Membaca pengguna dan grup pemilik berkas

Buat berkas latihan untuk diperiksa. Jika ~/linux-course-16-practice sudah ada, pilih nama lain. Berhenti jika mkdir atau cd gagal; lanjutkan hanya setelah pwd memastikan bahwa Anda berada dalam direktori latihan baru. touch dapat mengubah cap waktu jika diberi nama berkas yang sudah ada.

mkdir ~/linux-course-16-practice
cd ~/linux-course-16-practice
pwd
touch own.txt
ls -l own.txt

Pada baris keluaran ls -l, dua nama setelah izin dan jumlah tautan biasanya menunjukkan pengguna dan grup pemilik berkas. Berkas baru biasanya dimiliki pengguna yang membuatnya, tetapi grupnya dapat bergantung pada pengaturan direktori induk dan perilaku sistem berkas. Jangan menganggap grup berkas selalu sama dengan grup utama pengguna. Ukuran dan cap waktu juga dapat berbeda sesuai lingkungan. Jika nama pemilik atau grup tidak dapat ditemukan, GNU ls dapat menampilkan ID numeriknya.

GNU stat dapat mencetak nama serta ID numerik pada satu baris. Penanda %U dan %G menampilkan nama pengguna dan grup pemilik; %u dan %g menampilkan ID numerik masing-masing, sedangkan %n menampilkan nama berkas. Nama yang tidak dapat ditemukan dapat ditampilkan sebagai UNKNOWN; bandingkan ID numeriknya sebelum menyimpulkan bahwa kepemilikan hilang.

stat -c '%U | %G | %u | %g | %n' own.txt

Keluarannya dapat menyerupai learner | learner | 1000 | 1000 | own.txt, tetapi periksa nilai yang muncul pada sistem Anda. Kepemilikan mencatat siapa pemilik berkas; izin adalah informasi terpisah yang menentukan tindakan yang diperbolehkan. chown mengubah kepemilikan dan dapat memengaruhi data nyata, sehingga tidak dijalankan dalam latihan pemeriksaan ini.

Tiga perbedaan yang perlu diingat

  • Nama pengguna dan UID: Nama digunakan untuk tampilan dan pencarian; sistem juga menggunakan ID numerik.
  • Grup utama dan grup tambahan: Bedakan satu grup utama dalam data akun dari berbagai grup yang berlaku dalam sesi.
  • Data akun dan sesi saat ini: Perubahan basis data belum tentu memperbarui keanggotaan grup pada sesi yang sudah terbuka.

Ketika menelusuri masalah izin, jalankan id terlebih dahulu untuk mengetahui pengguna dan grup sesi, kemudian ls -l atau stat untuk memeriksa pengguna serta grup pemilik berkas tujuan. Bandingkan keduanya sebelum memeriksa pengaturan izin agar penyebab masalah lebih mudah dipersempit.

Dokumentasi resmi

Manual GNU Coreutils menjelaskan id, groups, ls, dan stat. Manual getent(1) serta manual nsswitch.conf(5) membahas cara pencarian data akun.