>> Edit article
이름
제목
패스워드
: <PRE>[참고] 아파치 실행파일(httpd)에 대한 퍼미션 : : -작성자 : 산이 <san2@linuxchannel.net> : -대상자 : 아파치 서버 관리자 : -작성일 : 2000.12.10 : : *주) : 이 글은 아파치 서버 관리자를 대상으로, 아파치 실행 파일(이하 "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-------------------------------------- : </PRE> : -- : LinuxChannel.NET rpm 버전만 되는거 아님니까..컴팔한건 않되는데여.... 움~~~ 심볼릭링크로 해야하나. 잘 않되서여......--이 곳에 서명을 적어주십시오. 열심히...
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved