DEVOPS/LINUX

[Linux] 프로세스 ID

연듀 2021. 12. 4. 15:46

 

 

프로세스는 프로세스를 구별하는 번호인 프로세스 ID를 갖는다.
각 프로세스는 자신을 생성해준 부모 프로세스가 있다.

 

int getpid( );  // 프로세스의 ID를 리턴한다.

int getppid( );  // 부모 프로세스의 ID를 리턴한다.

 

프로세스는 프로세스 ID 외에 프로세스의 사용자 ID와 그룹 ID를 갖는다.
 
-그 프로세스를 실행시킨 사용자의 ID와 사용자의 그룹 ID
-프로세스가 수행할 있는 연산을 결정하는 사용된다.

(프로세스의 권한을 통해 누구의 권한으로 어떤 리소스에 대한 할당 작업을 할것이냐를 결정해야 하는데, 사용자의 아이디로만 결정이 안될수도 있다.)

 

 

프로세스의 사용자 ID

 

실제 사용자 ID(real user ID)

 

그 프로세스를 실행한 원래 사용자의 사용자 ID로 설정된다.

 

 

유효 사용자 ID(effective user ID)

 

현재 유효한 사용자 ID로 새로 파일을 만들 때나 파일에 대한 접근권한을 검사할 주로 사용된다.
보통 유효 사용자 ID와 실제 사용자 ID는 특별한 실행파일 실행  할때를 제외하고는 동일하다.
 
 
 
 
-유효 사용자 ID의 목적
 
디스크에 vi가 있다고 가정하자. vi라는 프로세스가 생기고
vi의 소유주는 root, 실행한 사람은 kim이다.
이 프로세스의 real user ID와 effective user ID 모두 kim이다.
vi가 실행할 때 파일을 open하고 close하는데 이때 권한은 kim이다. 실행한 사람이 kim이기 때문이다.
 
passwd(패스워드를 바꾸는 명령)을 실행하면 주기억장치에 passwd라는 프로세스가 만들어진다.
passwd의 owner는 root이고 프로세스를 실행한 사람은 kim.
passwd라는 프로세스가 /etc/passwd , /etc/shadow 같은 시스템 파일을 수정한다.
/etc/passwd , /etc/shadow 이런 파일의 소유자는 root이다. kim같이 다른 사용자가 수정할 수 없다.
사용자가 패스워드를 바꾸려고 패스워드 명령을 내리면 수정이 안된다는 것이다.
 
이럴 때, passwd 프로세스를 실행할 때 real user ID는 kim이지만 effective user ID를 루트로 바꿔준다.
루트가 보유한 파일을 수정할 때 루트 권한으로만 가능하니까 임시로 바꿔주는 것이다.
이렇게 하면 수정 권한이 생긴다.
이런 상황을 위해 effective user ID가 별도로 존재한다.
 
 
 

 

프로세스 실제/유효 사용자 ID 변경

 

 

int setuid(uid_t uid); // 프로세스의 실제 사용자 ID를 uid로 변경한다.

int seteuid(uid_t uid); // 프로세스의 유효 사용자 ID를 uid로 변경한다.

 

Setuid는 루트만이 할 수 있고 real user ID를 바꾸는 거지만 effective user id도 바뀐다.

Seteiud real user ID는 안 바꾸고 effective userid만 바꾼다.

 

 

set-user-id

 

-set-user-id 설정된 실행파일을 실행하면 이 프로세스의 유효 사용자 ID는 그 실행파일의 소유자로 바뀜.
-이 프로세스는 실행되는 동안 그 파일의 소유자 권한을 갖게 됨.