퍼미션과 소유권

항해자·2023년 6월 7일
0

개발

목록 보기
2/2
post-thumbnail

웹개발을 하다 보면 반드시 마주치게 되는 개념이 하나 있습니다.

바로 퍼미션과 소유권!

개인에 따른 차이는 있겠으나 아마 제일 먼저 마주치게 되는 상황은 '파일 업로드' 기능을 구현할 때일 것 같습니다.

분명 로컬에서 개발할 땐 별문제가 없었는데 웹서버 환경에만 올리면 파일 업로드가 되지 않고 에러가 나는 상황을 경험해보셨나요? 업로드하려는 경로에 권한이 없다는 에러 로그 메시지도 함께 말이죠.

그렇다면 퍼미션과 소유권이란 무엇일까요?

먼저 퍼미션에 대해서 알아보겠습니다.

퍼미션은 파일 시스템에 기반하여 특정한 파일이나 디렉토리에 대하여 조작할 수 있는 권한을 부여하는 개념입니다.

파일이나 디렉토리에 읽기, 쓰기 그리고 실행의 세 가지 권한을 각각 허용할 것인지 정의하며 이때 설정된 권한에 따라 단순하게 읽게만 할 것인지, 쓰기(수정)도 가능하게 할 것인지 혹은 실행까지 가능하게 할 것인지를 결정하게 됩니다.

이들은 각 권한의 앞 글자를 따서 rwx 로 표기하기도 합니다.

읽기는 'R'ead, 쓰기는 'W'rite, 실행은 e'X'ecute

다음은 소유권 입니다.

파일시스템에서 모든 파일과 디렉토리는 고유의 소유자와 소유그룹을 가지고 있으며 리눅스의 경우 소유자.소유그룹의 형태로 표기됩니다.

예를 들어 아래와 같은 파일이 있다고 가정해 보겠습니다

file1.txt velog.veloggroup

file1.txt의 소유자는 velog이며 소유그룹은 veloggroup입니다.

이 소유자와 그룹은 리눅스내 미리 정의되어 있어야 합니다.

이제 두가지 개념을 통해 파일의 조작권한이 어떻게 정의되는지 볼까요?

리눅스 시스템에서 파일의 퍼미션과 소유권은 아래와 같은 형태를 가집니다.

파일명.확장자 [파일or디렉토리 1자리][소유자의퍼미션 3자리][소유그룹의퍼미션 3자리][기타사용자퍼미션 3자리] [소유자].[소유그룹]

아래와 같은 파일이 있다고 가정하겠습니다.

file1.txt -rwxr----- velog.veloggroup

우선 file1.txt의 소유자는 velog이며 소유그룹은 veloggroup입니다.
그리고 -rwx------ 이 부분을 분석해보면 아래와 같습니다.

첫번째 '-'는 이 대상이 '파일'임을 의미하며, 만약 디렉토리라면 '-' 대신 'd'가 표기됩니다.

다음 세글자 rwx는 이 파일의 소유자에 대한 권한을 나타냅니다.
rwx는 각각 read, write, execute를 의미하며 위 예시의 경우 이 파일의 소유자는 읽기, 쓰기 그리고 실행의 모든 권한을 가졌음을 의미합니다.

이어진 세글자 r--는 이 파일의 소유그룹에 대한 권한입니다.
이 파일은 그룹 veloggroup에 속해있는 모든 계정에 대하여 읽기(read)만을 허용한다는 의미입니다.

마지막 ---는 이 파일의 소유자와 소유그룹이 아닌 기타 사용자를 의미합니다.
허용된 권한이 하나도 없으므로 기타 사용자는 해당 파일에 대하여 어떠한 조작 권한도 가질 수 없습니다.

이제 정리하자면,

file1.txt는 velog 계정에 대하여 읽고, 쓰고, 실행하는 모든 권한을 부여하며 veloggroup 그룹에 소속된 사용자는 읽기만 가능, 그 외 나머지는 어떠한 권한도 부여하지 않는다는 의미로 이해하시면 됩니다.

주의 : 기타 사용자권한에 소유자와 소유그룹은 제외됩니다.

근데 777? 775? 644? 이런 숫자도 있던데 이건 무슨 의미인가요?

리눅스나 유닉스 기반의 시스템은 숫자로 파일의 퍼미션을 표기하는 경우도 있습니다. 결론부터 말해서 위에 예시로든 숫자는 각각 아래의 의미가 있습니다.

777 : 소유자/소유그룹/기타 사용에 대하여 모든 조작권한(rwx)부여.
=> rwxrwxrwx

775 : 소유자와 소유그룹에는 모든 조작권한(rwx)을 허용하고, 기타 사용자에게는 읽기 및 실행 권한(r-x)을 부여.
=> rwxrwxr-x

644 : 소유자는 읽기와 쓰기권한(rw-), 소유그룹과 기타 사용자에게는 읽기만(r--) 부여.
=> rw-r--r--

이게 도대체 무슨 의미일까요? 우선 각 자리의 숫자가 소유자/소유그룹/기타 사용자 의 순서로 세글자를 구성한다는 건 눈치채셨을 겁니다. 사실 각 숫자는 읽기/쓰기/실행의 여부를 순서에 따라 0과 1의 비트로 정의한 후 이를 10진법으로 변환한 결과입니다.

예를 들어 볼께요

어떤 파일의 소유자에게 모든 권한을 부여한다고 합니다.
앞에서 배운것처럼 rwx가 부여되겠죠? 이를 0과 1로 허용 여부를 나타낸다고 했으니 111 이 될 겁니다. 이 111은 2진법으로 표기된 숫자이며 이를 10진법으로 변환하게 되면 아래의 계산을 통하게 됩니다.

22+21+20=72^2 + 2^1 + 2^0 = 7

이제 저 7이란 숫자가 어떻게 나온 건지 이해가 되나요?

즉 7은 rwx모든 권한을 가지고 있다는 의미가 됩니다.

예를 더 들어보죠. 6과 4는 어떤의미 일까요?

먼저 6은 rw- 를 의미합니다. 이것을 비트로 표현하면 110이며 다시 10진법으로 변환시킨다면,

22+21+0=62^2 + 2^1 + 0 = 6

4도 마저 계산해볼까요?

4는 r--을 의미하며 이를 비트로 변환시 100, 마지막으로 10진법으로 변환하면 아래와 같이 4가 됩니다.

22+0+0=42^2 + 0 + 0 = 4

이제 터미널이나 FTP 프로그램에서 만났던 퍼미션과 소유권에 대하여 보다 친숙해지셨길 바랍니다.

profile
웹개발자

0개의 댓글