← กลับไปยังบทความทั้งหมด

Group Identifier (GID) คืออะไร? ทำความเข้าใจระบบกลุ่มใน Unix-like

สรุปใจความสำคัญ

  • GID คือตัวเลขที่ใช้ระบุกลุ่มผู้ใช้ในระบบ Unix-like เพื่อจัดการสิทธิ์การเข้าถึงทรัพยากร
  • Superuser หรือ Root มักจะมี GID เป็น 0 เสมอ
  • ระบบ POSIX รองรับ GID 3 ประเภท คือ Effective GID, Real GID และ Saved GID เพื่อการจัดการสิทธิ์แบบไดนามิก
  • ผู้ใช้หนึ่งคนสามารถมีกลุ่มหลัก (Primary Group) หนึ่งกลุ่ม และกลุ่มเสริม (Supplementary Groups) ได้หลายกลุ่ม

ในระบบปฏิบัติการตระกูล Unix-like ผู้ใช้หลายคนสามารถถูกจัดกลุ่มเข้าด้วยกันได้ โดยสิทธิ์การเข้าถึงไฟล์ในระบบ POSIX และ Unix แบบดั้งเดิมจะถูกแบ่งออกเป็นสามระดับ ได้แก่ ผู้ใช้ (User), กลุ่ม (Group) และ ผู้อื่น (Others) การใช้กลุ่มช่วยให้สามารถมอบหมายสิทธิ์การเข้าถึงทรัพยากรต่างๆ เช่น ดิสก์ เครื่องพิมพ์ และอุปกรณ์ต่อพ่วงอื่นๆ ได้อย่างเป็นระบบ นอกจากนี้ยังช่วยให้ผู้ดูแลระบบ (Superuser) สามารถมอบหมายงานบริหารจัดการบางอย่างให้แก่ผู้ใช้ทั่วไปได้ ซึ่งคล้ายกับกลุ่ม Administrators ใน Microsoft Windows NT

Group Identifier (GID) คืออะไร?

Group Identifier หรือ GID คือค่าตัวเลขที่ใช้แทนกลุ่มเฉพาะเจาะจง โดยช่วงของค่า GID จะแตกต่างกันไปตามแต่ละระบบ อย่างน้อยที่สุด GID จะมีค่าระหว่าง 0 ถึง 32,767 โดยมีข้อกำหนดสำคัญคือ กลุ่มล็อกอินสำหรับ Superuser จะต้องมี GID เป็น 0 ค่าตัวเลขนี้จะถูกนำไปใช้อ้างอิงกลุ่มในไฟล์ /etc/passwd และ /etc/group หรือไฟล์ที่เทียบเท่า รวมถึงในไฟล์รหัสผ่าน Shadow และ Network Information Service (NIS) ด้วย GID จึงเป็นส่วนประกอบสำคัญของระบบไฟล์และกระบวนการทำงานใน Unix

คุณลักษณะของกระบวนการ (Process Attributes)

มาตรฐาน POSIX รองรับฟิลด์ GID สามรูปแบบในตารางคำอธิบายกระบวนการ เพื่อให้กระบวนการที่มีสิทธิ์สูงสามารถเปลี่ยนบทบาทได้แบบไดนามิก:

1. Effective Group ID (egid)

Effective GID (egid) ของกระบวนการจะถูกนำมาใช้ในการตรวจสอบสิทธิ์การเข้าถึงไฟล์ และอาจส่งผลต่อการสร้างไฟล์ใหม่ ขึ้นอยู่กับการทำงานของเคอร์เนลและตัวเลือกการเมานต์ (Mount options) โดยมีหลักการดังนี้:

  • BSD Unix: สิทธิ์ความเป็นเจ้าของกลุ่มของไฟล์ที่สร้างขึ้นใหม่จะถูกสืบทอดมาจากกลุ่มของไดเรกทอรีที่ไฟล์นั้นถูกสร้างขึ้น
  • AT&T UNIX System V (รวมถึง Linux): ไฟล์ที่สร้างขึ้นใหม่มักจะได้รับสิทธิ์ความเป็นเจ้าของกลุ่มตามค่า egid ของกระบวนการที่สร้างไฟล์นั้น

ระบบไฟล์ส่วนใหญ่มีวิธีเลือกใช้หลักการของ BSD หรือ AT&T โดยหากมีการตั้งค่าสิทธิ์ S_ISGID (s-gid) ในไดเรกทอรีเฉพาะ จะมีการใช้หลักการของ BSD

2. Real Group ID (rgid)

Real GID (rgid) ใช้สำหรับระบุตัวตนของกลุ่มเจ้าของกระบวนการที่แท้จริง

3. Saved Group ID (sgid)

