13장. Apache HTTP 서버


Apache HTTP 서버는 현재 HTTP 표준과 함께 오픈 소스 HTTP 서버를 제공합니다.[14]
Red Hat Enterprise Linux에서 httpd 패키지는 Apache HTTP 서버를 제공합니다. 다음 명령을 입력하여 httpd 패키지가 설치되어 있는지 확인합니다.
~]$ rpm -q httpd
package httpd is not installed
Copy to Clipboard Toggle word wrap
Apache HTTP Server가 설치되어 있지 않고 Apache HTTP Server를 사용하려면 yum 유틸리티를 root 사용자로 사용하여 설치합니다.
~]# yum install httpd
Copy to Clipboard Toggle word wrap

13.1. Apache HTTP 서버 및 SELinux

SELinux가 활성화되면 Apache HTTP Server(httpd)가 기본적으로 제한된 상태로 실행됩니다. 제한된 프로세스는 자체 도메인에서 실행되며 다른 제한된 프로세스와 분리됩니다. SELinux 정책 구성에 따라 공격자가 제한된 프로세스가 손상되면 공격자가 리소스에 대한 액세스와 가능한 손상을 제한합니다. 다음 예제에서는 자체 도메인에서 실행되는 httpd 프로세스를 보여줍니다. 이 예제에서는 httpd,setroubleshoot,setroubleshoot-serverpolicycoreutils-python 패키지가 설치되어 있다고 가정합니다.
  1. getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
    ~]$ getenforce
    Enforcing
    
    Copy to Clipboard Toggle word wrap
    이 명령은 SELinux가 강제 모드에서 실행되는 경우 Enforcing 을 반환합니다.
  2. root로 다음 명령을 입력하여 httpd 를 시작합니다.
    ~]# systemctl start httpd.service
    Copy to Clipboard Toggle word wrap
    서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).
    ~]# systemctl status httpd.service       
    httpd.service - The Apache HTTP Server
    	  Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
    	  Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s ago
    
    Copy to Clipboard Toggle word wrap
  3. httpd 프로세스를 보려면 다음 명령을 실행합니다.
    ~]$ ps -eZ | grep httpd
    system_u:system_r:httpd_t:s0    19780 ?        00:00:00 httpd
    system_u:system_r:httpd_t:s0    19781 ?        00:00:00 httpd
    system_u:system_r:httpd_t:s0    19782 ?        00:00:00 httpd
    system_u:system_r:httpd_t:s0    19783 ?        00:00:00 httpd
    system_u:system_r:httpd_t:s0    19784 ?        00:00:00 httpd
    system_u:system_r:httpd_t:s0    19785 ?        00:00:00 httpd
    
    Copy to Clipboard Toggle word wrap
    httpd 프로세스와 관련된 SELinux 컨텍스트는 system_u:system_r:httpd_t:s0 입니다. 컨텍스트의 마지막 부분인 httpd_t 는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우 httpd 프로세스는 httpd_t 도메인에서 실행됩니다.
SELinux 정책은 제한된 도메인에서 실행되는 프로세스(예: httpd_t)가 파일, 기타 프로세스 및 시스템과의 상호 작용하는 방법을 정의합니다. httpd 액세스를 허용하려면 파일에 올바르게 레이블이 지정되어야 합니다. 예를 들어 httpdhttpd_sys_content_t 유형으로 레이블이 지정된 파일을 읽을 수 있지만 Linux(DAC) 권한이 쓰기 액세스를 허용하는 경우에도 해당 파일에 쓸 수 없습니다. 스크립트 네트워크 액세스 허용, NFS 및 CIFS 볼륨에 대한 httpd 액세스 허용, CGI(Common Gateway Interface) 스크립트를 실행할 수 있는 httpd 와 같은 특정 동작을 허용하려면 부울을 활성화해야 합니다.
httpd 가 TCP 포트 80, 443, 488, 8008, 8009 또는 8443 이외의 포트에서 수신 대기하도록 /etc/httpd/conf/httpd.conf 파일이 구성된 경우 semanage port 명령을 사용하여 SELinux 정책 구성에 새 포트 번호를 추가해야 합니다. 다음 예제에서는 httpd 에 대한 SELinux 정책 구성에 정의되지 않은 포트에서 수신 대기하도록 httpd 를 구성하는 방법을 보여줍니다. 결과적으로 httpd 가 시작되지 않습니다. 이 예제에서는 httpd 가 정책에 아직 정의되지 않은 비표준 포트에서 수신 대기할 수 있도록 SELinux 시스템을 구성하는 방법도 보여줍니다. 이 예제에서는 httpd 패키지가 설치되어 있다고 가정합니다. 예제에서 root 사용자로 각 명령을 실행합니다.
  1. 다음 명령을 입력하여 httpd 가 실행 중이 아닌지 확인합니다.
    ~]# systemctl status httpd.service
    httpd.service - The Apache HTTP Server
    	  Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
              Active: inactive (dead)
    
    Copy to Clipboard Toggle word wrap
    출력이 다르면 프로세스를 중지합니다.
    ~]# systemctl stop httpd.service
    Copy to Clipboard Toggle word wrap
  2. semanage 유틸리티를 사용하여 SELinux가 httpd 가 수신 대기할 수 있는 포트를 확인합니다.
    ~]# semanage port -l | grep -w http_port_t
    http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443
    
    Copy to Clipboard Toggle word wrap
  3. /etc/httpd/conf/httpd.conf 파일을 root로 편집합니다. httpd 에 대한 SELinux 정책 구성에 구성되지 않은 포트를 나열하도록 Listen 옵션을 구성합니다. 이 예에서는 httpd 가 포트 12345에서 수신 대기하도록 구성되어 있습니다.
    # Change this to Listen on specific IP addresses as shown below to 
    # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
    #
    #Listen 12.34.56.78:80
    Listen 127.0.0.1:12345
    
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 입력하여 httpd 를 시작합니다.
    ~]# systemctl start httpd.service
    Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
    
    Copy to Clipboard Toggle word wrap
    다음과 유사한 SELinux 거부 메시지가 기록됩니다.
    setroubleshoot: SELinux is preventing the httpd (httpd_t) from binding to port 12345. For complete SELinux messages. run sealert -l f18bca99-db64-4c16-9719-1db89f0d8c77
    
    Copy to Clipboard Toggle word wrap
  5. 이 예제에서 사용되는 대로 SELinux가 포트 12345에서 수신 대기하도록 허용하려면 다음 명령이 필요합니다.
    ~]# semanage port -a -t http_port_t -p tcp 12345
    Copy to Clipboard Toggle word wrap
  6. httpd 를 다시 시작하고 새 포트에서 수신 대기하도록 합니다.
    ~]# systemctl start httpd.service
    Copy to Clipboard Toggle word wrap
  7. 이제 SELinux가 비표준 포트(이 예제의 TCP 12345)에서 수신 대기하도록 구성되어 httpd 가 이 포트에서 성공적으로 시작됩니다.
  8. httpd 가 TCP 포트 12345에서 수신 대기 및 통신하고 있음을 증명하려면 다음과 같이 지정된 포트에 대한 telnet 연결을 열고 HTTP GET 명령을 실행합니다.
    ~]# telnet localhost 12345
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    GET / HTTP/1.0
    
    HTTP/1.1 200 OK
    Date: Wed, 02 Dec 2009 14:36:34 GMT
    Server: Apache/2.2.13 (Red Hat)
    Accept-Ranges: bytes
    Content-Length: 3985
    Content-Type: text/html; charset=UTF-8
    [...continues...]
    
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동