사이트 내 전체검색
[linux] 아파치 실행파일(httpd)에 대한 퍼미션
로빈아빠
https://cmd.kr/server/361 URL이 복사되었습니다.

본문

아파치 실행파일(httpd)에 대한 퍼미션

-작성자 : 산이 <san2(at)linuxchannel.net>
-대상자 : 아파치 서버 관리자
-작성일 : 2000.12.10

* 예전에 적수네(LSN)에 올렸던 글입니다.
* apache를 user 레벨에서 실행시키는 방법과
* httpd 퍼미션에 관한 얘기입니다.
* httpd 퍼미션은 그리 큰 문제는 아닌듯 싶군요.
* 필요없는 부분을 삭제 및 수정해서 다시 작성한 글입니다.
* 자신이 (초보)서버관리자라면 한번 곰곰히 생각해 보시거나
* 그냥 가볍게 읽어셔도 상관없습니다.
-----------------------------------------------------------

*주)
이 글은 아파치 서버 관리자를 대상으로, 아파치 실행 파일(이하 "httpd")의 보안(퍼미션?) 내용을 다루고 있습니다.
어쩌면 대수롭지 않은 문제일 수 도 있지만 왠지....
제가 아는 범위에서는 아래와 같은 내용에 대해서 언급한 글이 없어서 올려봅니다.
조언을 주실분은 언제든지 환영합니다.

내용상 간혹(?) 경어를 생략했습니다. 양해해 주시길 바랍니다.


*요점 정리
httpd는 일반적으로 퍼미션이 755이다. 즉 root가 아닌 다른 유저로도 어떤 조건에서는 얼마든지 아파치를 실행 가능하다는 의미이다.
아파치 제공 문서(http://www.apache.org/docs/misc/security_tips.html)에서는 511로 설정하는 예가 있다. 그러나 제가(이하"필자")가 권장하는 퍼미션은 755도 511도 아닌 700이나 500이다.
즉 특별한 경우가 아닌 이상 다른 유저가 실행하지 못하도록 하는 것이 좋을 듯 싶다.

*주의)
혹시나 해서 실제로 웹호스팅업체의 계정(쉘 권한)을 가지고 있는 분은 테스트하지 마시길 바랍니다. 해당 웹호스팅 업체로부터 매우 혼날 듯.....................T.T


목차
1. 배경
2. 실전테스트
  2-1. 전제 및 목표
  2-2. 아파치 실행파일(httpd)과 설정파일(httpd.conf) 찾기
  2-3. httpd.conf파일 복사 및 편집
  2-4. 유저권한으로 아파치 실행 및 테스트
3. 퍼미션 조정 및 생각해볼 만한 것들
4. 기타


1. 배경

오래전에 아파치 서버를 두개 설치하여 테스트할 즈음에는 그냥 간과했던 문제인것 같습니다.
얼마전(?) 필자가 운영하는 게시판에 "low numbered" 포트에 대한 설명을 하던 중 재테스트해 본 결과를 이제서야 재인지하게 되었군요.

보안 및 퍼미션에 대해서 조금이라도 인지하고 있는 분이라면 httpd 퍼미션을 어떻게 설정하고 운영하는지 자못 궁금합니다.(이미 알고 대체하고 있는 분도 분명 있으리라 믿습니다.) 확인차, 실제로 어느 웹호스팅 업체에서는 퍼미션이 755이더군요.....T.T

주)"low numbered port"
맨 페이지에 의하면 1024보다 작은 포트를 의미한다. 이 포트는 오직 root 레벨에서 만 접근가능 하다고 나와 있다. 포트번호 1024는 low numbered port가 아니므로 root가 아닌 다른 유저권한으로 접근이 가능하다.

그럼 실제로 어떤 일이 벌어지는지 실전테스트 해보자. (특히 사용자 많은 시스템에서는 주의깊게)

2. 실전 테스트

2-1. 전제 및 목표