Saved Group ID ใช้เมื่อโปรแกรมที่ทำงานด้วยสิทธิ์สูงจำเป็นต้องทำงานบางอย่างที่ไม่มีสิทธิ์ชั่วคราว เมื่อมีการเปลี่ยน egid จากค่าที่มีสิทธิ์สูง (ปกติคือ 0) เป็นค่าที่ไม่มีสิทธิ์ จะทำให้ค่าที่มีสิทธิ์สูงถูกเก็บไว้ใน sgid เพื่อให้ภายหลังโปรแกรมสามารถตั้งค่า egid กลับมาเป็นค่าเดิมใน sgid เพื่อกู้คืนสิทธิ์ระดับสูงได้

กลุ่มเสริม (Supplementary Groups)

ผู้ใช้ทุกคนต้องเป็นสมาชิกของอย่างน้อยหนึ่งกลุ่ม ซึ่งเรียกว่า กลุ่มหลัก (Primary Group) ซึ่งระบุโดยค่า GID ในฐานข้อมูล passwd (ดูได้จากคำสั่ง getent passwd) นอกจากนี้ ผู้ใช้อาจเป็นสมาชิกของกลุ่มเพิ่มเติมในฐานข้อมูล group (ดูได้จากคำสั่ง getent group) ซึ่งเรียกว่า กลุ่มเสริม (Supplementary Group IDs)

ข้อกำหนดและมาตรฐาน (Conventions)

ประเภทของข้อมูล

ในยุคแรกมีการใช้จำนวนเต็มแบบมีเครื่องหมาย 16 บิต (Signed 16-bit integer) แต่เนื่องจากค่าติดลบไม่สามารถใช้เป็น GID ได้ จึงเปลี่ยนมาใช้จำนวนเต็มแบบไม่มีเครื่องหมาย (Unsigned integer) ซึ่งรองรับค่าระหว่าง 0 ถึง 65,535 ปัจจุบันระบบปฏิบัติการสมัยใหม่มักใช้จำนวนเต็มแบบไม่มีเครื่องหมาย 32 บิต ซึ่งรองรับค่าได้ตั้งแต่ 0 ถึง 4,294,967,295

ช่วงค่าที่ถูกสำรองไว้

ในระบบ Linux หลายระบบจะสำรอง GID ช่วง 0-99 สำหรับกลุ่มที่ถูกกำหนดไว้ล่วงหน้า (Statically allocated groups) และช่วง 100-499 หรือ 100-999 สำหรับกลุ่มที่ระบบสร้างขึ้นโดยอัตโนมัติในช่วงหลังการติดตั้ง ซึ่งค่าเหล่านี้มักถูกกำหนดไว้ใน /etc/login.defs

ค่าพิเศษ

  • 0: โดยปกติจะเป็น GID ของ Superuser
  • -1: ถูกสำรองไว้โดย POSIX เพื่อระบุว่าไม่มีการส่งอาร์กิวเมนต์
  • 65,534: ในเคอร์เนล Linux ค่านี้ (2^16 - 2) มักถูกกำหนดให้เป็นกลุ่ม "nogroup" เมื่อ GID แบบ 32 บิตไม่สามารถใส่ในค่าส่งกลับของ System Call แบบ 16 บิตได้

กลุ่มส่วนตัว (Personal Groups)

ผู้ดูแลระบบหลายคนมักสร้างกลุ่มหลักส่วนตัวให้ผู้ใช้แต่ละคน โดยให้มีชื่อและค่า GID เดียวกับชื่อล็อกอินและ UID ของผู้ใช้ เพื่อให้การทำงานร่วมกันในไดเรกทอรีที่แชร์กันทำได้ง่ายขึ้น โดยผู้ใช้สามารถใช้ umask 0002 เพื่อให้ไฟล์ที่สร้างขึ้นใหม่มีสิทธิ์เขียนสำหรับสมาชิกในกลุ่มได้โดยอัตโนมัติ ซึ่งในกรณีนี้สมาชิกกลุ่มจะมีเพียงเจ้าของไฟล์คนเดียวเท่านั้น

คำถามที่พบบ่อย

GID คืออะไร?

GID (Group Identifier) คือค่าตัวเลขที่ใช้แทนกลุ่มของผู้ใช้ในระบบ Unix-like เพื่อให้ระบบปฏิบัติการสามารถระบุได้ว่าผู้ใช้คนใดมีสิทธิ์เข้าถึงไฟล์หรือทรัพยากรใดบ้างตามการกำหนดสิทธิ์ของกลุ่ม

ความแตกต่างระหว่าง Real GID และ Effective GID คืออะไร?

Real GID คือกลุ่มที่แท้จริงของเจ้าของกระบวนการ ส่วน Effective GID (egid) คือกลุ่มที่ระบบใช้ในการตรวจสอบสิทธิ์การเข้าถึงไฟล์ในขณะที่กระบวนการนั้นกำลังทำงาน

ทำไมต้องมี Saved Group ID (sgid)?

Saved Group ID มีไว้เพื่อให้โปรแกรมที่ทำงานด้วยสิทธิ์สูงสามารถลดสิทธิ์ของตนเองลงชั่วคราวเพื่อความปลอดภัย และสามารถกู้คืนสิทธิ์ระดับสูงกลับมาได้ในภายหลัง