โมดูล grp ให้เข้าถึง UNIX Group Database (/etc/group) คืนค่าเป็น Named Tuple-like Object
import grp
โครงสร้าง Group Entry
| Index | Attribute | คำอธิบาย |
|---|---|---|
| 0 | gr_name | Group Name |
| 1 | gr_passwd | Encrypted Password (ปกติเป็น 'x' หรือ ว่าง) |
| 2 | gr_gid | Group ID (Numeric) |
| 3 | gr_mem | List ของ User Names ใน Group |
เมธอดหลัก
getgrgid(gid)- ค้นหาจาก GID (KeyError ถ้าไม่เจอ)getgrnam(name)- ค้นหาจาก Group Name (KeyError ถ้าไม่เจอ)getgrall()- คืน Entries ทั้งหมด
โค้ดตัวอย่าง
import grp
# ค้นหาจาก GID
print("GID 4:", grp.getgrgid(4))
# ค้นหาจากชื่อ
print("cdrom group:", grp.getgrnam('cdrom'))
# วนลูปทั้งหมด
for entry in grp.getgrall():
print(f"Group: {entry.gr_name:15} GID: {entry.gr_gid:5} Members: {entry.gr_mem}")
ผลลัพธ์ (ต้อง sudo สำหรับบาง Group)
GID 4: grp.struct_group(gr_name='adm', gr_passwd='x', gr_gid=4, gr_mem=['syslog', 'unix_user']) cdrom group: grp.struct_group(gr_name='cdrom', gr_passwd='x', gr_gid=24, gr_mem=['unix_user']) Group: root GID: 0 Members: [] Group: daemon GID: 1 Members: [] Group: adm GID: 4 Members: ['syslog', 'unix_user'] Group: cdrom GID: 24 Members: ['unix_user'] Group: sudo GID: 27 Members: ['unix_user'] ...
การประยุกต์ใช้
- ตรวจสอบ User อยู่ใน Group หรือไม่:
user in grp.getgrnam('docker').gr_mem - List Users ใน Group
- Audit Group Memberships
- Dynamic Permission Checks
ตัวอย่าง: ตรวจสอบ User ใน Group
import grp, pwd, os
def user_in_group(username, groupname):
try:
group = grp.getgrnam(groupname)
return username in group.gr_mem
except KeyError:
return False
# ตรวจสอบ Current User
current_user = pwd.getpwuid(os.getuid()).pw_name
print(f"User '{current_user}' in 'sudo': {user_in_group(current_user, 'sudo')}")
print(f"User '{current_user}' in 'docker': {user_in_group(current_user, 'docker')}")