Skip to content

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

먼저 part1을 읽어 주세요.

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

이어서…

그럼 777은 무슨 권한인가?

바로 소유자, 그룹, 익명 권한에 대해서 전체 허가권(읽기, 쓰기, 실행(삭제))을 허용한다는 것이다. 이는 나 외에 내가 쓰는 모든 사용자 및 다른사용자 및 익명 계정에까지 삭제권한을 준다는 의미이다.

그러니 테스트 머신 외에는 사용을 자제하길 바란다.

그럼 707은 어떤 권한인가? 우리가 사용하는 웹 서비스용 서버 권한에서는 아무런 의.미 없는 권한이다. 내가 속한 그룹외에 다른 그룹에서 접근을 거부하고 싶은 것인데 익명 권한을 열어놔서 실제로는 누구나 접근할 수 있다. 키보드로 777보다 707을 빠르게 누룰수 있는 분은 사용해도 괜찮을 것 같다.

apache가 nobody 권한으로 동작할 경우 워드프레스로 업로드된 파일의 권한은 당연히 nobody 권한을 가지게 된다.

이 문제를 가장 보안하기 위해 apache의 권한을 웹 서비스 사용자의 그룹 권한과 동일한 권한으로 서비스하는 곳도 있다.

즉, apache를 www-data 권한으로 실행하면 워드프레스로 업로드된 파일은 www-data의 권한을 가지게 된다. 그리고 사용자의 그룹 권한을 www-data로 설정하면 이 사용자는 apache를 통해 업로드된 파일을 그룹 권한으로 접근할 수 있다. 꽤 그럴싸하다. 하지만 이는 777과 707의 차이처럼 유의미한 차이는 없다. 이유는 어차피 나 외에 다른 사용자 역시 www-data 그룹에 속해 있기 때문에 내 파일에 대한 접근이 자유롭고 파일의 기본 권한은 644 이기 때문에 nobody 접근 역시 막지 못 한다.

과거 이 apache를 nobody로 구동하는 방식(약 15년전 방식)때문에 일반 사용자는 apache 실행권한으로 업로드된 파일에 대한 변경이나 실행이 필요할 때 일일이 호스팅 업체에 전화해서 권한 변경 요구를 해야했다. 하지만 이런 요청 방식은 근본적인 문제해결 방식이 아니기 때문에 파일이 새로 업로드될 때 마다 권한을 요청해야하는 번거로움이 발생하게 된다.

그래서 최근에는 이런 문제를 근본적으로 해결하는 방식이 사용되고 있다.

바로 suexec라는 apache module이다. 이 모듈이 설치된 apache는 사용자 디렉토리를 접근할 때 사용자 권한으로 파일을 업로드하게된다. (오래전 부터 존재했던 모듈이지만 활발하게 사용되게 될 것은 5년 전으로 알고 있다.) 때문에 FTP를 이용해서 파일을 올리든 apache를 이용해서 파일을 올리든 모두 동일한 사용자 권한으로 파일이 작성된다. 이 모듈하나로 사용자 파일에 대한 문제는 깔끔하게 해결할 수 있다.

고맙게도 국내 호스팅 업체는 대 부분 이 모듈을 사용하지 않는다. (응?)

작가미상 에서는 suexec를 기본 제공하기 때문에 권한 문제로 인한 피로를 경험할 수 없다.

참고

우리가 사용하는 사용자의 소유권은 UID라는 값을 가지게 된다. 우리가 firechoi라고 눈으로 보이는 값은 사용자의 편의를 위해서 제공되는 문자 값이고 이 값은 고유한 UID값을 가지게 된다. 보통 1000번 이상의 UID값을 가지게 되고 red hat 계열의 OS는 nobody로 99 값을 ubuntu 계열에서는 65534 값을 가지게 된다. 사용자를 firechoi, armada, mrbong 순으로 추가할 경우 firechoi가 1001번의 UID값을 가지게 됐다면 armada는 1002번 mrbong은 1003번의 UID값을 가지게 된다. 즉 UID값은 고정값이 아니라 관리자가 사용자를 추가했을때 생성되는 가변적인 값이다.

A 서버에 있는 firechoi의 index.html을 B 서버로 압축해서 옮겼을때 B 서버에 firechoi라는 계정이 없을 경우 OS는 사용자 계정명 firechoi을 인식하지 못 하고 UID 값인 1001을 출력하게 된다. 당연히 firechoi에 대한 소유권이 없는 상태가 된다.(이 파일이 가지고 있는 권한은 익명권한 밖에 없게 된다.)

때문에 파일을 압축해서 다른 서버로 이동할 경우 기존 서버에서 사용하던 계정명(여기서는 firechoi)을 꼭 이전할 서버에 생성한 후에 이동해야 한다.

계정명을 변경해야 할 경우에는 파일을 다운 받아서 (윈도우 PC로 다운 받을 경우 리눅스 파일시스템의 정보는 모두 삭제된다.) 리눅스 권한을 삭제하고 FTP로 파일을 업로드해서(권한세탁… 응?) 권한 충돌을 피하길 바란다.

cli를 잘 사용하시는 분은 명령어를 통해 ftp로 바로 접속하셔서 옮기셔도 됩니다. ftp서버는 사용자 계정으로 파일을 쓰게 되므로 B서버의 계정 권한으로 데이터가 옮겨지게 된다.

작가미상 에서는 이런 문제를 해결하기 위해 서버 이전 서비스를 무료로 대행해 드리고 있습니다. ㅎㅎㅎ

Published inLinux