bbong blog : 위치로그 : 태그 : 방명록 : 관리자 : 새글쓰기
bbong blog 블로그에 오신것을 환영해요^^
방명록에 글 남기기!!
55
108
159246
'Linux/Apache'에 해당되는 글 10건

1. 설치파일 받기
http://cband.linux.pl/download
(접속이 잘 안되니 첨부파일을 다운받아서 설치하면 됩니다.)


[Stable](안정화)버전중 높은 버전으로 다운로드 받으면 되며 글 쓰는 시점 가장 최근버전은 0.9.7.4이다.
젠투나 데비안, 페도라를 위한 패키지도 있으니 편한버전으로 다운로드받길 바란다.




2. 설치하기

● 설치하기에 앞서..
패키지 버전으로 설치할때는 상관없으나 만약 아파치를 컴파일하여 사용하고 있다면 컴파일시 동적모드(DSO)로 설치를 해주었는지 살펴보고 만약 정적모드(Static)로 설치하였다면 다시 컴파일 하여야 한다.



wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz 

tar -zxvf mod-cband-0.9.7.5.tgz

cd mod-cband-0.9.7.5

설정된 글씨체가 작게 설정되어있는관계로 설치전에 글씨체 크기를 좀 더 크게 해준다.

#vi /usr/local/src/mod-cband-0.9.7.5/src/mod_cband.c

2468 번째 줄

"body           { font-family: sans-serif; font-size: 0.9em; }\n"

"td             { padding-left: 0.5em; padding-right: 0.8em; }\n"
"div.section    { margin-top: 1.5em; margin-bottom: 0.8em; }\n"

-> 이부분을 적당한 크기로 수정해 주시면 됩니다.(이미 설치를 해버린 상태라면 make clean 후 make, make install)


./configure

make

make install

※ 정상적으로 설치가 되었다면, 아파치의 httpd.conf파일에 'LoadModule cband_module      modules/mod_cband.so' 해당 구문이 추가 되었을것이다.
추가되지 않았다면 정상적으로 설치가 되지 않은것이므로 확인을 하여야 한다.

※ configure할때 apxs관련 에러가 나올 경우가 있다.
이 경우에 apxs의 경로를 안다면 './configure --with-apxs=apxs경로'를 적어주면 된다.
만약 apxs의 경로를 모른다면 'which apxs'로 찾아보고 그래도 없다면 find를 사용하자.
find / -name apxs


혹은

#PATH=$PATH:/usr/local/apache/bin
#export path
해준 후 make 해줘도 됨.


3. 설정하기

mod_throttle의 throttle-status와 throttle-me의 역활을 할수 있게 설정한다.

httpd.conf 마지막줄에 아래의 구문을 추가하도록 한다.

--------------------------------- httpd.conf ----------------------------------

<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>

--------------------------------------------------------------------------------

설정을 완료하고 Apache를 재시작시키고 http://서버주소/cband-status로 접속해보면
throttle-status와는 좀 다른 살짝 복잡하고 알록달록한 페이지를 만날수 있다.

4. 설정하기2 (VirtualHost 트래픽제한하기)

대부분의 유저가 mod_throttle 및 mod_bandwidth를 사용하는 이유가 VirtualHost별 트래픽제한을 목적으로 두고 있을것이다.
mod_cband라고 설정방법이 크게 다르진 않다.

예제1) VirtualHost별 트래픽제한하기
<VirtualHost *>
.
.
CBandLimit 500Mi
CBandPeriod 1D

CBandExceededURL http://test.com/traffic_over.html

# test.com에 대해 1일에 500Mbyte 의 트레픽을 허용하며 그 트레픽을 초과하면 http://test.com/traffic_over.html 을 출력합니다.

</VirtualHost>

예제2) 여러개의 주소를 사용하는 사용자의 트래픽 묶어서 제한하기
<대부분 웹호스팅을 하거나 할 경우 한 사용자가 여러개의 도메인을 사용하는 경우가 많고, 그에 따라 여러개의 <VirtualHost> 를 가지게 되는 경우가 빈번합니다. 그럴 땐 어떻게 하느냐?

<CBandUser user>
   CBandUserLimit 300Mi
   CBandUserPeriod 1D
