เมื่อคุณเรียกใช้จะค้นหา1ผู้ใช้ที่ระบุในและ(แม้ว่าจะเป็น LDAP, NIS หรืออย่างอื่น2 ) และแสดงกลุ่มทั้งหมดที่คุณพบgroups username/etc/passwd/etc/group
ในทางกลับกันเมื่อคุณเรียกใช้groupsคำสั่งโดยไม่ขัดแย้งใด ๆ มันก็จะแสดงรายการทุกกลุ่มตัวเองเป็น3 - ซึ่งเป็นที่ไม่จำเป็น/etc/groupเช่นเดียวกับสิ่งที่ระบุไว้ใน (ดูคำอธิบายด้านล่าง) ในความเป็นจริงการค้นหาเท่านั้นที่ทำขึ้นเพื่อ/etc/groupแปล GID ให้เป็นชื่อกลุ่ม
แต่ละกระบวนการมีชุดของข้อมูลรับรองซึ่งมี (เหนือสิ่งอื่นใด) "รหัสกลุ่มจริง" (GID หลัก), "รหัสกลุ่มที่มีประสิทธิภาพ" (EGID) และรายการของรหัส "กลุ่มเสริม" (GID รอง) โดยค่าเริ่มต้นกระบวนการสืบทอดข้อมูลรับรองจากพาเรนต์ อย่างไรก็ตามกระบวนการที่ทำงานในฐานะรูท (UID 0) หรือมีCAP_SETUIDความสามารถได้รับอนุญาตให้ตั้งค่าข้อมูลประจำตัวโดยพลการ
โดยเฉพาะอย่างยิ่งเมื่อคุณเข้าสู่ระบบ Linux (ไม่ว่าจะเป็น tty, X11 หรือมากกว่า SSH) กระบวนการเข้าสู่ระบบ (/ bin / เข้าสู่ระบบ, gdm, sshd) จะค้นหาชื่อผู้ใช้ของคุณเพื่อกำหนด UID, GID หลักและ GID รอง . บนเครื่องส่วนบุคคลนี่หมายถึงการอ่านบรรทัดที่เหมาะสมจากpasswdและgroupไฟล์ (หรือ NIS, LDAP และอื่น ๆ )
ถัดไปกระบวนการเข้าสู่ระบบจะเปลี่ยน4เป็นข้อมูลรับรองเหล่านั้นก่อนเริ่มเซสชันของคุณและทุกขั้นตอนที่คุณเปิดใช้ในตอนนี้จะมี UID & GID ที่เหมือนกันแน่นอน - ระบบจะไม่ตรวจสอบ/etc/groupอีกต่อไป5และจะไม่ทำการแก้ไขใด ๆ
ด้วยวิธีนี้/usr/bin/groupsกระบวนการจะเป็นของกลุ่มเดียวกันกับที่คุณทำเมื่อคุณเข้าสู่ระบบไม่ใช่สิ่งที่ฐานข้อมูลบอกว่าคุณเป็น
หมายเหตุ:คำอธิบายข้างต้นใช้กับยูนิกซ์เกือบทั้งหมด ในตระกูล Windows NT (ยกเว้น UID และ GID ทั้งหมดเรียกว่า "SID" ไม่มี "กลุ่มหลัก" ข้อมูลรับรองจะเรียกว่า "กระบวนการโทเค็น" และCAP_SETUIDเป็นSeCreateTokenPrivilegeหรือSeTcbPrivilege ); และน่าจะเป็นระบบปฏิบัติการหลายผู้ใช้ส่วนใหญ่
1 getpwuid () และ getgrouplist () ใช้เพื่อค้นหากลุ่มผู้ใช้
2บน Linux, glibc ใช้/etc/nsswitch.confเพื่อกำหนดตำแหน่งที่จะค้นหาข้อมูลนี้
3 groupsใช้ getgid (), getegid () และ getgroups () เพื่อรับสิทธิของตัวเอง
4 setuid (), setgid (), initgroups () และที่เกี่ยวข้อง
5ข้อยกเว้นของหลักสูตรเป็นเครื่องมือต่างๆที่ใช้งานสูง ( setuid ) เช่นsu, sudo, sg, newgrp, pkexecและอื่น ๆ ซึ่งหมายความว่าsu $USERจะวางไข่เชลล์ด้วยรายการกลุ่มที่อัปเดต