Skip to content

파일 권한과 아파치 파일 그리고 777 – part 1

리눅스 시스템에서 권한은 소유권과 허가권으로 나누어 진다. 복잡하다. 대 부분 인터넷 글들은 잘못된 내용으로 혼란만 가중 시킨다. 때문에 이를 바르게 이해하기 위해서는 먼저 해석하는 방식을 파일 단위로 바꿔야 한다.

-rw-r--r-- 1 firechoi www-data 781 Jul 9 08:58 index.html

위 파일은 firechoi라는 계정에 644한을 가지고 있는 index.html 파일이다… 라고 해석하지 말고 index.html 파일의 소유자는 firechoi이고 이 파일은 644의 권한을 가진다 라고 바라봐야 이해하기가 쉽다. 즉, 파일은 소유권에 종속적이지만 가변적이다.(내꺼인듯 내꺼아닌 내꺼같다.) 소유권은 100자리 10자리 1자리로 구분괸다. 읽기가 가능하려면 r(4) 쓰기가 가능하려면 w(2) 실행이 가능하려면 x(1) 권한이 필요하다. (이 부분은 쉽게 설명하기 어려움으로 다음에 다루보도록 하겠다.)

이 index.html 파일은 firechoi 계정이 읽거나 수정하거나 지울 수 있다. 여기까지는 쉽다. 글이 재미없으니 문답법으로 설명해 보자.

문제. 1 여기 apache라는 계정 있고 이 계정은 www-data라는 그룹 안에 있다. 자 이 apache 계정은 index.html 파일을 읽을 수 있을까?

정답은 읽을 수 있다. www-data라는 힌트가 결정적이었다. 여기까지도 쉽다.

문제. 2 여기에 armada라는 계정이 있고 이 계정은 www2라는 그룹안에 있다. 자 이 armada라는 계정은 index.html 파일을 읽을 수 있을까?

정답은 읽을 수 있다.

왜그럴까?

이유는 바로 익명권한 때문이다.

index.html의 644 권한 중 마지막 1의 자릿수에 4권한이 포함되어 있기 때문이다. (참고로 디렉토리 기본 권한은 755이고 파일의 기본 권한은 644이다.)

이런 리눅스시스템에서 파일 권한의 특수성 때문에 과거 apache서비스는 별도의 권한인 nobody 권한으로 동작했다. 참고로 익명권한과 nobody는 다르다.

100명의 사용자가 각자의 소유권으로 작성된 파일을 서비스해야 하는데 nobody 권한은 아마 가장 쉬운 선택이었을 것이다. 그런데 이런 쉬운 설정에는 필역적인 문제가 있으니 바로

X맨의 존재다.

실행권한 x

문제. 3

내 계정은 firechoi 이고 그룹 권한은 www-data이다.

워드프레스에 글을 쓴다. 이미지를 첨부했다. 이런… 업로드가 안된다. 무슨 문제 일까?

정답: 쓰기 권한이 w(2)가 없기 때문이다. 디렉토리에 쓰기 권한을 추가하면 된다. 그런데 왜 w권한이 아니라 wx 권한이 필요할까? (644가 아니라 755일까?) 디렉토리에서 작업하기 위해서는 실행권한이 필요하기 때문이다. 디렉토리에 실행권한이 없으면 디렉토리에 접근할 수 없다. 디렉토리 권한은 644로 만들고 들어가 봐라 허가권이 없다는 경고를 확인할 수 있다.

mkdir a; chmod 644 a; cd a (뭐함?)

자 이제 디렉토리에 실행권과 쓰기 권한도 추가했다.(7권한을 줬다.) 그리고 이미지도 첨부해서 글도 멋지게 발행했다.

문제. 4 이 파일은 어떤 소유권과 허가권으로 내 서버에 업로드될까?

정답은 아파치의 소유권과 644(기본) 허가권으로 업로드된다.

이유는 간단하다 우리가 웹으로 접근하는 것은 모두 apache가 서비스한 다는 것이고, 이 apache는 자신의 권한으로 실행된다. (사용자 권한이 아니다.)

때문에 apache를 통해 업로드된 파일은 firechoi 사용자 권한이 없다.

-rw-r--r-- 1 nobody nogroup 781 Jul 9 08:58 IMG0123.jpg 이런 쌩뚱맞은 권한으로 파일 업로드가 됐다.

ftp나 ssh를 통해서 지울 수 없고 웹 서비스를 통해서만(apache를 통해서만) 가능하다. 내가 올린 파일을 내 가 수정하거나 지울 수 없다니 슬픈 일이다.

그럼 이런 문제를 어떻게 해결 할까? 정답은 간단하다 익명 권한에 쓰기권한(7)을 주는 것이다. 이런 이유 때문에 우리가 사랑하지만 보안에는 치명적인 매직넘버 777이라는 권한이 탄생했다.

안되면 777… 모든게 해결된다.
쓰다보니 글이 길다…

이어지는 내용은 다음 포스팅에

…to be continued

Published inLinux