OS/리눅스

리눅스) 파일/폴더 권한 - chmod

마리사라 2023. 1. 11. 11:23
반응형

이번 강의는 리눅스에서 파일의 권한을 수정하는 방법인 chmod에 대해서 알아보겠습니다.

 

리눅스는 윈도우보다 권한에 민감하며, chmod는 시험에도 자주 나오는 내용이니 알아두는 것이 좋습니다.


1. 권한

리눅스에서는 파일의 권한을 Read(읽기), Write(쓰기), eXecute(실행)의 권한이 있습니다. 이를 보기 쉽게 rwx로 나타낼 수 있으며 해당 권한이 없는 부분은 - 로 표기합니다. 예를 들어 어떤 파일이 읽고 쓸 수 있다면 해당 파일의 권한은 rw- 로 나타낼 수 있습니다.

 

[종류]

권한은 총 4가지 부분으로 나누어집니다.

  • 유형 : 파일의 유형을 표현하는 부분
  • 소유자 : 파일을 소유한 사용자의 권한. 기본적으로 파일을 생성한 사용자
  • 그룹 : 파일을 소유한 그룹의 권한. 기본적으로 파일을 생성한 사용자의 그룹
  • 외부 : 소유자가 아니며 해당 그룹에 속하지 않은 다른 사용자들

 

이때 파일의 유형은 다시 다음과 같이 나누어집니다.

  • - : 일반 파일
  • d : 폴더
  • b : 블록 구조의 특수파일
  • c : 입출력용 특수파일
  • l : 링크 파일

 

[파일]

예를 들어 다음과 같은 파일이 있다고 가정하겠습니다.

file1의 권한은 -, rw-, r--, r--의 4가지로 나누어지며 순서대로 유형, 소유자, 그룹, 외부의 권한입니다. 따라서 위 파일의 권한은 다음과 같이 해석됩니다.

  • 유형 : 파일임
  • 소유자 : 이 파일을 읽고 쓸 수 있음
  • 그룹 : 이 파일을 읽을 수 있음
  • 외부 : 이 파일을 읽을 수 있음

 

또한 권한은 숫자로도 나타낼 수 있습니다. 이때 숫자는 2진수가 사용되며 유형은 포함되지 않습니다. 3자리의 이진수에서 각각의 r, w, e가 활성화되어 있으면 1, 아니면 0입니다. 예를 들어 위의 file1의 권한을 숫자로 나타내면 다음과 같습니다.

  • 소유자 : rw- = 110 = 6
  • 그룹 : r-- = 100 = 4
  • 외부 : r-- = 100 = 4

즉 file1의 권한은 644로도 나타낼 수 있습니다.

 

또한 file1의 권한 중에 공통적으로 실행 권한(x)이 없는 것을 볼 수 있습니다. 하지만 vi와 같이 편집 기능을 사용하면 file1의 내용을 수정할 수 있습니다. 분명 실행 권한이 없는데 어떻게 편집할 수 있을까요?

 

[파일 실행 권한]

리눅스에서 파일의 실행 권한은 실행 가능한 파일을 나타내는 역할을 합니다. 이때 실행은 일반적인 편집이 아니라 해당 파일의 코드가 리눅스에서 작동하도록 하는 실행입니다. 예를 들어 윈도우에서 txt 파일을 열어서 수정하는 것은 읽기, 쓰기 권한이고, exe 파일과 같이 메모리에서 작동하는 것이 실행 권한입니다.

/usr/bin 의 파일들

사용자가 실행하는 명령이 있는 /usr/bin의 파일의 권한을 보면 공통적으로 실행 권한(x)이 있는 것을 볼 수 있습니다.

 

[폴더]

이번에는 폴더의 권한을 확인해 보겠습니다.

위 folder1의 권한은 d, rwx, r-x, r-x의 4가지로 나뉘며 권한은 다음과 같습니다.

  • 유형 : 폴더임
  • 소유자 : 이 폴더의 파일을 읽고, 쓸 수 있으며 폴더에 접근할 수 있음
  • 그룹 : 이 폴더의 파일을 읽을 수 있으며 폴더에 접근할 수 있음
  • 외부 : 이 폴더의 파일을 읽을 수 있으며 폴더에 접근할 수 있음

 

