리눅스에서는 모든 것들이 파일로 구성되어 있다.
또한, 각 파일들에는 권한이 있는데. 이 권한을 설정하는 방법과 그 권한이 미치는 영향에 대해서 작성해보고자 한다.




1. 권한의 확인
ls -a 명령어를 입력하면 해당 디렉터리나 파일의 권한들을 확인할 수 있다.



2. 기본적인 권한의 표기법

X XXX XXX XXX
1 2      3      4

다음과 같이 구분된다. 실제로는 띄워쓰기 없이 붙어있다.

1 : 파일의 타입을 표시한다.
     - : 파일
     d : 디렉터리

2 : 해당 파일 소유자의 권한에 대해서 설정한다.

3 : 해당 파일 그룹의 권한에 대해서 설정한다.

4 : 그 외 유저들의 권한에 대해서 설정한다.



또한 2,3,4 는 각각 rwx로 표기하는데.

r : 읽기
w : 쓰기
x : 실행

이며, 해당 권한이 없을 시 - 로 표기된다.


읽기(r)는 파일을 읽을 수 있는 권한이다. 예를 들어서 텍스트파일이 있으면 권한이 있을 시에는 읽을 수 있지만, 없으면 읽을 수 없다.
쓰기(w)는 파일을 쓸 수 있는 권한이다. 예를 들어서 텍스트 파일이 있으면 권한이 있을 시에 파일을 수정할 수 있다. 없으면 수정할 수 없다. 만약, 폴더의 경우에는 해당 폴더에 파일이나 폴더를 생성하거나 삭제할 수 있다.
실행(x)는 파일을 실행할 수 있는 권한이다. 실행파일이 있을 시에 이를 실행할 수 있는 권한이다. 만약, 폴더의 경우에는 해당 폴더를 열 수 있다.


3. 접근 권한 변경

접근 권한을 변경하는 명령어는 chmod가 있다.
이 명령어는 두가지의 변경 방법을 제공하는데. 둘다 유용하니 알아둘 필요가 있다.

a. 기호를 통한 변경

사용법 : chmod [문자][연산자][권한] 파일명

문자에는 그 권한을 부여할 대상이다. 소유자, 그룹, 그 외 유저 중 어떤 곳에다가 부여할 것인지 정하는 것이다.
한번에 여러명을 동시에 적어도 된다.
u: 파일의 소유자
g : 소유자가 속한 그룹
o : 그 외의 유저
a : (ugo와 같다.) 전체 사용자

연산자에는 권한을 부여할 것인지 뺄 것인지 설정할 것인지에 대해서 정하는 것이다.
+ : 권한을 부여 한다.
- : 권한을 제거한다.
= : 권한을 설정한다.

권한에는 어떤 권한을 설정할 것인지에 대해서 나타낸다.
앞의 문자처럼 한번에 여러명을 동시에 적어도 된다.
r : 읽기
w : 쓰기
x : 실행


예시로는 다음과 같이 작성할 수 있다.
현재 폴더에 있는 test(-r--r--r--)라는 파일의 권한을 수정하는 명령어이다.

만약 소유자와 그룹에게 쓰기권한과 실행 권한을 부여하고 싶다면 다음과 같이 입력하면 된다.

$ chmod ug+wx test

만약 모든 유저에게서 읽기권한을 빼앗고 싶다면 다음과 같이 작성한다.

$ chmod a-r test


b. 숫자를 통한 변경

사용법 : chmod [권한] 파일명

읽기(r) : 4
쓰기(w) : 2
쓰기(x) : 1

이들을 합산하여서 각각 소유자, 그룹, 기타 순서대로 권한을 합산하여 자리별로 적어준다.

이번에도 test파일로 예를 들어보자.

소유자 : 읽기(4) + 쓰기(2) + 실행(1) = 7
그룹 : 읽기(4) + 쓰기(2) = 6
기타 : 읽기(4) + 실행(1) = 5

이런식으로 계산하여서

$ chmod 765 test

명령어를 입력하게 된다.


왜 이런구조가 나왔는지에 대해서 설명을 해보자면(몰라도 크게 지장은 없다.)

권한은 각각 1비트씩 on/off 하게 된다.
읽기, 쓰기, 실행 순서대로 3자리의 비트가 배열되어 있다.

만약 읽기 비트만 켜져있다면 100이라는 이진수가 될 것이다. 그러면 이를 십진수로 바꾸면 4이다. 같은 맥락으로 쓰기만 켜져있다면 010이라는 이진수가 되어서 2일 것이다.
이런 맥락으로 4, 2, 1이라는 숫자가 정해지게 된 것이다.


4. 기본 접근 권한

리눅스에선 파일이나 폴더를 생성시 기본 접근 권한이 자동적으로 설정된다.
파일 : rw-r--r--
디렉터리 : rwxr-xr-x

물론 기본 설정권한을 변경할 수는 있지만 여기서 다루지 않겠다.


5. 특수 접근 권한

특수 접근 권한은 chmod로 숫자를 통한 변경을 할 때. 3자리 앞에다가 적어주면 된다.
각 비트별로 독특한 권한을 가지고 있다.

(4) setUID
해당 파일이 실행되는 동안 파일의 소유자의 권한으로 실행된다.
setUID권한을 부여시에는 소유자 권한의 실행(x)자리에 x대신 s가 표기 된다.

원래 파일을 실행 할 때에는 실행한 사람의 권한으로 실행이 된다. 하지만 setUID가 적용된 파일을 실행하면 해당 파일의 소유자의 권한으로 실행이 된다.
이것이 적용된 파일이 있는데. 바로 passwd이다.
passwd를 실행해서 본인의 비밀번호를 변경할 수 있는데. 이 비밀번호가 저장되는 파일은 root가 소유한 /etc/shadow파일이다. 근데 이 파일을 일반 유저들에게 공개할 수 없으니 읽는 권한도 쓰는 권한도 일반적인 유저에게는 부여하지 않았다.
하지만, 비밀번호를 변경할 때는 이를 수정해야되므로 passwd를 실행할 때 만은 root의 권한으로 실행하도록 하는 것이다.

(2) setGID
해당 파일이 실행되는 동안 파일 그룹의 권한으로 실행된다.
setGID권한을 부여시에는 그룹 권한의 실행(x)자리에 x대신 s가 표기 된다.

(1) 스티키 비트
이 비트는 디렉터리에 설정하며, 설정된 디렉터리에는 누구나 파일을 생성할 수 있다.
문자 표기로는 그 외 유저 자리의 실행(x)자리에 t가 표기 된다.

스티키 비트가 필요한 이유가 있는데. 어떤 공용 폴더 같은 것을 만들 때. 이 폴더에 파일을 생성할 수 있도록 하려면 폴더에 쓰기(w)권한을 부여하여야한다.
하지만, 폴더에 쓰기 권한이 있을 시에 다른 유저가 해당 폴더에 만든 파일도 지워버릴 수 있는데. 이는 관리자에 입장에서 참 난감하다.

그럴때 스티키 비트를 적용해놓으면 해당 디렉터리에 아무나 생성할 수 있으나, 지우는 것은 해당 파일의 소유자만 가능하다.


'Linux' 카테고리의 다른 글

[리눅스] mailx 사용법/명령어  (0) 2017.03.21
REMOTE HOST IDENTIFICATION HAS CHANGED! 에러  (0) 2017.03.20
리눅스 ANSI color(색깔 입히기)  (0) 2017.01.23
SSH chroot 구현법  (0) 2016.12.23
리눅스 네트워크 설정  (0) 2016.12.09