리눅스에서 권한 변경하기 (A.k.a. Chmod)

도커를 사용하다가 DB 때문에 리눅스를 만질일이 잠깐 있었다.

TABLESPACE를 사용하기 위해서 오라클 11g가 설치된 도커 컨테이너의 Ubuntu에서 임의의 폴더를 생성후 DATAFILE의 경로로 설정했는데, 다음과 같은 에러(ORA-01119)가 발생했다.

ORA-01119 는 DB TABLESPACE 에러라고 한다. 그리고 아래 Permission denied 라는 메세지가 출력된걸로 보아 해당 경로의 접근권한이 차단되어 TABLESPACE 에러가 발생했음을 유추하였다.

파일 디렉토리를 확인해보니 이런게 있었다.

빨간색 체크박스 안에 있는게 리눅스에서 권한(Permission)을 의미하는 퍼미션 정보라고 한다. /finalProject 폴더의 권한은 원래 아래 위의 다른 디렉토리와 같은 상태였다. 그럼 그 상태 메세지를 뜯어보자(?)

drwxrwxrwx

앞에서부터 d 는 해당 파일 또는 디렉토 리의 파일형태를 의미한다.

d는 directory를 의미, -는 일반파일을 의미한다.

멘 앞의 문자가 파일형태를 의미했다면 뒤의 문자 형태는 모두 권한을 의미한다. 문자의 위치에 따라 세글자씩 끊어서 파일형태 소유자-그룹-공개 로 구분하며 각 사용자에 따라 정의되어 있는 권한은 다음으로 해석할 수 있다.

각 권한별 명령어

  • 사용자
    • owner : 소유자에 대한 퍼미션 지정
    • group : 소유그룹에 대한 퍼미션 지정
    • public : 모든 사용자들에 대한 퍼미션 지정
  • 권한
    • r : 파일/디렉토리의 읽기(read) 권한 (4)
    • w : 파일/디렉토리의 쓰기(write) 권한 (2)
    • x : 파일/디렉토리의 실행(execute) 권한 (1)

위의 정보를 바탕으로 다시 빨가체크박스 속 권한을 해석하면 다음과 같다.

파일형태와 권한을 분리하고 각각의 사용자에 따라 -로 구분하면 다음과 같다.

d rwx-rwx-rwx

/finalProject 는 디렉토리 즉 폴더이며, 소유자와 그룹, 공개 모두 rwx로 퍼미션이 정의되어있는걸로 보아 접근권한으로 읽기, 쓰기, 실행 모두 허용되어있음을 알 수 있다.

그럼 마지막으로 접근권한은 어떻게 바꿀수 있을까?

위의 [권한](#permission)에서 권한에 따라 숫자가 정의되어있음을 알 수 있다.

리눅스 명령어를 입력할땐 영어문자 대신 저 숫자를 입력하여 권한을 변경해야 한다. 접근권한을 모두 공개하려면 각각의 사용자에 따라 읽고(r:4), 쓰고(w:2), 실행(x:1)하는 권한을 모두 허용해야 한다.

각각의 사용자에 맞춰 권한을 숫자로 바꿔 더해서 입력하면된다.

rwx-rwx-rwx(4+2+1) + (4+2+1) + (4+2+1)로 변환할 수 있으며, 최종적으로 명령어로 바꾸면 chmod 777 이 된다.

정리하면 다음과 같다.

디렉토리/파일 별 명령어

  • 디렉토리일 경우. (하위 디렉토리 전체 파일의 권한 지정)
    • chmod -R [권한지정] [디렉토리이름]
  • 파일일 경우.
    • chmod [권한지정] [디렉토리이름]

그럼 일반 디렉토리를 위의 빨간 체크박스 속 권한처럼 바꾸려면 다음과 같은 명령어가 필요함을 알 수 있다.

chmod -R 777 finalProject