일반적으로 유닉스/리눅스는 많은 계정이 있기 때문에 대부분 쉘권한이 주어진 경우가 많다. (쉘권한이 없는 유저도 있다.)
여기에서는 쉘권한을 가진 "san2"라는 유저가 root의 도움없이 1024 포트로 아파치를 실행하여 자신의 홈페이지를 구축하고자 한다.

$ whoami san2 $ pwd /home/san2/temp $


2-2. 아파치 실행파일(httpd)과 설정파일(httpd.conf) 찾기

일반적으로 아파치 httpd는

  /usr/sbin/httpd
  /usr/local/apache/bin/httpd
  /usr/local/etc/httpd/bin/httpd
  또는 서버관리자가 따로 설치한 위치

에 httpd가 존재한다.
우리는 웹서버 데몬이름을 httpd라고 많이 알고 있으나, 무조건 httpd라는 이름으로 웹서버 데몬이 존재하리라고 단정지을 수 없다. 왜냐하면 아파치 데몬 같은 경우에는 소스로 컴파일 할때 얼마든지 이 데몬이름(--target=서비스이름)을 바꿀 수 있기 때문이다.

만약 위의 3곳에서 찾질 못한다면 find 명령으로 찾아볼 수 도 있고, /etc/services 파일을 열어보고 80포트에 어떤 서비스 이름이 있는지 확인한 후 찾아볼 수 도 있다.
또한

$ ps -ef | grep httpd

(/bin/ps 파일에 퍼미션이 막혀있지 않다면) 명령으로 어느 위치에서 실행되고 있는지 확인해 볼 수 있다.

마찬가지로 httpd.conf 파일도 쉽게 찾을 수 있을 것이다.


2-3. httpd.conf파일 복사 및 편집

설정파일을 손수 입력하여 작성할 수도 있지만 여간 복잡한 파일이 아닐 수 없다.
일단 위치를 알고 있는 설정파일을 자신의 홈디렉토리로 httpd-san2.conf 파일로 복사하자. (설정파일 이름을 서로 구별하기 위해서 "httpd-san2.conf"로 정했음)

$ pwd /home/san2/temp $ cp /usr/local/apache/conf/httpd.conf httpd-san2.conf $

복사한 httpd-san2.conf 파일을 열어서 다음과 같이 몇군데 만 수정한다. (필요한 부분만 요약하면)

LockFile /home/san2/temp/httpd.lock PidFile /home/san2/temp/httpd.pid ScoreBoardFile /home/san2/temp/httpd.scoreboard Port 1024 #<-- 1024또는 그 이상의 포트 번호로 User san2 Group nobody #<-- 경우에 따라서 설정 ErrorLog /home/san2/temp/error_log CustomLog /home/san2/temp/access_log common 기타 DocumentRoot 또는 가상호스트 섹션 등등 수정이 필요한 곳

수정한 설정파일이 문법에 맞는지 확인해 봅니다.

$ /usr/local/apache/bin/httpd -t /home/san2/temp/httpd-san2.conf Syntax OK $

2-4. 유저권한으로 아파치 실행 및 테스트

그럼 한번 "san2"라는 유저가 위의 설정파일을 중심으로 1024 포트로 아파치 데몬을 실행해 보자. httpd 실행 파일이 /usr/local/apache/bin/httpd에 있고, ServerRoot가 /usr/local/apache이라면,

$ /usr/local/apache/bin/httpd -f /home/san2/temp/httpd-san2.conf $

와 같이 명령을 주면 아파치 데몬을 하나 더 띄울 수 있다. 아마 아무 에러가 없다면 데몬이 가동중 일겁니다. 만약 에러가 난다면 위에서 수정한 내용 중에서 san2 유저가 접근할 수 없는 위치에 각 파일을 설정한 경우입니다.

참고로 "-f" 옵션은 설정파일의 위치를 지정한 옵션이며 시스템 절대경로나 ServerRoot를 기준으로 상대경로로도 입력 가능합니다.

직접 한번

