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)
'Dev > linux' 카테고리의 다른 글
[Linux] Raspberry Pi 4B 와 카메라 모듈을 이용한 실시간 스트리밍 구축 (5) | 2021.05.30 |
---|---|
[Linux] vim 코드 자동완성 사용하기 (0) | 2020.12.08 |
Linux에서의 Shell & crontab을 이용한 Mysql 데이터베이스 백업 (0) | 2020.09.27 |
[Linux] Ubuntu Linux - Virtual Box에서의 고정 IP 할당 (0) | 2020.09.22 |
[Linux] Git 서버 구축 (1) | 2020.09.18 |