GID, ID grup saat ini, primer, tambahan, efektif, dan nyata?


22

Tautan berikut membahas konsep-konsep ini dalam konteks yang berbeda. Saya telah membaca definisi mereka, tetapi saya masih tidak dapat mengetahui bagaimana mereka terkait, atau jika beberapa dari mereka adalah sama.

Inilah salah satu contoh sumber kebingungan saya:

Menurut man id, jika saya mengetik id, saya harus mendapatkan apa yang mereka sebut ID grup yang efektif dan nyata .

id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

Namun, Wikipedia mengacu pada hasil iduntuk membedakan antara ID primer dan tambahan . Selain itu, Wikipedia membedakan antara id kelompok utama vs tambahan dan efektif vs nyata . Bagaimana konsep-konsep ini berhubungan satu sama lain?

Juga, apakah benar ID grup primer = ID grup = ID grup saat ini ?


Pertanyaan tidak jelas: tautan yang Anda berikan memberi banyak informasi. Bagaimana dengan itu?
psusi

Jawaban:


24

Anda mencampur dua perbedaan di sini:

  1. Antara id grup nyata dan efektif
  2. Antara kelompok pengguna primer dan tambahan

Perbedaan pertama mengacu pada bagaimana proses dijalankan . Biasanya, ketika Anda menjalankan perintah / program, itu dijalankan dengan hak istimewa pengguna Anda. Ini memiliki id grup nyata yang sama dengan grup utama pengguna Anda. Ini dapat diubah oleh suatu proses untuk melakukan beberapa tugas sebagai anggota dari kelompok khusus lain. Untuk melakukan itu, program menggunakan setgidfungsi yang mengubah id grup efektif mereka .

Perbedaan kedua mengacu pada pengguna . Setiap pengguna memiliki grup utamanya . Hanya ada satu per pengguna dan disebut sebagai gid di output idperintah. Terlepas dari itu, setiap pengguna dapat menjadi bagian dari sejumlah kelompok tambahan - dan ini terdaftar di akhir idoutput.

[Sunting]:

Saya setuju bahwa halaman manualnya idagak menyesatkan di sini. Mungkin karena ini adalah versi deskripsi yang disediakan oleh dokumen info. Untuk melihatnya lebih jelas, jalankan info coreutils "id invocation"(seperti yang disarankan di akhir idmanual).


Terima kasih @rozcietrzewiacz. Itu sangat membantu. Dapatkah saya menganggap bahwa ID grup saat ini = grup utama ?
Amelio Vazquez-Reina

1
Secara umum, tidak. Grup "asli" saat ini dapat diubah menggunakan newgrpperintah - lihat paragraf kedua dari manual di tautan pertama Anda!
rozcietrzewiacz

18

Tampilan kernel

Secara konseptual, ada tiga set kelompok yang prosesnya menjadi anggotanya. Setiap set adalah himpunan bagian dari yang berikut.

  1. Grup tunggal yang merupakan grup default proses, di mana file yang dibuat oleh proses ini akan menjadi milik.
  2. Himpunan grup yang diperiksa saat grup memerlukan izin untuk membuka file.
  3. Himpunan kelompok yang dapat digunakan oleh proses yang berjalan dengan proses hak istimewa ekstra.

Untuk alasan historis, perangkat ini masing-masing:

  1. yang ID kelompok yang efektif (EGID);
  2. ID grup efektif ditambah ID grup tambahan ;
  3. semua yang di atas ditambah ID grup asli dan set-group-ID yang disimpan .

Biasanya, suatu program memiliki ID pengguna tunggal. Jika executable memiliki set bit mode setuid , maka program memiliki dua ID pengguna: ID pengguna yang efektif adalah yang penting untuk izin file, batas per-pengguna, menentukan apakah proses berjalan sebagai root dan sebagainya. Proses ini dapat beralih antara ID pengguna yang efektif dan yang asli, jika tidak memerlukan hak istimewa ekstra sepanjang waktu, atau jika perlu beralih antara dua pengguna non-root.

Mekanisme yang sama ada untuk grup. Untuk grup, ada fitur tambahan yang tidak ada ketika sistem dirancang: proses dapat menjadi anggota dari sejumlah grup; ini adalah ID grup tambahan.

Tampilan basis data pengguna

Setelah pengguna diautentikasi, proses login beralih ke pengguna itu, tepat sebelum meluncurkan shell pengguna (atau program apa pun yang diminta pengguna). Tepat sebelum beralih ke pengguna yang diinginkan (dan kehilangan hak akses root), proses login beralih ke grup yang diinginkan.

Dalam versi unix awal, proses hanya bisa dalam satu kelompok. Grup ini adalah ID grup utama pengguna, disimpan dalam basis data pengguna (biasanya /etc/passwd). Grup ini menjadi ID grup nyata dan efektif dari shell atau program lain yang diluncurkan oleh proses login.

