Linux 사용자

mohadang·2023년 3월 11일
0

Linux System Programming

목록 보기
5/9
post-thumbnail
post-custom-banner

사용자 추가는 admin만 할 수 있다.

$ sudo adduser {username}

Linux에서는 동시에 여러 사용자로 접속 가능

ID

UID : 사용자에게 부여된 ID 번호
Real User ID : 최초에 process를 실행한 user의 UID, 일반적으로 로그인 되어 있는 사용자
Effective User ID(EUID) : 현재 process가 행사(wield)하는 UID, process가 가진 권한 판단에 사용.
Safed user ID(SUID) : process의 최초의 effective user id. process 실행 후 EUID를 변경할 수 있음. 원래 EUID로 돌아가기 위해 사용.

Effective User ID(EUID)

현재 process가 행사하는 UID 권한.
기본적으로는 Real UID와 같음.
실행 파일의 setuid bit = 1인 경우 해당 파일 소유자(owner)의 UID가 effective UID가 됨

Effective UID는 process 실행중 파일 권한 관련 처리가 필요할 때 사용한다.

  • 교수는 processor 계정을 사용하고 학생은 real user 라는 계정을 사용한다.
  • processor는 Grade.db 파일을 만들어서 여기에 학생 성적을 기록 하였다.
  • processor는 getMyGrade.out 프로그램을 만들었다. 이 프로그램은 학번을 입력하면 myGrade.txt 파일을 생성하여 해당 학생의 성적을 기록하는 프로그램이다.
  • getMyGrade는 setuid가 설정되어 있지 않을경우
    • real user가 getMyGrade.out 실행(RUID = readl user, EUID = real user, SUID = real user)
    • getMyGrade.out가 Grade.db에 접근하려고 하지만 권한 에러. Grade.db는 소유자 professor에 대해서만 읽기 권한이 있다.
  • getMyGrade는 setuid가 설정되어 있을 경우
    • real user가 getMyGrade.out 실행(RUID = readl user, EUID = professor, SUID = professor)
    • setuid가 설정되어 있어 EUID는 professor이다.
    • getMyGrade.out이 Grade.db를 읽어올 수 있음
    • !! 이 상태에서 그대로 파일 저장하면 myGrade.txt 권한이 professorrk 될 수 있음으로 RUID(real user)로 권한 변경 후 파일을 저장 해야한다.

SUID는 윈도우의 권한 상승과 비슷한데 다만 관리자로 권한을 상승 하는게 아니라 해당 파일 소유자(owner)의 UID로 변경 되는 것이다.

Ex

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(void) {
  // 처음 uid, euid 출력
  uid_t uid = getuid();
  uid_t euid = geteuid();
  printf("[Init] UID=%d, EUID=%d\n", (int)uid, (int)euid);
  
  // euid를 uid로 설정 후 출력
  seteuid(getuid());
  int cur_euid = (int)geteuid();
  printf("[seteuid(uid)] UID = %d, EUID=%d\n", (int)uid, (int)cur_euid);
  
  // 처음 euid로 복구 후 출력
  seteuid(euid);
  cur_euid = (int)geteuid();
  printf("[seteuid(euid)] UID = %d, EUID=%d\n", (int)uid, (int)cur_euid);  
  return 0;
}
  • setuid bit가 설정되어 있지 않고 실행하면 차이가 없다. uid와 euid가 같으니
  • 하지만 setuid bit가 설정되어 있고 파일을 생성한 사용자와 실행한 사용자가 다를경우 uid 와 euid가 다르다.

/etc/passwd file

  • 사용자에 대한 기본 정보가 들어 있는 파일
    • 라인 하나당 사용자 하나에 대한 정보.
    • ;를 이용하여 속성값 구분
  • LoginID, Password, UID, GID ... 있음
  • 단 Password는 암호화 되어 있어 보이지 않음
  • 리눅스에서는 /etc/passwd에 저장되어 있는 사용자 하나에 대한 정보를 구조체로 제공한다.
struct passwd 
{
  char* pw_name;
  ...
};

/etc/shadow file

암호화 된 사용자 정보. 사용자 password를 암호화 해서 저장하고 있음.

Group ID

계정은 그룹에 포함될 수 있다. 그룹에 대한 ID를 Group ID(GUID)라고 한다.
그 이외에 UID와 같은 메커니즘으로 동작 한다.

/etc/group

그룹 정보를 답고 있는 파일. 역시 group에 대한 구조체도 제공

profile
mohadang
post-custom-banner

0개의 댓글