Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python pwd 모듈로 암호 데이터베이스에 접근하는 방법

리눅스 시스템에서 암호 데이터베이스(password database)에 접근하려면 Python의 pwd 모듈을 사용하면 됩니다. 이 모듈을 활용하면 사용자 계정 정보와 암호 데이터베이스에 쉽게 접근할 수 있으며, 각 데이터베이스 항목은 튜플(tuple)과 유사한 객체 형태로 반환됩니다.

pwd 모듈을 사용하기 위해서는 먼저 다음과 같이 임포트해야 합니다.

import pwd

암호 데이터베이스 항목의 주요 속성

암호 데이터베이스의 각 항목은 다음과 같은 속성들을 가지고 있습니다.

인덱스속성 및 설명
0pw_name
사용자의 로그인 이름(사용자명)
1pw_passwd
암호화된 비밀번호
2pw_uid
사용자의 숫자형 ID(User ID)
3pw_gid
사용자가 속한 그룹의 숫자형 ID(Group ID)
4pw_gecos
사용자의 실제 이름 및 코멘트 필드
5pw_dir
사용자의 홈 디렉터리 경로
6pw_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 환경에서는 사용할 수 없습니다.