</CBandUser>
<VirtualHost *:80>
   ServerName oper.or.kr
   DocumentRoot /usr/local/www/data
   CBandUser user
</VirtualHost>
<VirtualHost *:80>
   ServerName ik.oper.or.kr
   DocumentRoot /usr/local/www/data
   CBandUser user
</VirtualHost>

  일종의 클래스 개념입니다. user 라는 클래서는 1일에 300Mbyte 의 전송량을 할당받고, oper.or.kr 과 ik.oper.or.kr 도메인이 user 클래스의 영향을 받는다는 구문입니다. CBandExceededURL 를 지정하지 않았기 때문에 트레픽을 초과하면 503 에러를 출력합니다.

  이 외에도 VirtualHost 별로 대역폭 설정 및 접속 IP 별로 대역폭 설정 등을 할 수 있지만, 그 부분은 다루지 않겠습니다. (왜냐? 역시 초보라..)
  설정을 다 하셨으면 apache 를 재시작해 주시고요. 이제 http://Domain/cband-status 와 http://Domain/cband-status-me 로 접속해 확인합니다. 물론 위에서 설정한 Domain 으로 접속해야겠죠?

  위 정보는 이곳에서 얻어왔습니다. 아래의 설정 값 역시 이곳에서.. ^^; (귀찮음?) 보다 자세한 것은 이곳을 한번 살펴보시고 해결이 안되신다면 코멘트로 질문 달아주시면 아는 것을 답변해 드리겠습니다.

1) 단위
  * 전송속도 단위
     o kbps, Mbps, Gbps - bits per second:1024, 1024*1024 , 1024*1024*1024 bps
     o kb/s, Mb/s, Gb/s - bytes persecond:  1024, 1024*1024, 1024*1024*1024 b/s
     o 기본 : kbps

  * 트래픽 쿼터 단위
     o K, M, G - bytes: 1000, 1000*1000,1000*1000*1000 bytes
     o Ki, Mi, Gi - bytes: 1024, 1024*1024,1024*1024*1024 bytes
     o 기본 : K

  * 시간(기간) 단위
     o S, M, H, D, W - 초, 분, 시간, 일, 주
     o 기본 : S

