Mengapa output dari `grup` berbeda dari` grup pengguna` jika saya saat ini masuk sebagai pengguna?

21

Saya tidak yakin mengapa yang berikut memiliki output yang berbeda. Pemahaman saya adalah bahwa grup tanpa menentukan pengguna memberikan semua grup yang menjadi anggota.

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

Juga apa artinya "grup dari proses saat ini" (dari halaman manual grup)? Di mana mereka mengatur?

CATATAN: Distro saya adalah Ubuntu.

Jake
sumber
@Jake Coba logout lalu kembali.
1
Saya mengalami masalah ini secara terbalik. 'groups myname' memberi saya semua grup yang saya miliki di file / etc / groups, tetapi melakukan 'grup' hanya menunjukkan kepada saya grup utama saya. Dan, memang, perintah yang mengharuskan saya berada dalam kelompok pelengkap tertentu gagal karena kurangnya izin. Semoga saja aku tahu apa yang menyebabkan ini.
Todd Walton

Jawaban:

11

Itu bisa salah satu dari yang berikut:

  • Ini bisa jadi bug (walaupun saya ragu)
  • Anda mungkin harus keluar dan masuk lagi

Grup diatur dalam /etc/group.


sumber
8

Sama seperti setiap proses memiliki ID pengguna nyata dan efektif saat ini, dan ID grup nyata dan efektif, itu juga memiliki daftar kelompok tambahan . Ini adalah angka (bukan nama) yang dikelola oleh kernel. Mereka diatur oleh proses login (atau manajer tampilan) ketika Anda login, seperti ID pengguna Anda. Mereka diwarisi oleh sub-proses, seperti ID pengguna Anda.

Ketika Anda menjalankan groupstanpa argumen, ia pada akhirnya memanggil getgroups () untuk mendapatkan daftar grup tambahan dari kernel. (Pada sistem Linux saya, / usr / bin / groups adalah skrip shell yang menjalankan "id -Gn", yang selanjutnya memanggil getgroups ().)

Ketika Anda menjalankan groups username, perintah harus "menebak" apa yang akan kelompok tambahan ketika pengguna login. Biasanya ini dilakukan dengan membaca / etc / group atau berbicara dengan NIS atau berbicara dengan nscd atau ... Ya, ada banyak cara mungkin berhasil.

Apa yang Anda amati mirip dengan mengetahui bahwa ID pengguna Anda saat ini dan entri Anda di / etc / passwd tidak konsisten. Ini berarti ada sesuatu yang sedikit aneh tentang konfigurasi sistem Anda, tetapi sulit untuk mengatakan apa tanpa penyelidikan lebih lanjut.

Nemo
sumber
3

(Catatan: groupsPerintah, meskipun masih berguna, sebagian besar digantikan oleh perintah id .)

Seorang pengguna memiliki grup utama yang secara tradisional didefinisikan dalam file /etc/passwdfile yang dengannya ia login, tetapi hari ini mungkin memiliki sumber lain. Dia juga dapat menjadi anggota kelompok tambahan, yang dikenal sebagai kelompok sekunder atau tambahan, secara tradisional ditentukan dalam file /etc/groups, tetapi yang hari ini juga dapat berasal dari atau tersirat oleh sumber tambahan (seperti NIS, LDAP, SAMBA dll).

Grup primer dan tambahan didefinisikan pada saat login dan tetap terkini . Namun, pengguna dapat setiap saat mengubah grup utama aktif saat ini dengan menggunakan newgrpperintah.

Proses login menetapkan kelompok primer dan tambahan. Untuk yang selanjutnya, ia biasanya memanggil fungsi libc di grup , yang mengkompilasi daftar data kelompok tambahan dan meneruskannya ke fungsi setgroup , yang menetapkannya dalam konteks proses.

Sumber informasi initgroupsadalah:

digunakan oleh Perpustakaan C GNU dan aplikasi lain tertentu untuk menentukan sumber dari mana untuk mendapatkan informasi layanan nama dalam berbagai kategori, dan dalam urutan apa. Setiap kategori informasi diidentifikasi dengan nama basis data.

The groupsperintah menunjukkan kelompok sebagai saat ini diterapkan untuk pengguna Anda, dan daftar akan mulai dengan kelompok utama saat ini diikuti oleh kelompok-kelompok tambahan dari waktu login. Setiap perubahan pada sumber data dari setelah waktu login tidak tercermin dalam daftar yang ditampilkan.

The groups usernameperintah meminta Linux untuk menghitung kelompok-kelompok untuk user tersebut, yang akan melakukan menggunakan terutama file /etc/password dan /etc/groupskemudian sumber tambahan. Ini akan mencerminkan situasi saat ini dari file sistem dan mungkin tidak sama dengan grup saat ini yang masih berlaku sejak saat login.

The groups usernameperintah dapat memberikan hasil yang berbeda ketika tidak menggunakan semua sumber yang proses login yang digunakan untuk menghitung kelompok pelengkap, yang adalah apa yang tampaknya terjadi dalam kasus Anda. Sumber-sumber ini mungkin tidak dapat diakses dari login Anda atau mungkin tidak dikonsultasikan dengan perintah.

Menggunakan id usernameperintah dapat memberikan hasil yang lebih baik, meskipun juga tidak dijamin selengkap proses login. The idperintah lebih baru daripada, dan dimaksudkan untuk menjadi lebih tepat daripada, yang lama groupsperintah.

Sementara groupsperintah memberikan hasil yang tepat dan benar, Anda telah menunjukkan dengan baik bahwa groups usernameperintah tidak dapat diandalkan untuk melakukan hal yang sama.

Tanpa memeriksa kode sumber dari groupsperintah, saya akan menebak bahwa implementasi groups usernameperintah dalam analisis distribusi Linux Anda /etc/groups, yang dalam kasus Anda tidak mengandung apa-apa, tetapi tidak digunakan /etc/nsswitch.conf, dari mana datang semua kelompok tambahan Anda. Karena itu hanya tercantum nama grup utama jacob,.

Untuk informasi lebih lanjut, lihat:

harrymc
sumber