<사용자 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 |