2) 지시자들
  (1) 이름 : CBandDefaultExceededURL
     설명 : 제한을 초과했을때보여줄 URL  (지정하지 않으면, 503 에러 페이지)
     문맥 : Serverconfig
      문법 :CBandDefaultExceededURL URL

  (2) 이름 : CBandDefaultExceededCode
     설명 : 제한을 초과했을시 보여줄 에러코드
     문맥 : Server config
     문법 :CBandDefaultExceededCode HTTP_CODE
     예제 :CBandDefaultExceededCode 509  

  (3) 이름 : CBandScoreFlushPeriod
     설명 : scoreboard 파일에기록할 요청수, mod_cband 의 성능에 영향을 준다.
     기본값 : 1
     문맥 : Server config
     문법 :CBandScoreFlushPeriod 요청수
     예제 :CBandScoreFlushPeriod 100  ( 매 100번의 요청에 한번씩 scoreboard 파일에 기록)

  (4) 이름 : CBandSpeed
     설명 : 가상호스트 도메인의 최대 속도,요청수, 접속수  설정
     문맥 :<Virtualhost>
     문법 : CBandSpeed kbpsrps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수
     예제 : CBandSpeed 102410 30
             최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.

  (5) 이름 : CBandRemoteSpeed
     설명 : 접속자(IP)의 최대속도,요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
     문맥 :<Virtualhost>
     문법 : CBandRemoteSpeedkbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당최대 요청수
             max_conn - 최대 동시 접속수
     예제 : CBandRemoteSpeed20kb/s 3 3
             접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.

  (6) 이름 : CBandClassRemoteSpeed
     설명 : 정의한 class(ip 범위)에대해 최대속도, 요청수, 접속수 제한
     문맥 :<Virtualhost>
     문법 :CBandClassRemoteSpeed class_name kbps rps
             class_name - 이미 정의한 클래스 이름 (IP범위)
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수
      예제 : <CBandClassgooglebot_class>
               CBandClassDst 66.249.64/24
               CBandClassDst 66.249.65/24
               CBandClassDst 66.249.79/24
             </CBandClass>
                   CBandClassRemoteSpeedgooglebot_class 20kb/s 2 3
                   위에서 정의한클래스(googlebot_class)의 요청에는 20kb/s 의 전송속도, 초당 3개의 요청, 동시 접속 3개로 제한.

  (7) 이름 : CBandRandomPulse
     설명 : 속도 제한을 위해서 임의의파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
              부하가 많을때는 자동 Off된다.
     문맥 : Global
     문법 : CBandRandomPulseOn/Off

  (8) 이름 : CBandLimit
     설명 : 제한할 전송량을 설정한다.(기간은 CBandPeriod 에서 설정)
     문맥 :<Virtualhost>
     문법 : CBandLimit limit
             limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)
     예제 : CBandLimit 10M - 전송양을 10M(10*1000*1000bytes)로 제한한다.
             CBandLimit 10Mi - 전송양을 10M(10*1024*1024bytes)로 제한한다.

  (9) 이름 : CBandClassLimit
     설명 : 정의한 class(ip범위)에대해 제한할 전송량 설정.
     문맥 :<Virtualhost>
     문법 : CBandClassLimitclass_name limit
             class_name - 이미 정의한 클래스 이름(ip범위)
             limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)

  (10) 이름 : CBandExceededURL
     설명 : 제한을 초과했을시 보여줄URL, 지정하지 않으면 503 에러 발생 (가상호스트에서)
     문맥 :<Virtualhost>
     문법 : CBandExceededURLURL

  (11) 이름 : CBandExceededSpeed
     설명 : 전송양을 초과했을시 , 전송속도제한 설정.
     문맥 :<Virtualhost>
     문법 :CBandExceededSpeed kbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수

  (12) 이름 : CBandScoreboard
     설명 : 가상호스트의 scoreboard파일 지정. (성능향상을 위해 필요)
     문맥 :<Virtualhost>
     문법 : CBandScoreboardpath
             (path는 아파치(www)권한으로 쓰기가능해야 함)

  (13) 이름 : CBandPeriod
     설명 : 용량제한기간(이 기간이 지나면,측정되었던 용량은 지워진다.)
     문맥 :<Virtualhost>
     문법 : CBandPeriod period
             period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
     예제 : CBandPeriod1W  (1주일)
             CBandPeriod 14D  (14일)
             CBandPeriod 60M  (60분)

  (14) 이름 : CBandPeriodSlice
     설명 : 기간이 길때는 나눌 기간을명시한다.
     기본값 : slice_len = limit
     문맥 :<Virtualhost>
     문법 : CBandPeriodSliceslice_length
     예제 : CBandLimit 100G
             CBandPeriod 4W
             CBandPeriodSlice 1W
              4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
              1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.

  (15) 이름 : <CBandUser>
     설명 : 새로운 cband 가상 사용자설정
     문맥 : Server config
     문법 : <CBandUseruser_name>

  (16) 이름 : CBandUserSpeed
     설명 : cband 가상 사용자의 속도,요청수, 동시 접속수 제한
     문맥 : <CBandUser>
     문법 : CBandUserSpeedkbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수
     예제 : CBandUserSpeed100kb/s 10 5

  (17) 이름 : CBandUserLimit
     설명 : cband 가상 사용자의 저송용량 제한.
     문맥 : <CBandUser>
     문법 : CBandUserLimitlimit
             limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
     예제 : CBandUserLimit 10M
             CBandUserLimit 10Mi

  (18) 이름 : CBandUserClassLimit
     설명 : cband 가상 사용자의 정의한class(ip범위)에 대해 제한할 전송량 설정
     문맥 : <CBandUser>
     문법 :CBandUserClassLimit class_name limit
             class_name - 지정한 class(IP범위)이름
             limit -사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)

  (19) 이름 : CBandUserExceededURL
     설명 : cband 가상 사용자의,제한을 초과했을시 보여줄 URL,
              지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
     문맥 : <CBandUser>
     문법 :CBandUserExceededURL URL

  (20) 이름 : CBandUserExceededSpeed
     설명 : cband 가상 사용자의,전송양을 초과했을시 , 전송속도 제한 설정.
     문맥 : <CBandUser>
     문법 :CBandUserExceededSpeed kbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수

  (21) 이름 : CBandUserScoreboard
     설명 : cband 가상 사용자의,scoreboard 파일 지정.
     문맥 : <CBandUser>
     문법 :CBandUserScoreboard path
             (path는 아파치(www)권한으로 쓰기가능해야 함)

  (22) 이름 : CBandUserPeriod
     설명 : cband 가상 사용자의,용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
     문맥 : <CBandUser>
     문법 : CBandUserPeriodperiod
             period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
     예제 : CBandUserPeriod 1W
             CBandUserPeriod 14D
             CBandUserPeriod 60M

  (23) 이름 : CBandUserPeriodSlice
     설명 : cband 가상 사용자의,기간을 나눌 기간 명시
     기본값 : slice_len = limit
     문맥 : <CBandUser>
     문법 :CBandUserPeriodSlice slice_length
     예제 : CBandUserLimit100G
             CBandUserPeriod 4W
             CBandUserPeriodSlice 1W
              4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
              1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.



