2011. 10. 23. 16:22

[ 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_RDONLYO_RDWR를 지정한 open() 호출의 성공 여부를 결정.

파일에 대한 쓰기 권한은 프로세스가 해당 파일을 쓰기용으로 열 수 있는지의 여부,

O_WRONLYO_RDWR를 지정한 open() 호출의 성공 여부를 결정.

open 함수에서 O_TRUNC 플래그를 사용하려면 파일에 대한 쓰기 권한이 필요하다.

디렉터리에 새 파일을 생성하려면 그 디렉터리에 대한 쓰기 권한 + 실행 권한이 필요.

기존 파일을 삭제하려면 그 파일이 있는 디렉터리에 대한 쓰기 권한 + 실행 권한이 필요

(파일 자체에 대한 읽기 권한이나 쓰기 권한은 필요하지 않다.)

▶ 여섯 가지 exec류 함수들 중 하나로 파일을 실행하기 위해서는 그 파일에 대한 실행 권한이 필요.

또한 해당 파일이 정규 파일이어야 한다.

Posted by devanix