리눅스 ruid, euid 저장 위치
리눅스에서 프로세스와 ruid, euid에 대해 공부하던 중 턱 막히는 부분이 있어 질문드립니다.
먼저 ruid와 euid에 대해 알고 있는 내용은 이렇습니다.
프로그램이 실행되어 프로세스가 되면 실행자의 id로 그 프로세스의 ruid가 세팅된다.
만약 이 프로그램이 setuid가 설정되어 있었다면 euid는 그 프로그램의 소유자의 id로,
setuid가 설정되어 있지 않았다면 euid는 프로세스 실행자의 id 즉, ruid와 같게 세팅된다.
리눅스 커널은 실행된 프로세스의 euid를 보고 판단하여 그 프로세스가 시스템 내의 특정 자원에 접근해도 되는지 판단하고 이를 허용 또는 불허한다.
또, 실행된 프로세스가 프로세스 내에서 다른 프로그램을 실행시킨다면 리눅스 커널은 실행되어 있는 프로세스의 ruid를 가지고 새로 실행되는 프로세스의 ruid로 설정한다.
여기까지 입니다.
그런데 리눅스 커널이 프로세스의 ruid와 euid를 보고 그 다음 행위를 판단할 수 있다는 얘기는
커널이 실행되어 있는 프로세스의 ruid와 euid에 대한 정보를 메모리 상의 어딘가에 저장해 놓고 관리한다는 얘기가 되지 않나요?
그래서 리눅스 PCB의 필드 또는 /proc 디렉터리에 있지 않을까 하여 뒤져 보았으나 ruid와 euid에 대한 정보를 찾지 못했습니다.
리눅스는 도대체 어디에 실행 프로세스의 ruid와 euid를 저장하고 관리하나요?
질문을 요약하겠습니다.
1. 리눅스 커널은 실행되는 프로세스의 ruid와 euid를 메모리 상의 어딘가에는 저장하여 관리를 하고 있죠?
2. 프로세스의 ruid와 euid를 저장하고 관리하는 자료구조가 있는 영역은 어디인가요?
어느 질문에 대해서라도 정보를 조금이라도 알고 계신 분들이 계시다면 어떤 코멘트도 감사할 것 같습니다.
리눅스 커널의 setresuid, getresuid
리눅스 커널의 setresuid, getresuid syscall 구현을 살펴보면 금방 알 수 있겠죠?
http://lxr.free-electrons.com/source/kernel/sys.c
감사합니다
커널 코드를 보면 되겠군요. 실력을 좀 더 쌓아서 코드를 완전 이해할 수 있도록 해야겠습니다. 좋은 팁 감사합니다.
댓글 달기