또한 권한을 숫자로 나타내면 다음과 같습니다.

  • 소유자 : rwx = 111 = 7
  • 그룹 : r-x = 101 = 5
  • 외부 : r-x = 101 = 5

따라서 folder1의 권한은 755로 나타낼 수 있습니다.

 

[폴더의 실행 권한]

폴더에서 실행 권한은 그 폴더에 접근할 수 있는 권한과 같습니다. 예를 들어 외부 사용자의 권한이 rw-라고 해보겠습니다. 그렇다면 외부 사용자는 해당 폴더의 파일을 읽고 쓸 수 있는 권한을 부여받았기에 폴더의 파일을 수정할 수 있을까요? 정답은 불가능하다입니다.

 

폴더에서는 실행 권한이 없다면 해당 사용자는 폴더에 접근할 수 없으며 그에 따라 그 폴더에 있는 내용을 볼 수 없습니다. 따라서 외부 사용자는 해당 폴더의 파일을 수정할 수 없습니다.


2. chmod

이제 폴더의 권한을 수정하는 방법인 chmod에 대해서 알아보겠습니다. chmod의 사용법은 다음과 같습니다.

chmod {Option} [Mode] [File]

이때 각각의 파라미터는 다음과 같습니다.

  • Option : chmod를 적용할 때 추가적으로 설정하는 옵션. 생략이 가능하다.
    • -v : 모든 파일에 대해 chmod를 적용하는 진단 메시지를 출력한다
    • -f : 에러 메시지를 출력하지 않는다.
    • -c : 권한이 변경되는 파일에 대해서 chmod를 적용하는 진단 메시지를 출력한다.
    • -R : chmod를 모든 파일과 디렉터리에 대해 재귀적으로 적용한다.
  • Mode : 권한을 어떻게 변경할 것인지 결정하는 파라미터. 이때 모드는 여러 가지를 섞어서 사용할 수 있다.
    • 권한을 변경할 대상과 관련된 입력
      • u : 소유자의 권한
      • g : 그룹의 권한
      • o : 외부 사용자의 권한
      • a : 모든 사용자의 권한
    • 권한을 어떻게 변경할지와 관련된 입력
      • + : 현재의 권한에 다음의 권한을 더한다.
      • - : 현재의 권한에 다음의 권한을 제거한다.
      • = : 현재의 권한을 다음의 권한으로 변경한다.
    • 권한의 내용과 관련된 입력
      • r : 읽기 권한
      • w : 쓰기 권한
      • x : 실행 권한
      • X : 디렉터리 또는 이미 실행 권한이 존재하는 파일에 대한 실행 권한
      • 0 ~ 7 : rwx를 숫자로 나타낸 권한
    •  특수 권한의 내용과 관련된 입력. 숫자로 나타낸 rwx권한보다 앞에 사용 ex) 1777, 4755 등
      • s : 실행 권한을 setuid 또는 setgui로 실행함.
        • u+s(4) : 다른 사용자가 해당 파일을 실행 시에 사용자의 권한으로 실행함(setuid)
        • g+s(2) : 다른 사용자가 해당 파일을 실행 시에 그룹의 권한으로 실행함(setguid)
      • o+t(1) : 공유 모드. 모든 사용자가 해당 디렉터리에서 파일이나 폴더를 생성하거나 실행할 수 있지만 삭제나 변경하지 못함(sticky)
  • File : 파일 또는 폴더의 이름. * 을 입력 시 현재 폴더의 모든 파일 또는 폴더

 

이제 chmod를 실습해 보겠습니다. 우선 다음과 같은 파일들을 준비합니다.

 

[test1 - rwx]

test1의 권한을 변경해 보겠습니다. 이때 방법은 세 가지가 있을 것입니다.

  1. 현재 권한에 다른 권한을 추가하는 방식(+)
  2. 현재 권한에 다른 권한을 제거하는 방식(-)
  3. 현재 권한을 다른 권한으로 변경하는 방식(=)

