본문 바로가기

Dev/linux

[Linux] 파일 접근 허가 상수

Linux 커널에 대해 예문을 참고해가며 공부하다 메모해두면 차후 유용할 것 같은 정보를 두서없이 남깁니다.

 

아래는 시스템이 기동 할 때, 커널의 디버그 디렉터리에 rpi_debug라는 폴더를 생성하고 어떠한 값을 val이라는 파일명으로 저장하는 커널 모듈 함수입니다.

 

static int __init rpi_kernel_debug_debugfs_init(void)
{
    printk("===[%s][L:%d]===\n", __func__,__line__);
    rpi_kernel_debug_debugfs_root = debugfs_create_dir("rpi_debug", NULL);
    debugfs_create_file("val",S_IRUGO, rpi_kernel_debug_debugfs_root, NULL, &rpi_kernel_debug_stat_fops);
    
    return platform_driver_register(&rpi_kernel_debug_debugfs_driver);
}
    

 

여기서 debugfs_create_file 함수의 매개변수 중 S_IRUGO라는 상수가 무엇인지 궁금해 알아봤습니다.

한 마디로 정리하면 파일에 대한 유저 권한을 지정하는 상수입니다.

 

리눅스에서는 어떠한 파일에 대한 사용 권한을 소유자, 그룹, 그외 사용자로 각각 분류 해 관리합니다.

그리고 각 사용자들은 읽기, 쓰기, 실행 권한을 선택적으로 부여받습니다.

따라서 커널 코드에서 무언가 파일을 생성하기 위해서는

"어떠한 사용자가 이 파일에 대해 어디까지 권한을 행사할 수 있는가?"

를 지정해 주어야할 필요가 있는 것입니다.

 

위 코드에서는 그러한 유저 권한을 S_IRUGO 상수로 정의해주고 있습니다.

S_IRUGO는 소유자, 그룹, 그 외 사용자가 이 파일을 "읽기"만 가능하도록 지정하는 상수입니다.

 

아래 표는 그 외 접근 허가 상수들입니다.

(파일 타입 상수는 포함하지 않았습니다.)

 

분류 ID Value Desc
소유자 S_IRWXU 00700 owner에 대한 read write, excute 권한 허용
S_IRUSR 00400 owner에 대한 read 권한 허용
S_IWUSR 00200 owner에  대한 write 권한 허용
S_IXUSR 00100 group에 대한 excute 권한 허용
그룹 S_IRWXG 00070 group에 대한 read write, excute 권한 허용
S_IRGRP 00040 group에 대한 read 권한 허용
S_IWGRP 00020 group에 대한 write 권한 허용
S_IXGRP 00010 group에 대한 excute 권한 허용
그외 사용자 S_IRWXO 00007 other에 대한 read write, excute 권한 허용
S_IROTH 00004 other 대한 read 권한 허용
S_IWOTH 00002 other 대한 read write, excute 권한 허용
S_IXOTH 00001 other 대한 excute 권한 허용
#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO) owner, group, other에 대한 read, write, excute 권한 허용
S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH) owner, group, other에 대한 read, 권한 허용
S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH) owner, group, other에 대한 write 권한 허용
S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH) owner, group, other에 대한 excute 권한 허용

 

참고로 S_IRWXU ~ S_IXOTH에대한정의는 아래의 커널 소스코드에서 확인 가능합니다.

[linux/include/uapi/linux/stat.h] 혹은 [linux/tools/include/uapi/linux/stat.h](라즈비안)

(github.com/torvalds/linux/blob/master/include/uapi/linux/stat.h)

 

 

그리고 #define으로 재정의된 상수는 아래의 커널 소스에서 확인 가능합니다.

linux/include/linux/stat.h

(github.com/torvalds/linux/blob/master/include/linux/stat.h)