리눅스 시스템에서 암호 데이터베이스(password database)에 접근하려면 Python의 pwd 모듈을 사용하면 됩니다. 이 모듈을 활용하면 사용자 계정 정보와 암호 데이터베이스에 쉽게 접근할 수 있으며, 각 데이터베이스 항목은 튜플(tuple)과 유사한 객체 형태로 반환됩니다.
pwd 모듈을 사용하기 위해서는 먼저 다음과 같이 임포트해야 합니다.
import pwd
암호 데이터베이스 항목의 주요 속성
암호 데이터베이스의 각 항목은 다음과 같은 속성들을 가지고 있습니다.
| 인덱스 | 속성 및 설명 |
|---|---|
| 0 | pw_name 사용자의 로그인 이름(사용자명) |
| 1 | pw_passwd 암호화된 비밀번호 |
| 2 | pw_uid 사용자의 숫자형 ID(User ID) |
| 3 | pw_gid 사용자가 속한 그룹의 숫자형 ID(Group ID) |
| 4 | pw_gecos 사용자의 실제 이름 및 코멘트 필드 |
| 5 | pw_dir 사용자의 홈 디렉터리 경로 |
| 6 | pw_shell 사용자의 명령 인터프리터(셸) |
참고: 일반적으로 pw_passwd 필드에는 암호화된 비밀번호가 저장됩니다. 하지만 최신 시스템들은 대부분 섀도우 패스워드(shadow password) 방식을 사용하기 때문에, 실제로는 pw_passwd 필드에서 '*' 또는 'x' 기호만 확인할 수 있습니다. 실제 비밀번호 해시는 별도의 /etc/shadow 파일에 저장되며 root 권한으로만 읽을 수 있습니다.
pwd 모듈의 주요 메서드
pwd.getpwuid(uid)
지정된 숫자형 사용자 ID(uid)에 해당하는 암호 데이터베이스 항목을 반환합니다.
pwd.getpwnam(name)
지정된 사용자 이름(name)에 해당하는 암호 데이터베이스 항목을 반환합니다.
pwd.getpwall()
암호 데이터베이스에 등록된 모든 사용자 항목을 리스트 형태로 반환합니다.
예제 코드
import pwd
# root 계정의 상세 정보 출력
print("Root: " + str(pwd.getpwnam('root')) + '\n')
# 전체 사용자 목록 출력
for entry in pwd.getpwall():
print("Name: " + entry[0] + "\t\tShell: " + entry.pw_shell)실행 결과
$ python3 example.py 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') Name: root Shell: /bin/bash Name: daemon Shell: /usr/sbin/nologin Name: bin Shell: /usr/sbin/nologin Name: sys Shell: /usr/sbin/nologin Name: sync Shell: /bin/sync Name: games Shell: /usr/sbin/nologin Name: man Shell: /usr/sbin/nologin ……. ……. …….
위 실행 결과를 보면, getpwnam('root') 호출 시 root 계정의 전체 정보가 구조체 형태로 출력되며, getpwall()을 통해 시스템에 등록된 모든 사용자의 이름과 기본 셸 정보를 순차적으로 확인할 수 있습니다. 참고로 이 모듈은 Unix/Linux 계열 시스템에서만 동작하므로 Windows 환경에서는 사용할 수 없습니다.