Saat ini, suatu proses dapat dilakukan dalam beberapa grup, sehingga pengguna juga dapat berada dalam beberapa grup. Database grup (biasanya /etc/group) berisi daftar pengguna untuk setiap grup. Grup-grup ini menjadi ID grup tambahan untuk program yang diluncurkan oleh proses login.


Terima kasih. Saya punya beberapa pertanyaan untuk memahami balasan Anda. unix.stackexchange.com/questions/466742/...
Tim

1

Banyak jawaban bagus lainnya di sini, tetapi jika Anda masih bingung seperti saya, inilah pendekatan lain. Harap dicatat bahwa saya hanya seorang siswa dalam hal ini, bukan seorang master , jadi jawaban ini adalah pekerjaan yang sedang berjalan, dan belum dianggap sebagai jawaban yang solid, setidaknya belum. Pertimbangkan jawaban ini v0.2.

Grup itu sederhana dan kompleks pada saat bersamaan.

Kunci ID yang digunakan di bawah:

KEY  Full name --------  Description---------------------------------------------

 u   User                 uID = User  ID (a unique # associated with each user)
 g   Group                gID = Group ID (a unique # associated with each group)
                            While each /etc/passwd entry has one uID and one gID,
                            additional gIDs can be associated with a users via
                            /etc/group.


 L   Login          IDs - uID and gID produced from the Login process.  
                            ('L' is not exactly standard Linux terminology, but
                            useful for explanations below.)

 F   File           IDs - uID and gID retrieved from a file's ownership.
                            ('F' is not exactly standard Linux terminology, but
                            useful for explanations below.)


 R   Real           IDs - Who actually                      runs a process 
 E   Effective      IDs - Who spoofed via setuid or setgid, runs a process
 O   Original Eff.  IDs - Place to save the original Effective ID when changing 
                          it (e.g. temporarily downgrading it) so can later 
                          restore it.  Also called "Saved ID"; (but 'S' was not 
                          used for here to help avoid confusion with the 'S' in  
                          'SetUserID' & SetGroupID.)
 +   Supplimentary gIDs - Optional, additional groups (none or more) running 
                          this process which can be used to test for permissions.

Nama ID Pengguna dan Grup:

Category          USER  GROUP  Notes  
----------------- ----  -----  -------------------------------------------  
 From login:      LuID  LgID   From /etc/passwd lookup

 From files:      FuID  FgID   Each file has these. Set by creator process.


 For each running process:

            Real  RuID  RgID   Actual   user starting the program
       Effective  EuID  EgID   Assigned user starting the program*
           Saved  OuID  OgID   Saves original effective ID.
   Supplementary        +gID1  (optional, additional groups)
                        +gID2     
                         ...  

Bagaimana proses memperoleh ID:

1) Login mengautentikasi nama pengguna dan mengembalikan LuIDdan LgIDdari /etc/passwd.

2) Proses pertama mengatur efektif = nyata = masuk, yaitu

EuID=RuID=LuID 
EgID=RgID=LgID

3) anak Forked mewarisi RuID, EuID, RgID, dan EgID, (& mungkin disimpan & supp), namun,

  • Jika s u id bit (s) diatur pada file program baru untuk mengeksekusi, kemudian menetapkan efektif dari file:

    EuID = FuID

  • Jika s g bit id (s) diatur pada file program baru untuk mengeksekusi, kemudian menetapkan efektif dari file:

    EgID = FgID

Catatan: Opsi suid dan nosuid mount filesystem yang mendasarinya juga berlaku.

4a) Jika s u id digunakan untuk mengatur EuID, maka EuIDdapat sementara diubah (misalnya diturunkan dari root), tetapi pertama-tama nilai aslinya disimpan OuIDsehingga dapat dikembalikan nanti jika diinginkan.

4b) Jika sg id digunakan untuk mengatur EgID, maka EgIDdapat sementara diubah (misalnya diturunkan dari root), tetapi pertama-tama nilai aslinya disimpan OgIDsehingga dapat dikembalikan nanti jika diinginkan.


Saat file akan dibuat:

File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)

Untuk membuka untuk membaca:

If FuID = EuID  and  user-read bit is set, or  
If FgID = EgID  and group-read bit is set, or  
If FgID = +gID1 and group-read bit is set, or  
If FgID = +gID2 and group-read bit is set, ...  
then allow reading.

Untuk membuka untuk menulis:

(Same as above but write bit set to allow writing.)

Untuk membuka eksekusi:

(Same as above but execute bit set to allow execution.)

Ketika pesan perlu dikirim:

Use RuID and RgID.  (Not EuID or EgID). *(Not sure where I read this.)*

Referensi: kredensial pria

Ekstra: Ini adalah utilitas untuk mencetak file / etc / group Anda dengan cantik:

cat /etc/group | sort -t: -k3n | awk  -F ':' \
  'BEGIN{printf "\n%-20s %-3s %-8s %s", \
           "Group name","pw", "Group ID ", "User list"}\
   BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
           "----------","--", "---------", "---------"} \
        { printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.