각 프로세스는 프로세스를 구별하는 번호인 프로세스 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는 그 실행파일의 소유자로 바뀜.
-이 프로세스는 실행되는 동안 그 파일의 소유자 권한을 갖게 됨.
'DEVOPS > LINUX' 카테고리의 다른 글
[Linux] 소프트웨어 관리 명령어 정리(파일 압축, RPM, YUM) (0) | 2024.07.30 |
---|---|
[Linux] 관리자 명령어 - 파일시스템 보안 (0) | 2024.07.30 |
[Linux] 프로그램 실행 시작, 종료 (0) | 2021.12.04 |
[Linux] 프로세스 명령어(sleep, kill, exit) (0) | 2021.12.04 |
[Linux] 프로세스란?(+init프로세스) (0) | 2021.12.04 |