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




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
리눅스의 파일 권한  (0) 2017.01.26
리눅스 ANSI color(색깔 입히기)  (0) 2017.01.23
SSH chroot 구현법  (0) 2016.12.23
리눅스 네트워크 설정  (0) 2016.12.09

댓글 작성