$ ps -ef | grep httpd root 29626 1 0 Dec09 ? 00:00:02 /usr/local/apache/bin/httpd nobody 31182 29626 0 12:16 ? 00:00:00 /usr/local/apache/bin/httpd nobody 31183 29626 0 12:16 ? 00:00:00 /usr/local/apache/bin/httpd nobody 31184 29626 0 12:16 ? 00:00:00 /usr/local/apache/bin/httpd nobody 31185 29626 0 12:16 ? 00:00:00 /usr/local/apache/bin/httpd nobody 31186 29626 0 12:16 ? 00:00:00 /usr/local/apache/bin/httpd san2 31210 1 0 12:31 ? 00:00:00 /usr/local/apache/bin/httpd -f / san2 31211 31210 0 12:31 ? 00:00:00 /usr/local/apache/bin/httpd -f / san2 31212 31210 0 12:31 ? 00:00:00 /usr/local/apache/bin/httpd -f / san2 31213 31210 0 12:31 ? 00:00:00 /usr/local/apache/bin/httpd -f / san2 31214 31210 0 12:31 ? 00:00:00 /usr/local/apache/bin/httpd -f / san2 31215 31210 0 12:31 ? 00:00:00 /usr/local/apache/bin/httpd -f / $

로 확인해 보거나

  http://HOSTNAME:1024/

로 접속해 보면 또다른 웹페이지가 보일 것입니다.

아주 간단하지요?

만약 위의 수정한 설정파일에서 포트번호를 1024보다 작은 포트를 선택하면, 예를 들어

Port 1000

으로 설정했다면, 에러로그 파일에 다음과 같은 내용을 볼 수 있을 것입니다.

[Sun Dec 10 12:22:00 2000] [crit] (13)허가 거부됨: make_sock: could not bind to port 1000

이는 1024보다 작은 포트는 오직 root만이 접근할 수 있다는 의미입니다.
그럼 1024 포트로 실행 중인 아파치를 Down 시켜 봅시다.
간단하지요 PID의 권한이 san2이므로 얼마든지 가능하지요.

$ ls -l httpd.pid -rw-r--r-- 1 san2 san2 6 Dec 10 12:31 httpd.pid $ $ kill `cat httpd.pid` $ $ ps -ef | egrep "san2(.+)httpd" $

(/bin/kill 파일에 퍼미션이 막혀 있다면 Down시킬 수 없겠네요....T.T 다른 방법은?)


3. 퍼미션 조정 및 생각해볼 만한 것들

앞에서 테스트해 보았듯이 계정사용자에게 쉘권한이 있고, httpd의 위치를 알고 있고, 또한 사용자에게 httpd 실행권한이 있다면 얼마든지 웹서버를 다른 포트로 실행할 수 있다는 것을 알 수 있었다.

좀 섬짓한(?) 일이군요.......T.T(왜 이제야 알게 되었는지.........)

따라서 필자가 권장하는 퍼미션은 root외 다른 유저가 실행할 수 없는 퍼미션으로 조정해 주는 것이 후한(?)을 없애는 한가지 방법인 듯 하군요.

# chmod go-rwx httpd 또는 # chmod o-x httpd

어떤 후한(?)이 있을 까요?
극단적인 예이기는 하지만, StartServer수를 많이 설정해서 시스템 자원을 고갈시킬 수도 있을 것이고, 쉘스크립트를 작성해서 아파치 서버가 다운될 때까지 계속 1000개 이상 띄울 수도 있을 것이고......생각해 보면 더....

이렇게 배짱 두둑한(?) 유저가 있을까요?
있다면 서버관리자는 곤욕을 치러야하겠지요.


4. 기타

어떻게 생각해 보면 큰 문젯거리도 아닐 수도 있습니다.
그런데 왜 아파치 httpd 파일에 다른 유저가 실행할 수 있도록 기본(?) 설정되어 있는지 알 수가 없군요...

다른 이유가 있을까요?
(서버관리자 측면에서는 불리한 경우라서....생각해 봅니다.)

END

댓글목록

등록된 댓글이 없습니다.

1,139 (12/23P)

Search

Copyright © Cmd 명령어 3.147.60.62