Computers/Linux System Programming

+ ch9. ( addition) process relationship

emzei 2013. 5. 20. 10:37

<사용자 id (user id)>

 - process : 4가지의 사용자 ID : real, effective, saved, file owner 

 

[ 실제 사용자 아이디 : real user id (ruid) ]

 - 프로세스를 실행한 원래 사용자의 id

 - 사용자 id는 프로세스 부모의 실제 사용자 id로 설정되며,  exec 호출 도중에 변경되지 않는다.

 - 대개, login 프로세스는 login shell의 실제 사용자 아이디를 해당 사용자의 실제 사용자 id로 설정한다.

 - 특권 사용자(root, superuser)는 실제 사용자 id를 다른 값으로 변경할 수 있지만, 다른 사용자는 변경불가

 

[ 유효 사용자 아이디 : effective user id(euid) ]

 - 프로세스가 영향을 미치는 사용자 id

 - 접근 권한의 기준으로 사용

 - 프로세스 생성 초기에는 부모 프로세스의 유효 사용자 id를 상속받기 때문에, 유효 사용자 id는 실제 사용자 id와 같으며, 

   exec 호출 시에도 일반적으로는 유효 사용자 id가 변경되지 않는다.

 - exec 호출 도중 실제 사용자 id와 유효 사용자 id가 무엇인지 확인할 수 있다. 

   setuid(uid)를 실행하면, 프로세스는 유효 사용자 id를 변경한다. 유효 사용자 id는 프로그램 파일을 소유한 사용자 id로 변경한다.

 - 유효 사용자 id는 프로그램 파일을 소유한 사용자 id로 설정된다. 

   예를 들어 /usr/bin/passwd 실행파일은 setuid 파일이며, 소유자는 root이므로 일반 사용자 shell에서 이 파일을 exec하기 위해 

   프로세스를 실행시킬 때, 이 프로세스는 실행하는 사용자와 무관하게 유효사용자 id를 root로 지정한다.

 - 비특권사용자는 유효 사용자 id를 실제 사용자 id나 저장된 사용자 id로 설정할 수 있다.특권 사용자는 유효 사용자 id를 변경할 수 있다.


[ 저장된 사용자 아이디 : saved user id(suid) ]

 - 프로세스의 본래 유효 사용자 id

 - 프로세스가 fork할 때 자식 프로세스는 부모 프로세스의 저장된 사용자 id를  상속받는다. 하지만, exec을 호출할 때 커널은 

   저장된 사용자 id를 유효 사용자 id로 설정한다. 따라서 exec 할 때 유효 사용자 id를 기록한다.

 - 비특권 사용자는 저장된 사용자 id를 변경하지 못한다. 특권 사용자만이 실제 사용자 id와 동일한 값으로 변경할 수 있다.


* 유효 사용자 id : 프로그램 실행 자격을 확인하는 사용자 id

* 실제 사용자 id : 프로그램을 실제 수행시키는 사용자에게 속한 유효 사용자 id

* 저장된 사용자 id : exec 호출 시 변경되기 전까지 유효 사용자 id


 

 

 

#include <sys/types.h>

#include <unistd.h>


int setuid(uid_t uid);   // 현재 프로세스의 유효 사용자 id 설정

int setgid(gid_t gid);   // 현재 프로세스 그룹의 유효 사용자 id 설정


반환값 : 

  성공시 0

  오류시 -1 , 

    errno 는 다음 중 하나를 가짐 

    - EAGAIN : uid가 실제 사용자 uid와 다르며, 실제 사용자 id를 uid로 설정하는 것이 소유 가능한 프로세스 개수(NPROC limit) 초과

    - EPERM  : 사용자가 root가 아니며, uid가 유효 사용자 id가 아님

 

 

◇ setuid() : 프로세스의 현재 유효 사용자 id가 root(0)이면 실제 사용자 id 와 저장된 사용자 id가 함께 설정

◇ 특권 사용자는 uid를 어떤 값으로든 설정 가능

◇ 비특권 사용자는 uid로 실제 사용자 id와 저장된 사용자 id만 사용할 수 있음

   ⇒ root가 아닌 사용자는 유효 사용자 id를 실제 사용자 id나 저장된 사용자 id로 설정 가능

 

'Computers > Linux System Programming' 카테고리의 다른 글

ch11. Threads  (0) 2013.06.16
ch10. signal  (0) 2013.05.20
ch9. process relationship  (0) 2013.05.20
ch8. process control  (0) 2013.04.28
ch7. process environment  (0) 2013.04.28