[ Summary of File Access Permission Bits ]
상수 | 설명 | 정규 파일에 대한 효과 | 디렉터리에 대한 효과 |
S_ISUID | SUID | 실행 시 유효 사용자 ID를 설정 | (not used) |
S_ISGID | SGID | 그룹 실행 비트가 설정되어 있으면 실행 시 유효 그룹 ID를 설정. 그렇지 않으면 필수 레코드 잠금을 활성화(지원되는 경우) | 디렉터리 안에서 생성된 새 파일들의 그룹 ID를 디렉터리의 그룹ID로 설정 |
S_ISVTX | sticky bit | 파일 내용의 캐싱을 제어 (지원되는 경우) | 디렉터리 안의 파일들의 제거 및 이름 변경을 제한 |
S_IRUSR | 사용자 읽기 | 사용자가 파일을 읽을 수 있음 | 사용자가 디렉터리 항목들을 읽을 수 있음 |
S_IWUSR | 사용자 쓰기 | 사용자가 파일을 기록할 수 있음 | 사용자가 디렉터리 안에서 파일 을 제거하거나 생성할 수 있음 |
S_IXUSR | 사용자 실행 | 사용자가 파일을 실행할 수 있음 | 사용자가 주어진 경로이름을 디렉터리 안에서 검색할 수 있음 |
S_IRGRP | 그룹 읽기 | 그룹이 파일을 읽을 수 있음 | 그룹이 디렉터리 항목들을 읽을 수 있음 |
S_IWGRP | 그룹 쓰기 | 그룹이 파일을 기록할 수 있음 | 그룹이 디렉터리 안에서 파일을 제거하거나 생성할 수 있음 |
S_IXGRP | 그룹 실행 | 그룹이 파일을 실행할 수 있음 | 그룹이 주어진 경로이름을 디렉터리 안에서 검색할 수 있음 |
S_IROTH | 기타 읽기 | other permission to read file | other permission to read directory entries |
S_IWOTH | 기타 쓰기 | other permission to write file | other permission to remove and create files in directory |
S_IXOTH | 기타 실행 | other permission to execute file | other permission to search for given pathname in directory |
※ stat.h <보기>
@ 마지막 아홉 상수들을 세 범주로 묶는 것도 가능하다. 다음과 같은 관계가 성립하기 때문.
S_IRWXU = S_IRUSR | S_IWUSR | S_IXUSR
S_IRWXG = S_IRGRP | S_IWGRP | S_IXGRP
S_IRWXO = S_IROTH | S_IWOTH | S_IXOTH
▶ 파일(어떤 종류이든)을 이름으로 열려면 그 이름이 언급된 디렉터리들 각각에 대해 실행 권한이 있어야 한다.
디렉터리의 실행 권한 비트를 종종 '검색 비트(search bit)'라고 부르는 것도 이 때문이다.
예를 들어 '/usr/include/stdio.h'라는 파일을 열기 위해서는 '/' 디렉터리에 대한 실행 권한,
'/usr' 디렉터리에 대한 실행 권한, '/usr/include' 디렉터리에 대한 실행 권한이 필요하다.
그런 후에는 파일 자체에 대해 적절한(읽기, 쓰기, 읽기-쓰기 등의 파일 열기 모드에 따른)권한이 있어야 한다.
$ ls -ld / drwxr-xr-x 24 root root 4096 2011-10-16 01:59 / $ ls -ld /usr drwxr-xr-x 10 root root 4096 2011-10-13 00:46 /usr $ ls -ld /usr/include drwxr-xr-x 39 root root 4096 2011-10-18 06:49 /usr/include $ ls -l /usr/include/stdio.h -rw-r--r-- 1 root root 31525 2011-10-05 06:55 /usr/include/stdio.h |
디렉터리에 대한 읽기 권한과 실행 권한은 다른 의미를 가짐을 주의하자.
어떤 디렉터리를 읽어서 그 디렉터리에 담긴 모든 파일 이름을 얻는 데에는 읽기 권한으로 충분하다.
그러나 접근하고자 하는 경로이름 안의 한 디렉터리를 거쳐 가기 위해서는 그 디렉터리에 대한 실행 권한이 필요하다
(특정한 파일이름을 찾기 위해서는 디렉터리를 검색해야 한다.)
또 다른 예로, PATH 환경 변수에 실행이 허용되지 않는 어떤 디렉터리가 지정되어 있는 경우,
셸은 그 디렉터리 안에 있는 실행파일을 찾지 못한다.
▶ 파일에 대한 읽기 권한은 프로세스가 해당 파일을 읽기용으로 열 수 있는지의 여부,
즉 O_RDONLY나 O_RDWR를 지정한 open() 호출의 성공 여부를 결정.
▶ 파일에 대한 쓰기 권한은 프로세스가 해당 파일을 쓰기용으로 열 수 있는지의 여부,
즉 O_WRONLY나 O_RDWR를 지정한 open() 호출의 성공 여부를 결정.
▶ open 함수에서 O_TRUNC 플래그를 사용하려면 파일에 대한 쓰기 권한이 필요하다.
▶ 디렉터리에 새 파일을 생성하려면 그 디렉터리에 대한 쓰기 권한 + 실행 권한이 필요.
▶ 기존 파일을 삭제하려면 그 파일이 있는 디렉터리에 대한 쓰기 권한 + 실행 권한이 필요
(파일 자체에 대한 읽기 권한이나 쓰기 권한은 필요하지 않다.)
▶ 여섯 가지 exec류 함수들 중 하나로 파일을 실행하기 위해서는 그 파일에 대한 실행 권한이 필요.
또한 해당 파일이 정규 파일이어야 한다.
'Linux > Programming' 카테고리의 다른 글
한계들(Limits) – limits.h 와 conf 함수들 (0) | 2011.10.23 |
---|---|
파일 접근 시간과 수정 시간을 변경 - utime(2) (0) | 2011.10.23 |
파일 시간들(File Times) - 수정, 변경, 접근 시간 (0) | 2011.10.23 |
파일 상태 정보 얻기 - stat, fstat, and lstat Functions (0) | 2011.10.23 |
리눅스 개발환경의 개요도 (0) | 2011.10.15 |