Linux Group Management — groupadd, groupmod, groupdel จัดการ Group

ใน Linux ทุก Process และไฟล์มีเจ้าของเป็น User และ Group กลไก Group ช่วยให้ผู้ดูแลระบบจัดการสิทธิ์การเข้าถึงสำหรับผู้ใช้หลายคนพร้อมกันได้อย่างมีประสิทธิภาพ แทนที่จะต้องกำหนดสิทธิ์ทีละ User การเพิ่ม User เข้า Group เดียวกันทำให้ทุกคนในกลุ่มได้รับสิทธิ์เท่ากันทันที

บทความนี้อธิบายคำสั่งสำหรับจัดการ Group ได้แก่ groupadd, groupdel, groupmod และการใช้ usermod -aG เพื่อเพิ่ม User เข้า Group พร้อมแนวคิดเรื่อง Primary และ Supplementary Group

Primary Group และ Supplementary Group

User แต่ละคนใน Linux มีความสัมพันธ์กับ Group สองประเภท ได้แก่ Primary Group และ Supplementary Group

Primary Group คือ Group หลักที่ใช้เมื่อ User สร้างไฟล์ใหม่ — ไฟล์ที่สร้างจะมี Group Ownership เป็น Primary Group นั้น โดยปกติเมื่อสร้าง User ด้วย useradd ระบบจะสร้าง Group ที่มีชื่อเดียวกับ User มาให้โดยอัตโนมัติ ข้อมูล Primary Group เก็บในฟิลด์ที่ 4 ของ /etc/passwd

Supplementary Group คือ Group เพิ่มเติมที่ User เป็นสมาชิก ใช้สำหรับควบคุมสิทธิ์การเข้าถึงทรัพยากรเฉพาะ เช่น ใส่ User เข้า Group docker เพื่อให้ใช้ Docker ได้โดยไม่ต้อง sudo หรือใส่เข้า Group sudo เพื่อให้ใช้สิทธิ์ root ได้ ข้อมูล Group เก็บใน /etc/group

groupadd — สร้าง Group ใหม่

groupadd สร้าง Group ใหม่ในระบบ โดยเพิ่มข้อมูลเข้าไปใน /etc/group และ /etc/gshadow

# สร้าง group พื้นฐาน
groupadd developers

# สร้าง group พร้อมระบุ GID เอง
groupadd -g 1500 devops

# สร้าง system group (GID ต่ำกว่า 1000)
groupadd -r appgroup

# ตรวจสอบว่า group ถูกสร้างแล้ว
grep developers /etc/group

Option ที่ใช้บ่อย

  • -g GID — กำหนด Group ID (GID) เอง แทนที่จะให้ระบบกำหนดอัตโนมัติ
  • -r — สร้างเป็น System Group (GID ต่ำกว่า 1000) ใช้สำหรับ Service ต่าง ๆ
  • -f — ถ้า Group ชื่อนั้นมีอยู่แล้ว ไม่ต้อง error (Exit code 0)

usermod -aG — เพิ่ม User เข้า Group

การเพิ่ม User เข้า Supplementary Group ทำด้วย usermod -aG ซึ่ง -a หมายถึง append (เพิ่มเติม) และ -G หมายถึง Supplementary Groups การลืมใส่ -a จะทำให้ Group เดิมทั้งหมดถูกแทนที่ ซึ่งเป็นข้อผิดพลาดที่พบบ่อยมาก

# เพิ่ม user เข้า group เดียว
usermod -aG docker somchai

# เพิ่ม user เข้าหลาย group พร้อมกัน
usermod -aG sudo,developers,docker somchai

# ตรวจสอบ group ที่ user เป็นสมาชิก
groups somchai
id somchai

# หมายเหตุ: การเปลี่ยน group มีผลหลัง logout/login ใหม่เท่านั้น
# หรือใช้คำสั่งนี้ให้มีผลทันที (เฉพาะ session ปัจจุบัน)
newgrp developers

groupmod — แก้ไข Group

groupmod ใช้แก้ไข Attribute ของ Group ที่มีอยู่แล้ว เช่น เปลี่ยนชื่อหรือ GID

# เปลี่ยนชื่อ group
groupmod -n newname oldname

# เปลี่ยน GID ของ group
groupmod -g 1600 developers

# ตัวอย่าง: เปลี่ยน group "devteam" เป็น "backend"
groupmod -n backend devteam

groupdel — ลบ Group

groupdel ลบ Group ออกจากระบบ ข้อควรระวังคือไม่สามารถลบ Group ที่เป็น Primary Group ของ User ใด ๆ ได้ — ต้องเปลี่ยน Primary Group ของ User เหล่านั้นก่อน