## 참고문서
http://cband.linux.pl
http://www.howtoforge.com/mod_cband_apa ··· rottling
http://www.superuser.co.kr/home/lecture ··· %3D10588


기본적인 사용에 mod_throttle과 다른점은 Period와 트래픽Limit을 따로 지정해준다는것 외에는 없는것 같다. 사용하는 단위도 M, G 로 별다를바 없다.
(단위에 대한 자세한 내용은 http://cband.linux.pl/documentation 에서 확인할수 있다.)

한가지 다른점을 들자면 mod_throttle사용시 여러VirtualHost를 묶을 경우 별다른 방법이 없어 그냥 Directory로 제한을 하곤 했는데(mod_throttle의 기능에 대해 자세히 알지 못해 이 방법을 사용했을수도 있음을 미리 밝힌다..-_-)
User를 명명해 묶을수 있다는 기쁨을 표하지만, 유저가 직접 확인할수 없다는부분에 대해서는 mod_throttle의 디렉토리로 묶는 방법과 같아 살짝 아쉽다.
이 부분에 대해서는 많은 삽질을 거쳐봐야 할것 같다.


위로
#ErrorLog logs/error_log
부분 주석 처리하고

ErrorLog /dev/null

위로

apache 자동실행 설정


Apache 의 실행 스크립트인 apachectl 을 /etc/init.d에 httpd라는 이름으로 복사

apachectl은 Apache가 설치된 bin 디렉토리에 있다.


[root@localhost httpd-2.2.14]# cp /usr/local/server/apache/bin/apachectl /etc/init.d/httpd


chkconfig 를 이용하여 자동실행을 등록한다


[root@localhost httpd-2.2.14]# chkconfig --add httpd

 

httpd 서비스는 chkconfig 를 지원하지 않습니다

 

[root@localhost httpd-2.2.14]# vi /etc/init.d/httpd

#!/bin/sh 밑에 추가 5줄


# chkconfig: 2345 90 90
# description: init file for Apache server daemon
# processname: /usr/local/server/apache/bin/apachectl
# config: /usr/local/server/apache/conf/httpd.conf
# pidfile: /usr/local/server/apache/logs/httpd.pid

 

정상적으로 등록이 되는지 확인해 보자.

 

[root@localhost httpd-2.2.14]# chkconfig --add httpd

[root@localhost httpd-2.2.14]# chkconfig --list | grep httpd


httpd           0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제

mysql은 이쪽으로
http://www.bbong.net/341


위로
<BASE target="_son">
다음 사이트에 접속해서 파일을 다운받는다.
 
#cd /usr/local
#tar xvfz modsecurity-apache_1.9.4.tar.gz
#cd modsecurity-apache_1.9.4
#/usr/local/apache2/bin/apachectl stop
#/usr/local/apache2/bin/apxs -cia /usr/local/modsecurity-apache_1.9.4/apache2/mod_security.c
  DSO 방식으로 설치
#/usr/local/apache2/bin/apachectl start
  apxs를 이용하여 ModSecurity 모듈을 컴파일하고, 설치하고, 설정을 자동으로 변경한다.

  위의 명령은 mod_security.c를 컴파일 하고(-c 옵션), 공유객체를 웹서버 modules 디렉토리에
  설치하고(-i 옵션), 아파치 httpd.conf 설정파일에 적절한 LoadModule 줄을 추가(-a 옵션)한다.
  참고로 apxs는 아파치 웹서버의 확장모듈을 컴파일하고 설치하는 도구로써, 여러 소스와 오브
  젝트파일을 LoadModule 지시어로 실행 중인 아파치 서버로 읽어 들일 수 있는 동적공유객체
  (DSO)를 만든다. 위의 결과로 modules 디렉토리에 mod_security.so가 생성되고 httpd.conf 파
  일에 “LoadModule security_module modules/mod_security.so” 라인이 추가된다.

************만약 설치중에!!!!!!!!
Warning!  dlname not found in /usr/local/apache/modules/mod_security.la.
Assuming installing a .so rather than a libtool archive.
chmod 755 /usr/local/apache/modules/mod_security.so
chmod: cannot access `/usr/local/apache/modules/mod_security.so': 그런 파일이나 디렉토리가 없음
apxs:Error: Command failed with rc=65536


에러 출력되면
1) cd /usr/local/apache/build
2) mv libtool libtool.back
3) ln -s /usr/bin/libtool libtool
이렇게 libtool 설정 후 다시 설치

ModSecurity 활성화 및 Rule 정의
 
① httpd.conf 파일 수정
  
   # vi /usr/local/apache2/conf/httpd.conf 
   -----------------------------------------------------
    Include conf/modsecurity/*.conf                                 <=== 라인 추가
   -------------------------------------------------------

#mkdir /usr/local/apache2/conf/modsecurity                <=== modsecurity 룰 설정파일 디렉토리를 만들고
   첨부파일을 다운받아서 업로드한다. 아래 설정파일은 정보보호진흥원에서 2007년 11월 20일자로 배포하는 설정파일이다.
    * modsecurity_hosting_071120.conf    ===> 웹호스팅용.
    * modsecurity_SMB_071120.conf       ====> 스몰비지니스용(중소기업용)
 
#vi /usr/local/apache2/conf/modsecurity/modsecurity_hosting_071120.conf
안에 내용을 읽어보고 주석(#)을 제거하고 설정을 완료한다. 정보보호진흥원에서 만든 자료라서 잘해놨음..설명...ㅎ
설정파일 자세한 설명은 첨부한 pdf 참고하시길...
그리고 나서  아파치 재시작...
 
 
작동 여부 확인
 
#curl --head http://127.0.0.1/
 
--------------------------------------------------
HTTP/1.1 403 Forbidden
Date: Tue, 14 Aug 2007 10:41:13 GMT
Server: Microsoft-IIS/5.0                                        
<===정상작동중...       아닐때==>apache로나타남.
Content-Type: text/html; charset=iso-8859-1
---------------------------------------------------

위로
(98)Address already in use: make_sock: could not bind to address [::]:80

apapche 데몬이 확실히 죽지 않아서 그렇습니다.

netstat -nlp 에서 80포트 쓰고 있는 아파치 PID 검색해서

kill -9  PID값을 넣어서 죽인 후 실행 하시면 됩니다.

정 모르시면 재부팅~

위로

다음과 같은 에러 메시지가 뜨는 경우가 있다. 해결책으로는 간단하다.


자신의 호스트 네임을 알지 못한다는 뜻이므로


자신의 호스트 네임을 알아보자


#hostname


linuxone



호스트 네임을 추가시켜주자 알수 있도록 이부분이 빠져서 에러가 난것이다.


#vi /etc/hosts


192.168.1.14              linuxone             linuxone



끝이다.. IP는 자신의 아이피를 적어주고 linuxone 부분에는 자신의 호스트네임을 적어주자.


위로

1. 컴파일옵션

---------------------------------------------------------------------------------------

./configure --prefix=/usr/local/apache2 --enable-rule=SHARED_CORE --enable-module=so --enable-shared=max --enable-so --enable-ssl --enable-cgid --enable-cgi 

 

------------------- 기본으로 주어야하는 옵션 -----------------------

--enable-suexec  // suecex 사용

--with-suexec-uidmin=500  // 기본 uid가 500 미만인 유저가 접근할경우 에러

--with-suexec-gidmin=500  // 기본 gid가 500 미만인 유저가 접근할경우 에러

--with-suexec-docroot=/   // hosting 폴더 설정  /home 또는 /hosting 등 만약에

/home1 /home2 등 여러곳일 경우 루트 "/" 로 적는다.

--with-suexec-caller=nobody  // 아파치 실행권한 대부분  nobody이다 적어주지 않을경우 www 사용자로 된다.

이정도만 해주면 무리업이 진행 될것입니다.



---------------------------------------------------------------------------------------

참고자료

---------------------------------------------------------------------------------------

Apache 에서 CGI 를 위한 suexec 사용하기. 출처(phpschool.com)


Apache 를 컴파일 할때
--enable-suexec
옵션을 줘서 컴파일 한다.

위 옵션을 줄때는 반드시 부수적인 옵션 하나 이상이 있어야 한다.
  --with-suexec-bin       Path to suexec binary
  --with-suexec-caller    User allowed to call SuExec
  --with-suexec-userdir   User subdirectory
  --with-suexec-docroot   SuExec root directory
  --with-suexec-uidmin    Minimal allowed UID
  --with-suexec-gidmin    Minimal allowed GID
  --with-suexec-logfile   Set the logfile
  --with-suexec-safepath  Set the safepath
  --with-suexec-umask     umask for suexec'd process
이것중에 적어도 하나는 포함해야 합니다.

저는 httpd-2.0.49 에서
--server-uid=web \
--server-gid=web \
--enable-suexec \
--suexec-uidmin=1000 \
--suexec-gidmin=1000
이렇게 포함했습니다. UID 와 GID 가 1000 미만인 파일은 실행이 안되게끔...
단, web User 의 UID 와 GID 가 1000 이상이여야합니다. 이상이 아닐경우 오류를 출력합니다.

컴파일 설치한 후에는 httpd.conf 파일을 수정합니다.
먼저 CGI 가 실행되게끔 해줍니다.

AddHandler cgi-script .cgi

앞에 # 주석 제거.

<Directory ... > 의 Options 에 IncludesNoExec 를 ExecCGI 로 수정

Section 3 의 Virtual Hosts 를 사용하는 경우

<VirtualHost *:80>
        .
        .
    SuexecUserGroup master master
        .
</VirtualHost>
<VirtualHost *:80>
        .
        .
    SuexecUserGroup useraaa groupaaa
        .
</VirtualHost>
<VirtualHost *:80>
        .
        .
    SuexecUserGroup userbbb groupbbb
        .
</VirtualHost>

이런식으로 SuexecUserGroup 를 써줍니다. 보시면 아시겠지만 SuexecUserGroup 다음에 처음 작성하는게 해당 도메인 User 이고 두번째 작성하는게 해당 도메인 Group 입니다.

이제 간단하게 test.cgi 파일을 작성합니다. 단 조심하실점은 작성된 CGI 파일은 Group 이나 Order 에 Write 권한이 있다면 Internal Server Error 를 출력합니다. (User 에 Write 권한은 오류출력 안함.)

간단하게 CGI 파일의 권한설정을 chmod 500 test.cgi 정도로 주시면 되겠습니다. 이렇게 주시면 Group 이건 Order 건 접근 불가능 입니다.

그리고 위에 저와 같이 UID 와 GID 를 1000 으로 주신경우에 만약 1000 이하의 User 나 Group 의 CGI 를 실행할 경우 역시 Internal Server Error 에러를 출력합니다.

그리고 SuexecUserGroup 에서 지정된 User 와 Group 이 아니여도  Internal Server Error 오류를 출력합니다.

언제든지 suexec 설정을 보실려면

./suexec -V

하시면 되며 수정은 불가입니다. 수정하실려면 Apache 재설치 하셔야합니다.


오류의 원흉 정리)
1. --enable-suexec 옵션을 사용할경우 꼭 부수적인 옵션을 하나이상 포함할것.
2. 웹서버 데몬 User 와 Group 은 --suexec-uidmin=xxx --suexec-gidmin=xxx 에서 지정된 UID 와 GID 보다 클것.
3. 파일소유주와 그룹이  --suexec-uidmin=xxx --suexec-gidmin=xxx 에서 지정된 UID 와 GID 보다 클것.
4. 파일소유주와 그룹이 SuexecUserGroup 에서 지정한 User 와 Group 일것.
5. 파일권한에 Group 과 Order 에 write 권한이 없을것.(Suexec 를 사용하는경우는 그냥 퍼미션을 Group 과 Order 에 주지마세요 User 권한만 있으면 됩니다.)

추신. 저녁에 그냥 심심해서 작성한 글입니다. Suexec 를 사용할려고 하는분이나 설정이 미비하신분들은 사용하시면 좋습니다. Suexec 를 사용하지 않는 경우는 웹CGI 땜시 서버가 흔들리는 경우가 다반사라서...--; Suexec 를 사용한다 하더라도 SuexecUserGroup 를 주지 않는다면 역시 하나마나한거라서...--;

----------------------------------------------------------------------------------------

참고자료 끝 참고자료에서 옵션 바뀐 부분있음. --suexec-uidmin=xxx --suexec-gidmin=xxx

----------------------------------------------------------------------------------------


2. # make

3. # make install

4. # vi httpd.conf

---------------------------------------------------------------------------------------

<Directory /home>  // home아래서 cgi 사용
AllowOverride None
Options ExecCGI Includes
</Directory>


AddHandler cgi-script .cgi .pl  // 주석이 있다면 해제. pl확장자 일부 있음

// 가상 호스트 부분

<VirtualHost 61.xx.xx.xx>
ServerName abc.co.kr
DocumentRoot /host/abc/public_html
ServerAlias *.abc.co.kr
#ErrorLog /host/samil25/wwwLog/errorLog
#CustomLog  /host/samil25/wwwLog/accessLog common
SuexecUserGroup abc hosting  <-- 이부분 추가
</VirtualHost>


아파치 재시작

잘되는군요. 상쾌합니다.

기타 자세한 문의 : nadanux@nate.com


위로

<Linux>Error: cannot restore segment prot after reloc: Permission denied


SELinux를 사용하는 일부 Linux 배포판에서는 IDL이나 ENVI를 실행시키려고 할때 다음과 같은 오류를 보이는 경우가 있습니다.


Error: cannot restore segment prot after reloc: Permission denied

NSA가 주관하는 SELinux 프로젝트는 커널 보안에 강력한 위력을 발휘하기도 하지만 다른 소프트웨어들이 실행되는 것도 막을 경우가 있습니다. 그러므로 혹시 위와 같은 에러메시지를 만난다면 다음의 두 가지 중 하나를 수행하여 IDL이나 ENVI를 사용할 수 있도록 해 주어야 합니다.


1. 다음과 같이 IDL 실행과 관련된 shaered object의 보안설정을 변경 합니다.

chcon -t texrel_shlib_t /usr/local/rsi/idl_6.3/bin/bin.linux.x86/*.so


2. /etc/sysconfig/selinux 파일에서 다음과 같이 수정하여 SElinux의 사용을 해제합니다.

SELINUX=disabled





[root@handol httpd-2.2.2]# /usr/local/apache/bin/apachectl start

httpd: Syntax error on line 54 of /usr/local/apache/conf/httpd.conf: Cannot load
/usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore
segment prot after reloc: Permission denied

[답변내용]

1.원인은 selinux 보안 정책 때문입니다. 이 정책을 해제하는 방법이 있구요.

cat /etc/sysconfig/selinux 을 보시면

etc/sysconfig/selinux 파일의 내용

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - SELinux is fully disabled.

SELINUX=enforcing

# SELINUXTYPE= type of policy in use. Possible values are:

# targeted - Only targeted network daemons are protected.

# strict - Full SELinux protection.

SELINUXTYPE=targeted

-------------->SELINUX=enforcing 중간부분을 SELINUX=disabled로 바뀐다음 리붓하시면 됩니
다.

2. 두번째 방법은 selinux 보안정책을 적용하는 것입니다.

#/sbin/restorecon -R -v /usr/local/apache/modules/libphp5.so

#/usr/bin/chcon -t texrel_shlib_t /usr/local/apache/modules/libphp5.so

*첫번째 방법을 적용한 후 리부팅하여 다시 아파치를 실행했을때의 에러 메세지.....

[root@handol httpd-2.2.2]# /usr/local/apache/bin/apachectl start

Syntax error on line 312 of /usr/local/apache/conf/httpd.conf:

AddType requires at least two arguments, a mime type followed by one or more file extensions


위로

프비의 강력한 'Ports' 덕에 아파치 설정은 다른 OS에 비해 조금은 더 신경을 써야 한다.

기본설치시의 'MaxClients 256' 값은 이용자가 많아지면 분명 부담스러운 수치이다. 이를 수정하기

위해서는 부득히 소스 수정후 컴파일을 해야한다. ( 리눅스도 마찮가지이지만 ) 프비는 조금은

아래처럼 비정상적인 방법을 이용해야 한다.

1> 프비는 make 하기 전까지 수정하기 위한 소스 파일이 존재하지 않는다. 다운로드 후 변경을 위해 'make' 후 진행 로그에서 다운로드 후 중지 한다.

2> 해당 아파치 버전의 ports 홈디렉토리 '/server/mpm/prefork/prefork.c' 에서 'DEFAULT_SEVER_LIMIT' 를 '512' 나 '1024' 로 변경한다.

3> 'make'

4> 'make install'

5> httpd.conf 파일의 'MaxClients 256' 값을 ''MaxClients 1024'로 수정

6> apachectl start

정상적으로 올라온다면 OK~

Apache 설치 및 프로세스 늘리기

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
worker.c 수정

# fetch http://mirror.apache-kr.org/httpd/httpd-2.2.9.tar.gz
# tar zxvf httpd-2.2.9.tar.gz
# cd httpd-2.2.9.tar.gz
# httpd-2.2.9/server/mpm/prefork
# vi prefork.c

#define DEFAULT_SERVER_LIMIT 256 -> 2048 로 수정
// MaxClient 값을 2048로 바꿔 준다는것
:wq!

# vi ../worker.c

#define DEFAULT_SERVER_LIMIT 16 -> 128
// 16 x 16 = 256
// 16 x 128 = 2048
:wq!

# ./configure --prefix=/usr/local/apache --enable-modules=all --enable-so --enable-ssl --with-mpm=prefork --enable-mods-shared=all
// Mod_Perl 을 설치 해야하므로 prefork 방식을 택한다. (worker 지원안하는듯 ..;)

# make && make install
# vi /usr/local/apache/conf/extra/httpd-mpm.conf

/usr/local/apache/conf/extra/httpd-mpm.conf 파일에서 MaxClient 값을 2048로 수정후 저장~


위로
apache
Linux/Apache, (2007/02/05 13:35)
1.x

./configure --prefix=/usr/local/apache --enable-shared=max --enable-module=so --enable-module=most --enable-rule=SHARED_CORE --enable-module=rewrite --enable-module=ssl

2.x

./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-so --enable-most --enable-rule=SHARED_CORE --enable-rewrite --enable-ssl


make;make install


# cd /usr/local/apache/conf
# vi httpd.conf
로 아파치의 환경설정파일을 연후, 중간쯤에 가면, 아래와 같이 있습니다.
DirectoryIndex index.html index.htm index.php index.php3 index.cgi index.jsp
설정이 안되어 있으면 추가해 주세요. 각 확장자를 인식시키기 위한 설정입니다.
그리고, 좀 더 밑으로 내려가면
#
# AddType allows you to tweak mime.types without actually editing it, or to
# make certain files to be certain types.
#
AddType application/x-tar .tgz
AddType application/x-httpd-php .php4 .php3 .php .htm .html .phtml .ph .inc
AddType application/x-httpd-php-source .phps
위와 같은 내용이 있는데, 여러분의 파일이 위와 내용이 다르다면 추가해 주세요.
모두 추가했으면 저장하고 나옵니다.
여기까지 아파치 관련 설정은 일단 끝입니다.

위로