Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เข้าถึง Group Database ใน Python (โมดูล grp)

โมดูล grp ให้เข้าถึง UNIX Group Database (/etc/group) คืนค่าเป็น Named Tuple-like Object

import grp


โครงสร้าง Group Entry

IndexAttributeคำอธิบาย
0gr_nameGroup Name
1gr_passwdEncrypted Password (ปกติเป็น 'x' หรือ ว่าง)
2gr_gidGroup ID (Numeric)
3gr_memList ของ 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')}")