# ลบ group
groupdel developers

# ตรวจสอบว่า group ถูกใช้เป็น primary group ของ user ใดไหม
grep ":1500:" /etc/passwd   # แทน 1500 ด้วย GID ของ group นั้น

# ดู GID ของ group ก่อนลบ
grep developers /etc/group

ดูข้อมูล Group

# ดู group ทั้งหมดในระบบ
cat /etc/group

# ดู group ที่ user คนปัจจุบันเป็นสมาชิก
groups

# ดู group ของ user อื่น
groups username
id username

# ดูข้อมูล group เฉพาะ (GID, สมาชิก)
getent group developers

# ค้นหา user ทั้งหมดที่อยู่ใน group
getent group docker

โครงสร้างไฟล์ /etc/group

ไฟล์ /etc/group เก็บข้อมูล Group ทุก Group ในระบบ แต่ละบรรทัดมีรูปแบบ: groupname:password:GID:members

# ตัวอย่างเนื้อหาใน /etc/group
docker:x:999:somchai,deploy
developers:x:1500:alice,bob,somchai
sudo:x:27:somchai

# ฟิลด์แต่ละส่วน:
# docker    = ชื่อ group
# x         = password (ไม่ใช้แล้วในระบบสมัยใหม่)
# 999       = GID
# somchai,deploy = รายชื่อสมาชิก (supplementary members)

Use Case จริง — จัดการสิทธิ์ทีม Developer

ตัวอย่างการตั้งค่า Group สำหรับทีม Developer ที่ต้องการเข้าถึง Web Root ร่วมกัน

# 1. สร้าง group สำหรับทีม
groupadd -g 1500 webteam

# 2. เพิ่ม user ทุกคนในทีมเข้า group
usermod -aG webteam alice
usermod -aG webteam bob
usermod -aG webteam charlie

# 3. กำหนดสิทธิ์บน Web Root ให้ group
chown -R www-data:webteam /var/www/html
chmod -R 775 /var/www/html

# 4. กำหนด SetGID bit เพื่อให้ไฟล์ใหม่ใช้ group webteam อัตโนมัติ
chmod g+s /var/www/html

# 5. ตรวจสอบ
ls -la /var/www/html

Best Practices สำหรับ Group Management

  • ตั้งชื่อ Group ให้สื่อความหมาย — ใช้ชื่อที่บอกหน้าที่ได้ทันที เช่น webteam, dbadmin, deployers
  • อย่าลืม -a ใน usermod -aG — การลืม -a จะลบ Supplementary Group เดิมทั้งหมดออก เป็นข้อผิดพลาดที่เกิดบ่อยมาก
  • ใช้ Group แทนการแชร์ Password — แทนที่จะแชร์ credentials ให้ใช้ Group จัดการสิทธิ์ทรัพยากรร่วมกัน
  • Review สมาชิก Group สม่ำเสมอ — ตรวจสอบว่ามีสมาชิกที่ไม่ควรอยู่ใน Group ที่มีสิทธิ์สูง เช่น sudo หรือ docker
  • ระวัง docker group — สมาชิก Group docker สามารถ escalate เป็น root ได้โดยไม่ต้องใช้ sudo เพิ่ม User เฉพาะที่จำเป็นจริง ๆ

สรุป

Group เป็นกลไกสำคัญสำหรับจัดการสิทธิ์การเข้าถึงแบบกลุ่มบน Linux คำสั่งหลักที่ต้องรู้จักได้แก่ groupadd สำหรับสร้าง, groupmod สำหรับแก้ไข, groupdel สำหรับลบ และ usermod -aG สำหรับเพิ่ม User เข้า Group จุดที่ต้องระวังที่สุดคือการใส่ -a ทุกครั้งเมื่อใช้ usermod -G และการตรวจสอบสมาชิก Group ที่มีสิทธิ์สูงอย่างสม่ำเสมอ

แนะนำบริการ DE

การจัดการ Group และสิทธิ์การเข้าถึงบน Server จริงต้องการ Root Access เต็มรูปแบบ Cloud VPS ของ DE มอบสิทธิ์ Root ให้คุณฝึกตั้งค่า Group, จัดการสิทธิ์ไฟล์, และกำหนด Access Control ได้อย่างอิสระ เหมาะสำหรับทั้งการเรียนรู้และ Production จริง

สำหรับผู้ที่ต้องการโฮสต์เว็บไซต์โดยไม่ต้องจัดการ User/Group ระดับ System Cloud Hosting ของ DE มีระบบจัดการสิทธิ์ผ่าน Control Panel ที่ปลอดภัยและใช้งานง่าย