Unix/Linux 암호 데이터베이스(pwd) 접근 개요
파이썬 표준 라이브러리의 pwd 모듈은 Unix/Linux 운영체제에서 사용자 계정의 암호 데이터베이스(password database)에 접근할 수 있는 기능을 제공합니다. 이 데이터베이스의 각 항목(entry)은 튜플과 유사한 객체 형태로 저장되며, 그 구조는 CPython API의 pwd.h 파일에 정의된 passwd 구조체를 따릅니다.
passwd 구조체의 필드 구성
| 인덱스 | 속성 | 의미 |
|---|---|---|
| 0 | pw_name | 로그인 이름 |
| 1 | pw_passwd | 암호화된 비밀번호(선택 사항) |
| 2 | pw_uid | 숫자형 사용자 ID |
| 3 | pw_gid | 숫자형 그룹 ID |
| 4 | pw_gecos | 사용자 이름 또는 주석 필드 |
| 5 | pw_dir | 사용자 홈 디렉터리 |
| 6 | pw_shell | 사용자 명령 인터프리터(셸) |
pwd 모듈의 주요 함수
pwd 모듈에서 제공하는 함수 목록은 다음과 같이 확인할 수 있습니다.
>>> import pwd
>>> dir(pwd)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'getpwall', 'getpwnam', 'getpwuid', 'struct_passwd']
getpwnam() – 사용자 이름으로 조회
getpwnam() 함수는 지정한 사용자 이름에 해당하는 암호 데이터베이스의 레코드를 반환합니다.
>>> pwd.getpwnam('root')
pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')getpwuid() – UID로 조회
getpwuid() 함수는 주어진 UID(사용자 ID)에 해당하는 레코드를 반환합니다.
>>> pwd.getpwuid(0)
pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')
getpwall() – 전체 사용자 목록 조회
getpwall() 함수는 튜플의 리스트를 반환하며, 각 튜플에는 개별 사용자의 passwd 구조 정보가 담겨 있습니다. 이때 구조 내의 uid와 gid 항목은 정수형입니다.
KeyError 예외 처리
전달된 매개변수에 해당하는 항목을 찾지 못하면 KeyError 예외가 발생합니다. 따라서 존재하지 않는 사용자를 조회할 가능성이 있다면 예외 처리를 함께 고려하는 것이 좋습니다.
>>> pwd.getpwnam('hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'getpwnam(): name not found: hello'