우선 test1의 권한 중에서 그룹 사용자의 권한에 쓰기 권한을 추가해 보겠습니다.

# chmod g+w test1

위 명령은 해석하자면 test1 파일에서 그룹의 권한(g)에 쓰기 권한(w)을 추가(+)하라.로 해석할 수 있습니다. 이제 다시 파일을 확인해 보겠습니다.

 

test1의 그룹 권한에 w가 추가된 것을 볼 수 있습니다.

 

이번엔 제거입니다. 이번엔 그룹 사용자와 외부 사용자의 권한에서 읽기 권한을 제거해 보겠습니다.

# chmod go-r test1

위 명령에서 알 수 있듯이 여러 변경 대상을 한 번에 쓸 수도 있습니다.

권한도 잘 변경되었습니다.

 

이번에는 모든 사용자의 권한을 읽기/쓰기 권한으로 변경해 보겠습니다.

# chmod a=rw test1

잘 된 것을 볼 수 있습니다.

 

[test2 - 숫자]

이번엔 숫자로 변경해 보겠습니다. 숫자로 변경하는 것은 = 명령과 같으며 3자리 숫자를 사용하면 특수 권한은 0을 주는 것과 같습니다.

 

이번에는 test2 파일이 실행 파일이라고 간주하고 각각의 사용자의 권한을 다음과 같이 변경해 보겠습니다.

  • 소유자 : 읽고 쓰고 실행할 수 있어야 함
  • 그룹 : 읽고 실행할 수 있어야 함
  • 외부 : 읽고 실행할 수 있어야 함

 

읽고 쓰고 실행하는 권하는 rwx이며 숫자는 7입니다. 여기서 쓰기 권한인 2만큼 빼게 되면 읽고 실행하는 권한의 숫자인 5가 나옵니다. 따라서 위 조건에 해당하는 명령은 다음과 같습니다.

# chmod 755 test2

파일에 실행 권한을 넣으니 test2 이름이 실행 파일을 뜻하는 초록색으로 변경된 것을 볼 수 있습니다.

 

[특수 권한 - setuid]

이번에는 특수 권한을 실습해 보겠습니다. 먼저 test1 파일을 setuid로 바꿔보겠습니다.

# chmod u+s test1

test1의 권한을 보게 되면 S라는 권한이 붙었습니다. 이때 S는 소유자가 실행 권한을 가지고 있지 않다는 뜻입니다. 원래 test1은 실행 권한이 없으니 S로 표기되는 것입니다.

 

그렇다면 원래 실행 권한이 있던 test2를 setuid로 바꾼다면 어떻게 될까요?

# chmod u+s test2

test2에는 S가 아니라 s로 붙었습니다. s는 소유자가 실행 권한을 가지고 있다는 뜻입니다.

 

이 두 가지 경우는 실행의 차이입니다. setuid가 설정된 파일은 다른 사용자가 실행해도 소유자의 권한으로 실행될 것입니다. 하지만 소유자가 실행 권한이 없다면 setuid는 의미가 없어집니다. 따라서 소유자의 실행 권한의 유무에 따라 표기를 다르게 하는 것입니다.

 

[특수 권한 - setgid]

이번에는 setgid를 test3에 설정해 보겠습니다.

# chmod g+s test3

이번에도 그룹의 권한에 S가 나타났습니다. 이것은 setuid와 마찬가지로 실행 권한을 그룹에 주게 되면 s로 바뀌게 됩니다.

 

[특수 권한 - sticky]

리눅스에서 sticky는 폴더에만 적용할 수 있습니다. 만약 파일에 sticky를 적용해도 리눅스에서 해당 사실을 무시합니다.

 

이번에 folder1이라는 폴더를 생성해 보았습니다.

이제 이 폴더에 sticky 권한을 줘 보겠습니다.

# chmod o+t folder1

맨 마지막 부분에 t가 붙었습니다. 이 경우에는 다른 모든 사용자는 생성은 할 수 있지만 삭제는 할 수 없게 됩니다.


3. 마치며

chomd는 숫자로만 외우고 있는 사람도 많습니다. 하지만 chmod는 여러 기능이 있다는 것을 알아두셨으면 합니다.

반응형