K 개발자

사용자 관련 정보 검색 본문

유닉스(Unix)/시스템 프로그래밍

사용자 관련 정보 검색

ddingz 2021. 8. 16. 22:34

로그인명과 UID 검색

로그인명 검색 : getlogin(3)

#include <unistd.h>

char *getlogin(void);

로그인명 검색 : cuserid(3)

#include <stdio.h>

char *cuserid(char *s);
// s : 검색한 로그인명을 저장할 주소

uid 검색 : getuid(2), geteuid(2)

#include <sys/types.h>
#include <unistd.h>

uid_t getuid(void);
uid_t geteuid(void);

패스워드 파일 검색

/etc/passwd 파일에는 로그인명, UID, GID, 사용자의 홈 디렉토리, 로그인 쉘 등 사용자에 관한 기본적인 정보가 들어 있다.

passwd 구조체

/etc/passwd 파일의 정보를 읽어오려면 passwd 구조체를 사용해야 한다.
passwd 구조체는 <pwd.h> 파일에 정의되어 있다.

struct passwd {
    char *pw_name;
    char *pw_passwd;
    uid_t pw_uid;
    gid_t pw_gid;
    char *pw_age;
    char *pw_comment;
    char *pw_gecos;
    char *pw_dir;
    char *pw_shell;
};

UID로 passwd 파일 읽기 : getpwuid(3)

#include <pwd.h>

struct passwd *getpwuid(uid_t uid);
// uid : 검색할 UID

이름으로 passwd 파일 읽기 : getpwnam(3)

#include <pwd.h>

struct passwd *getpwnam(const char *name);
// name : 로그인명

/etc/passwd 파일을 순차적으로 읽기 : getpwent(3), setpwent(3), endpwent(3), fgetpwent(3)

#include <pwd.h>

struct passwd *getpwent(void);
void setpwent(void);
void endpwent(void);
struct passwd *fgetpwent(FILE *fp);
// fp : 파일 포인터

섀도우 파일 검색

/etc/passwd 파일은 누구나 읽을 수 있기 때문에 보안 문제가 발생할 수 있어 현재 대부분의 유닉스 시스템은 사용자 패스워드를 /etc/shadow 파일에 별도로 저장하고 있다.

spwd 구조체

/etc/shadow 파일을 읽어오려면 spwd 구조체를 사용해야 한다.
spwd 구조체는 <shadow.h> 파일에 있다.

struct spwd {
    char *sp_namp;
    char *sp_pwdp;
    int sp_lstchg;
    int sp_min;
    int sp_max;
    int sp_warn;
    int sp_inact;
    int sp_expire;
    unsigned int sp_flag;
};

/etc/shadow 파일 검색 : getspnam(3)

#include <shadow.h>

struct spwd *getspnam(const char *name);
// name : 검색할 사용자명

/etc/shadow 파일을 순차적으로 읽기 : getspent(3), setspent(3), endspent(3), fgetspent(3)

#include <shadow.h>

struct spwd *getspent(void);
void setspent(void);
void endspent(void);
struct spwd *fgetspent(FILE *fp);
// fp : 파일 포인터

그룹 정보 검색

그룹 ID 검색하기 : getgid(2), getegid(2)

#include <sys/types.h>
#include <unistd.h>

gid_t getgid(void);
gid_t getegid(void);

그룹 파일 검색

유닉스에서는 그룹에 관한 정보를 /etc/group 파일에 별도로 저장한다.

group 구조체

/etc/group 파일에 저장된 그룹 정보를 읽어오려면 group 구조체를 사용해야 한다.
group 구조체는 <grp.h> 파일에 정의되어 있다.

struct group {
    char *gr_name;
    char *gr_passwd;
    gid_t gr_gid;
    char **gr_mem;
};

/etc/group 파일 검색 : getgrnam(3), getgrgid(3)

#include <grp.h>

struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);
// name : 검색하려는 그룹명, gid : 검색하려는 그룹의 ID

/etc/group 파일을 순차적으로 읽기 : getgrent(3), setgrent(3), endgrent(3), fgetgrent(3)

#include <grp.h>

struct group *getgrent(void);
void setgrent(void);
void endgrent(void);
struct group *fgetgrent(FILE *fp);
// fp : 파일 포인터

로그인 기록 검색

현재 시스템에 로그인하고 있는 사용자에 관한 정보와 시스템의 부팅 시각 정보나 사용자 로그인 기록 등의 정보는 /var/adm/utmpx와 /var/adm/wtmpx 파일에 저장된다.

utmpx 구조체

utmpx와 wtmpx 파일은 구조가 동일하다.
이 두 파일을 읽으려면 utmpx 구조체를 사용한다.
utmpx 구조체는 <utmpx.h> 파일에 정의되어 있다.

struct utmpx {
    char ut_user[32];
    char ut_id[4];
    char ut_line[32];
    pid_t ut_pid;
    short ut_type;
    struct exit_status ut_exit;
    struct timeval ut_tv;
    int ut_session;
    int pad[5];
    short ut_syslen;

    char ut_host[257];
};

/var/adm/utmpx 파일 순차적으로 읽기 : getutxent(3), setutxent(3), endutxent(3), utmpxname(3)

#include <utmpx.h>

struct utmpx *getutxent(void);
void setutxent(void);
void endutxent(void);
int utmpxname(const char *file);
// file : 교체할 파일명

'유닉스(Unix) > 시스템 프로그래밍' 카테고리의 다른 글

프로세스의 개념  (0) 2021.08.17
시간 관리 함수  (0) 2021.08.17
시스템 관련 정보 검색과 설정  (0) 2021.08.16
디렉토리 관련 함수  (0) 2021.08.16
링크 파일 생성  (0) 2021.08.16
Comments