작은숲:위키노트/파일 접근 권한
유닉스 계열의 파일 접근 권한
리눅스를 비롯해 유닉스 계열 운영체제에서 사용되는 파일 접근 권한의 대상은 모두 세 가지이다.
- 소유자(user, u) – 파일의 소유자
- 그룹(group, g) – 파일의 그룹 멤버의 사용자
- 다른 사용자(others, o) – 파일의 소유자나 그룹 멤버가 아닌 사용자
그리고 각 대상별로 세 가지의 권한이 있다.
- 읽기(read, r) – 2진수 100, 8진수 4
- 쓰기(write, w) – 2진수 010, 8진수 2
- 실행(excute, x) – 2진수 001, 8진수 1
각 권한은 하나의 비트로 표현되며 소유자, 그룹, 다른 사용자의 읽기, 쓰기, 실행 권한의 순서로 나열된다. 즉 파일 접근 권한이 2진수 110100100인 경우에 처음 3 비트는 소유자의 접근 권한을 나타내고, 그 다음 3 비트는 그룹, 마지막 3 비트는 다른 사용자의 접근 권한을 나타낸다. 여기에서는 소유자의 경우 읽기와 쓰기 권한을 가지고 있고, 그룹 사용자와 다른 사용자는 읽기 권한만 가지고 있다.
이렇게 2진수로 나타낸 파일 접근 권한은 사람이 읽고 말하기 쉽게 하도록 보통 8진수로 표현하거나 문자로 표현한다. 8진수로 위의 접근 권한을 나타내면 644가 된다. 즉 소유자는 읽기(8진수 4)와 쓰기(8진수 2) 권한을 가지고 있기 때문에 소유자의 접근 권한을 8진수 4 + 2 = 6으로 쓸 수 있다.
파일 접근 권한 644(2진수 110100100)를 문자로 나타내면 rw-r--r--와 같이 나타낼 수 있다. 리눅스 콘솔에서 ls -l 명령을 실행하면 파일과 디렉토리 앞에 이러한 표시가 나오는 것을 확인할 수 있을 것이다. 디렉토리의 경우 이 앞에 디렉토리를 나타내는 d가 더 붙게 된다.
특수 파일 접근 권한
읽기, 쓰기, 실행, 이 세 가지의 접근 권한 외에 SUID, SGID, t-비트(스티키 비트, sticky bit)라는 접근 권한이 있다.
- SUID(set uid, 사용자 s-비트) – 파일의 소유자가 아닌 다른 사용자가 SUID가 설정된 파일을 실행할 때 파일 소유자의 아이디(effective ID)로 실행된다.
- SGID(set gid, 그룹 s-비트) – 디렉토리에 설정되며, SGID가 설정된 디렉토리에 파일을 만들면 그 파일의 그룹이 디렉토리의 그룹으로 설정된다.
- t-비트(sticky bit) – 디렉토리에 설정되며, t-비트가 설정된 디렉토리 안에서는 파일을 생성한 사용자만 그 파일을 삭제할 수 있게 된다.
SUID
리눅스에서 프로세스들은 사용자 아이디를 기반으로 실행된다. 즉 어떤 프로세스를 실행하면 그 프로세스는 실행시킨 사용자의 사용자 ID를 갖게 된다. 그리고 리눅스에는 실제 사용자 아이디(real user-ID)와 유효 사용자 아이디(effective user-ID)의 두 가지 사용자 아이디가 있다. 위에서 SUID가 설정된 파일의 경우 그 파일을 실행해서 만들어진 프로세스는 실행시킨 사용자의 사용자 아이디가 아니라 파일 소유자의 사용자 아이디를 가지고 실행된다. 이것은 실행시킨 사용자가 다른 사용자의 권한을 임시로 갖게 만들어주기 때문에 평소에는 접근할 수 없었던 파일에도 접근할 수 있도록 만들어준다.
SUID가 설정된 파일은 ls -l 명령을 실행했을 때 소유자의 실행 비트가 s로 나온다. 즉 rwsr-xr-x와 비슷한 형태로 나오게 된다. SUID를 설정하기 위해서는 chmod 4755 혹은 chmod u+s 명령을 실행한다.
SGID
SGID는 디렉토리에 설정하며, SGID가 설정된 디렉토리 안에 파일을 만들었을 때 그 파일의 그룹을 디렉토리의 그룹으로 만들어준다. 예를 들어 /usr/src 디렉토리의 그룹이 staff이고 SGID가 설정되어 있다면, staff 그룹에 속해있지 않은 사용자가 /usr/src 디렉토리에 파일을 만들더라도 그 파일의 그룹은 staff 그룹이 된다.
SGID가 설정된 디렉토리는 ls -l 명령을 실행했을 때 그룹의 실행 비트가 s로 나온다. 즉 rwxrwsr-x와 비슷한 형태로 나오게 된다. SGID를 설정하기 위해서는 chmod 2775 혹은 chmod g+s 명령을 실행한다.
t-비트
리눅스에서는 /tmp와 같은 임시 디렉토리에 모든 사용자가 쓸 수 있도록 한다. 즉 파일 접근 권한을 drwxrwxrwx로 설정한다. 디렉토리의 파일 접근 권한이 이와 같이 설정되어 있다면 그 아래에 있는 파일들의 경우 누구나 삭제할 수 있다. 이를 방지하기 위해 디렉토리에 t-비트를 설정한다. t-비트가 설정된 디렉토리 안에서는 파일을 생성한 사용자만 그 파일을 삭제할 수 있게 된다.
t-비트가 설정된 디렉토리는 ls -l 명령을 실행했을 때 다른 사용자의 실행 비트가 t로 나온다. 즉 drwxrwxrwt와 비슷한 형태로 나오게 된다. t-비트를 설정하기 위해서는 chmod 1777 혹은 chmod o+t 명령을 실행한다.
참고
| 배포판 | |
|---|---|
| 서버 프로그램 | |
| 시스템 도구 | |
| 시스템 보안 | |
| 시스템 설정 | |
| HOWTO 문서 | |
| 사용자 설정 | |
| 활용 | |
| 명령어 | |