DAY15-Apache

2019. 12. 10. 14:55Security/리눅스

* apache의 개요

HTTP(Hyper text transfer protocol)
- Web application layer protocol
- Client/server model
Client : browser는 웹용 client app, 질의를 전달하고 요구한 web page를 보여주는 기능을 담당. 
Server : Web server로 client의 질의에 응답하고 여러 web object를 client에 전송.
- HTTP 1.0 : RFC 1945
- HTTP 1.1 : RFC 2068

 

* 아파치 설치 과정
1.httpd-2.2.32.tar.gz 버전을 /usr/local/ 에 다운로드.
2. # cd /usr/local/ 
3. # tar xvfz httpd-2.2.32.tar.gz
4. # cd ./httpd-2.2.32
5. # ./configure --prefix=/app/apache --enable-so
6. # make
7. # make install

8. /app/apache/conf/httpd.conf에 'ServerName localhost'를 추가.

9. /app/apache/bin/apachectl start

10. /etc/rc.d/rc.local에 /app/apache/bin/apachectl start 추가

 

* httpd.conf

- 3개의 섹션으로 구성(전역 환경 설정, 기본 서버 구성, 가상 호스트 부분)

 

전역 환경 설정

- ServerRoot “/app/apache”

  -> 웹서버의 설정파일, 로그파일 등이 저장되는 최상위 디렉토리

-Timeout 120

  -> 서버와 클라이언트의 연결시에 아무런 메시지가 없을 때에 오류로 처리되는 초단위 시간

- MaxClients 150

  -> 접속 가능한 최대 client 수. 통상적으로 MaxClients의 5배 정도의 사용자가 접속 가능.

- Startservers 20

  -> 초기 서버 프로세스의 수

- MinSpareServers/MaxSpareServers

  -> 대기 상태의 프로세스 수. 딱히 큰 의미가 없기때문에 별도로 지정 안함.

- ServerName [명칭]

  -> DNS나 hosts 파일에 등록된 이름을 지정.

ServerAdmin root@localhost

  -> 관리자의 메일주소.

 

기본 서버 구성

- ServerTokens Major|Minor|Min|Prod|OS|Full

  -> client에 보내는 응답에 포함될 서버의 정보에 대한 설정. 지금은 딱히 설정하지 않음

  -> Full은 권하지 않음

- DocumentRoot “/app/apache/htdocs”

  -> 웹 서버의 홈 디렉토리

- DirectoryIndex index.html index.java index.php

  -> 메인페이지 파일명

- ErrorLog logs/error_log

  -> 웹서버에 문제가 발생시에 에러를 기록하는 로그파일

CustomLog logs/access_log combind

  -> 외부에서 접근한 기록에 대한 로그파일

UserDir public_html

  -> 개인 홈디렉토리 지정. 예전에는 있었으나 지금은 다른 파일에 있음.

 

Directory 설정

<Directory "/app/apache/htdocs"> ...</Directory>  
- 웹서버는 디렉토리 단위로 설정

 

ex) <Directory "/app/apache/htdocs">
         Options Indexes FollowSymLinks
         AllowOverride None
         Order allow,deny
         Allow from all

    </Directory>

 

option 항목
- ALL : 가능한 모든 옵션을 다 사용한다.
- None : 아무런 옵션도 없다.
- Indexes : 메인 페이지가 없는 경우 파일 목록을 보여준다.
- FollowSymLinks : 디렉토리의 심볼릭 링크를 이용한다.
- ExecCGI : CGI를 실행 등등


AllowOverride 항목
- 디렉토리에 대한 apache 레벨에서의 접근 제한
- 사용자 인증 파일인 .htaccess 파일 사용여부
- 현재 인증은 apache 레벨에서 구현하지 않는다.

 

Order 항목(require와 둘중 한 개만 사용)
- 접근 권한 적용 순서
ex) Order deny, allow
     Deny from all

     Allow from 192.168.123.
    -> 192.168.123. 으로 시작하는 IP를 제외하고 모든 접속을 막는다.


Require 설정(order와 둘중 한개만 사용) 
Require all [denied | granted] : 기본 설정
Require [not] ip ip_주소 : IP별 설정
ex) Require all granted
     Require not ip 192.168.123.0/24
     -> 192.168.123.0 네트워크를 제외하고 모두 접속 허용

 

httpd.conf의 Document Root 설정

- HTTPD 서버 관리와 Web page 관리는 서로 다른 책무이므로 반드시 분리 구성.
- Web page 관리자가 시스템 디렉토리에 접근해서는 안된다.
- Web page 관리자 계정 web 계정을 생성하고 홈디렉토리 내에서 관리가 이뤄지도록 한다.

 

관리자 정보

- 계정명 : web

- 홈디렉토리 : /home/web
- Document Root : /home/web/httpd/html

 

1. web이라는 계정 생성 후 Document Root로 사용할 폴더 생성

 

3. vi  /app/apache/conf/httpd.conf의 DocumentRoot 부분의 경로를 /home/web/httpd/html로 변경(총 2곳)

DocumentRoot "/app/apache/htdocs"를 DocumentRoot "/home/web/httpd/html"로 변경

<Directory "/app/apache/htdocs">를 <Directory "/home/web/httpd/html">로 변경

 

4. web폴더의 권한을 755로 수정

#chmod -R 755 web

-> 바꿔 주지 않으면 다른 사용자가 들어와서 볼 수 없기 때문에 볼 수 있도록 other에 5를 줘야한다.

 

5. 초기 서비스 파일인 index.html을 /home/web/httpd/html로 복사해온후에

   퍼미션 및 파일의 소유자, 그룹 소유자를  변경.

#cp /app/apache/htdocs/index.html index.html : 파일 복사

#chown web.web index.html : 파일의 소유자 및 그룹소유자를 변경. 해주지 않으면 web 계정에서 수정이 안됨

 

6. 아파치 서버 재시작

/app/apache/bin/apachectl restart

 

7. 제 3의 사용자(다른 사용자)가 접속할수 있는지 확인

8. web 계정에서 index.html을 수정후에 정상적으로 적용 되는지 확인

/home/web/httpd/html의 index.html을 web계정에서 수정

 

'Security > 리눅스' 카테고리의 다른 글

Day17-apache(3)  (0) 2019.12.12
Day16-apache(2)  (0) 2019.12.11
DAY 14-DNS 서버(4)  (0) 2019.12.06
Day 13-DNS 서버(3)  (0) 2019.12.05
DAY 12-DNS 서버(2)  (0) 2019.12.04