본문 바로가기
리눅스

[리눅스 API] 사용자와 그룹

by 목가 2015. 8. 5.
반응형

/etc/passwd : 시스템 패스워드파일로 사용자 계정별로 한 줄씩 기록되어 있고, 줄마다 다음과 같이 콜론(:)으로 구분된 7개의 필드로 이뤄져 있다.

mkt:x:1000:100:Mokga:/home/mkt:bin/bash

각 필드는 순서대로 다음과 같다.

로그인 이름, 암호화된 패스워드, 사용자 ID, 그룹 ID, 주석, 홈 디렉토리, 로그인 쉘


/etc/shadow : 암호화된 패스워드를 저장하여 특권 프로그램만 읽을 수 있도록 함(shadow 메뉴얼 참고)

/etc/group : 그룹별로 한 줄씩 기록되어 있고, 줄마다 다음과 같이 콜론으로 나뉜 4개의 필드로 이뤄져 있다.

users:x:100:

jambit:x:106:claus,felly,frant,mkt,mok

각 필드는 순서대로 다음과 같다.

그룹이름, 암호화된 패스워드, 그룹ID, 사용자 목록


#include <pwd.h>

struct passwd *getpwnam(const char *name) : 성공하면 포인터를 리턴하고, 에러가 발생하면 NULL을 리턴

struct passwd *getpwuid(uid_t uid) 성공하면 포인터를 리턴하고, 에러가 발생하면 NULL을 리턴

각각 사용자 이름/uid 를 인자로 받아서 패스워드 레코드 정보를 포인터로 리턴받는다.

리턴값이 NULL인 경우 errono 가 0이면 레코드정보가 없고, 그렇지 않으면 에러이다.


struct passwd *getpwent(void) : 성공하면 포인터를 리턴하고, 스트림의 끝이거나 에러가 발생하면 NULL을 리턴

 - 패스워드 파일의 레코드를 하니씩 리턴

void setpwent(void)

 - 패스워드 파일을 처음부터 다시 읽도록 설정한다.

void endpwent(void)

 - 패스워드 파일의 리턴값이  NULL 이면 파일을 닫아준다


#define _XOPEN_SOURCE

#include <unistd.h>

char *crypt(const char *key, const char *salt) : 성공하면 암호화된 패스워드를 담고 있는 정적으로 할당된 문자열의 포인터를 리턴한고, 에러가 발생하면 NULL을 리턴

 - 8자까지의 키에 변형된 DES(Data Encryption Standard) 알고리즘을 적용한다. salt 인자는 2자짜리 문자열로 알고리즘에 변형을 가하는데 이용된다.crypt 사용 후에는 바로 암호가 저장된 메모리를 지워야 한다. 프로그램이 오류로 중단되어 코어 덤프를 만들 경우 암호가 노출될 수 있다. 

char *getpass(const char *prompt) 성공하면 암호화된 정적으로 할당된 입력 패스워드 문자열의 포인터를 리턴한고, 에러가 발생하면 NULL을 리턴

 - 먼저 키입력이 화면에 표시되지 않도록 하고 터미널의 모든 특수문자 처리를 금지한다. 그 다음에 prompt가 가리키는 문자열을 출력하고 한 줄을 입력 받은뒤, 함수의 결과로, 맨 끝의 줄바꿈 문자를 제거한 널로 끝나는 입력 문자열을 리턴한다. 리턴 전에 터미널 설정을 원래대로 복원한다. 


  

반응형

'리눅스' 카테고리의 다른 글

[리눅스] udev, rules.d 사용  (0) 2015.08.09
[리눅스 API] 프로세스 자격증명  (0) 2015.08.06
[리눅스 API] 메모리 할당  (0) 2015.08.03
[리눅스] 파일시스템  (0) 2015.07.31
[리눅스 API] 프로세스  (0) 2015.07.27

댓글