[리눅스 시스템 프로그래밍] 4.4 chmod 명령의 또 다른 기능, 스티키 비트와 set user id bit

chmod 명령은 파일의 접근 허가 모드를 설정할 때 사용합니다. 그리고 이 외에도 chmod 명령은 스티키 비트와 set user id bit를 설정할 수 있습니다.

스티키 비트를 설정한 프로그램 파일을 한 번 실행하면 사용한 프로그램의 Text 세그먼트(코드를 기계어로 번역한 영역)를 스왑 파티션에 배치하여 빠르게 실행할 수 있게 하였습니다. 하지만 가상 메모리 처리로 지금은 스왑 파티션에 배치하지 않아도 속도 차이가 나지 않습니다. 지금은 스티키 비트를 설정하면 사용 권한은 부여하지만 파일의 삭제를 하지 못하게 할 때 스티키 비트를 설정합니다. 그리고 스티키 비트를 설정할 때는 t 옵션을 추가합니다. 예를 들어 chmod o+t temp 처럼 설정합니다.

그리고 chmod 명령을 통해 프로그램 파일에 set user id bit를 지정하면 실행할 때 프로세스는 로긴한 실제 사용자 ID(real user id) 권한이 아닌 소유자 ID 권한으로 동작합니다. 참고로 프로세스가 동작할 때 유효 사용자 ID 권한(effective user id) 권한으로 동작한다고 말합니다.

다음은 실제 사용자 ID와 유효 사용자 ID를 확인하는 예제 코드입니다.

/***********************************************************************
* ex_suid.c                                                            *
* example source - print user id and effective user id                 *
***********************************************************************/
#include <stdio.h>
#include <unistd.h>

int main(int argc,char **argv)
{        
    printf("real user id:%u\n",getuid());
    printf("effective user id:%d\n",geteuid());
    return 0;    
}

위의 소스 코드를 root 계정에서 작성한 후에 ex_suid로 컴파일한 후에 chmod u+s ex_suid 를 명령하면 해당 파일은 set user id bit를 설정할 수 있습니다. 그리고 다른 계정으로 로긴한 후에 실행하면 실제 사용자 ID와 유효 사용자 ID가 서로 다른 것을 확인할 수 있습니다.

[그림 4.5] set user id bit을 설정
[그림 4.5] set user id bit을 설정