13.4. 설정 예


다음 예제에서는 SELinux가 Apache HTTP 서버를 보완하는 방법과 Apache HTTP Server의 전체 기능을 유지 관리하는 방법을 보여주는 실제 데모를 제공합니다.

13.4.1. 정적 사이트 실행

정적 웹 사이트를 생성하려면 해당 웹 사이트의 .html 파일에 httpd_sys_content_t 유형의 레이블을 지정합니다. 기본적으로 Apache HTTP 서버는 httpd_sys_content_t 유형으로 레이블이 지정된 파일에 쓸 수 없습니다. 다음 예제에서는 읽기 전용 웹 사이트에 대한 파일을 저장할 새 디렉터리를 생성합니다.
  1. root Cryostat 유틸리티를 사용하여 최상위 디렉토리를 생성합니다.
    ~]# mkdir /mywebsite
    Copy to Clipboard Toggle word wrap
  2. root 로서 /mywebsite/index.html 파일을 만듭니다. 다음 콘텐츠를 복사하여 /mywebsite/index.html 에 붙여넣습니다.
    <html>
    <h2>index.html from /mywebsite/</h2>
    </html>
    
    Copy to Clipboard Toggle word wrap
  3. Apache HTTP Server가 /mywebsite/ 및 그 아래의 파일 및 하위 디렉터리에 대한 읽기 전용 액세스만 허용하려면 httpd_sys_content_t 유형의 디렉터리에 레이블을 지정합니다. root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.
    ~]# semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"
    Copy to Clipboard Toggle word wrap
  4. restorecon 유틸리티를 root로 사용하여 레이블을 변경합니다.
    ~]# restorecon -R -v /mywebsite
    restorecon reset /mywebsite context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    restorecon reset /mywebsite/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    
    Copy to Clipboard Toggle word wrap
  5. 이 예에서는 /etc/httpd/conf/httpd.conf 파일을 root로 편집합니다. 기존 DocumentRoot 옵션을 주석 처리합니다. DocumentRoot "/mywebsite" 옵션을 추가합니다. 편집 후 이러한 옵션은 다음과 같이 표시됩니다.
    #DocumentRoot "/var/www/html"
    DocumentRoot "/mywebsite"
    
    Copy to Clipboard Toggle word wrap
  6. root로 다음 명령을 입력하여 Apache HTTP Server의 상태를 확인합니다. 서버가 중지되면 시작합니다.
    ~]# 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 start httpd.service
    Copy to Clipboard Toggle word wrap
    서버가 실행 중인 경우 root로 다음 명령을 실행하여 서비스를 다시 시작합니다( httpd.conf에 대한 변경 사항도 적용됨).
    ~]# systemctl status httpd.service
    httpd.service - The Apache HTTP Server
       Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
       Active: active (running) since Wed 2014-02-05 13:16:46 CET; 2s ago
    
    Copy to Clipboard Toggle word wrap
    ~]# systemctl restart httpd.service
    Copy to Clipboard Toggle word wrap
  7. 웹 브라우저를 사용하여 http://localhost/index.html 로 이동합니다. 다음은 다음과 같습니다.
    index.html from /mywebsite/
    
    Copy to Clipboard Toggle word wrap

13.4.2. NFS 및 CIFS 볼륨 공유

기본적으로 클라이언트쪽의 NFS 마운트는 NFS 볼륨의 정책에서 정의한 기본 컨텍스트로 레이블이 지정됩니다. 일반적인 정책에서 이 기본 컨텍스트는 nfs_t 유형을 사용합니다. 또한 기본적으로 클라이언트측에 마운트된 Samba 공유는 정책에서 정의한 기본 컨텍스트로 레이블이 지정됩니다. 일반적인 정책에서 이 기본 컨텍스트는 cifs_t 유형을 사용합니다.
정책 구성에 따라 서비스에서 nfs_t 또는 cifs_t 유형으로 레이블이 지정된 파일을 읽지 못할 수 있습니다. 이렇게 하면 이러한 유형으로 레이블이 지정된 파일 시스템이 마운트되지 않고 다른 서비스에서 읽거나 내보내지 못하게 할 수 있습니다. 부울을 활성화하거나 비활성화하여 nfs_tcifs_t 유형에 액세스할 수 있는 서비스를 제어할 수 있습니다.
httpd_use_nfs 부울을 활성화하여 httpd 가 NFS 볼륨( nfs_t 유형으로 레이블이 지정된)에 액세스하고 공유할 수 있도록 합니다.
~]# setsebool -P httpd_use_nfs on
Copy to Clipboard Toggle word wrap
httpd_use_cifs 부울을 활성화하여 httpd 가 CIFS 볼륨에 액세스하고 공유할 수 있도록 합니다( cifs_t 유형으로 레이블이 지정됨).
~]# setsebool -P httpd_use_cifs on
Copy to Clipboard Toggle word wrap
참고
setsebool 변경 사항을 재부팅해도 유지하지 않으려면 -P 옵션을 사용하지 마십시오.

13.4.3. 서비스 간 파일 공유

type Enforcement를 사용하면 프로세스가 다른 프로세스에서 사용할 파일에 액세스하는 것을 방지할 수 있습니다. 예를 들어 기본적으로 Samba는 Apache HTTP Server에서 사용하기 위한 httpd_sys_content_t 유형으로 레이블이 지정된 파일을 읽을 수 없습니다. 필요한 파일에 public_content_t 또는 public_content_rw_t 유형으로 레이블이 지정된 경우 Apache HTTP Server, FTP, rsync 및 Samba 간에 파일을 공유할 수 있습니다.
다음 예제에서는 디렉터리와 파일을 만들고 Apache HTTP 서버, FTP, rsync 및 Samba를 통해 해당 디렉토리와 파일을 공유(읽기 전용)할 수 있습니다.
  1. root Cryostat 유틸리티를 사용하여 여러 서비스 간에 파일을 공유할 새 최상위 디렉토리를 만듭니다.
    ~]# mkdir /shares
    Copy to Clipboard Toggle word wrap
  2. file-context 구성의 패턴과 일치하지 않는 파일 및 디렉터리는 default_t 유형으로 레이블을 지정할 수 있습니다. 이 유형은 제한된 서비스에 액세스할 수 없습니다.
    ~]$ ls -dZ /shares
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /shares
    
    Copy to Clipboard Toggle word wrap
  3. root 로서 /shares/index.html 파일을 만듭니다. 다음 콘텐츠를 복사하여 /shares/index.html 에 붙여넣습니다.
    <html>
    <body>
    <p>Hello</p>
    </body>
    </html>
    
    Copy to Clipboard Toggle word wrap
  4. public_content_t 유형을 사용하여 /shares/ 레이블을 지정하면 Apache HTTP Server, FTP, rsync 및 Samba의 읽기 전용 액세스를 허용합니다. root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.
    ~]# semanage fcontext -a -t public_content_t "/shares(/.*)?"
    Copy to Clipboard Toggle word wrap
  5. restorecon 유틸리티를 root로 사용하여 레이블 변경 사항을 적용합니다.
    ~]# restorecon -R -v /shares/
    restorecon reset /shares context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
    restorecon reset /shares/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
    
    Copy to Clipboard Toggle word wrap
Samba를 통해 /shares/ 를 공유하려면 다음을 수행합니다.
  1. samba, samba -commonsamba-client 패키지가 설치되어 있는지 확인합니다(버전 번호가 다를 수 있음).
    ~]$ rpm -q samba samba-common samba-client
    samba-3.4.0-0.41.el6.3.i686
    samba-common-3.4.0-0.41.el6.3.i686
    samba-client-3.4.0-0.41.el6.3.i686
    
    Copy to Clipboard Toggle word wrap
    이러한 패키지가 설치되어 있지 않으면 root로 다음 명령을 실행하여 설치합니다.
    ~]# yum install package-name
    Copy to Clipboard Toggle word wrap
  2. /etc/samba/smb.conf 파일을 root로 편집합니다. 이 파일 하단에 다음 항목을 추가하여 Samba를 통해 /shares/ 디렉터리를 공유합니다.
    [shares]
    comment = Documents for Apache HTTP Server, FTP, rsync, and Samba
    path = /shares
    public = yes
    writable = no
    
    Copy to Clipboard Toggle word wrap
  3. Samba 파일 시스템을 마운트하려면 Samba 계정이 필요합니다. root로 다음 명령을 입력하여 Samba 계정을 만듭니다. 여기서 username 은 기존 Linux 사용자입니다. 예를 들어 smbpasswd -a testuser 는 Linux testuser 사용자에 대한 Samba 계정을 생성합니다.
    ~]# smbpasswd -a testuser
    New SMB password: Enter a password
    Retype new SMB password: Enter the same password again
    Added user testuser.
    
    Copy to Clipboard Toggle word wrap
    위의 명령을 실행하여 시스템에 존재하지 않는 계정의 사용자 이름을 지정하면 '사용자 이름 '! 오류에 대한 Unix 계정을찾을수 없습니다.
  4. Samba 서비스를 시작합니다.
    ~]# systemctl start smb.service
    Copy to Clipboard Toggle word wrap
  5. 다음 명령을 입력하여 사용 가능한 공유를 나열합니다. 여기서 username 은 3단계에 추가된 Samba 계정입니다. 암호를 입력하라는 메시지가 표시되면 3단계에서 Samba 계정에 할당된 암호를 입력합니다(버전 번호는 다를 수 있음).
    ~]$ smbclient -U username -L localhost
    Enter username's password:
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Sharename       Type      Comment
    ---------       ----      -------
    shares          Disk      Documents for Apache HTTP Server, FTP, rsync, and Samba
    IPC$            IPC       IPC Service (Samba Server Version 3.4.0-0.41.el6)
    username        Disk      Home Directories
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Server               Comment
    ---------            -------
    
    Workgroup            Master
    ---------            -------
    
    Copy to Clipboard Toggle word wrap
  6. 디렉터리 를 생성하는 사용자입니다. 이 디렉터리는 공유 Samba 공유를 마운트하는 데 사용됩니다.
    ~]# mkdir /test/
    Copy to Clipboard Toggle word wrap
  7. root로 다음 명령을 입력하여 공유 Samba 공유를 /test/ 에 마운트하고 사용자 이름을 3단계에서 사용자 이름으로 바꿉니다.
    ~]# mount //localhost/shares /test/ -o user=username
    Copy to Clipboard Toggle word wrap
    3단계에 구성된 사용자 이름의 암호를 입력합니다.
  8. Samba를 통해 공유되는 파일의 내용을 확인합니다.
    ~]$ cat /test/index.html
    <html>
    <body>
    <p>Hello</p>
    </body>
    </html>
    
    Copy to Clipboard Toggle word wrap
Apache HTTP 서버를 통해 /shares/ 를 공유하려면 다음을 수행합니다.
  1. httpd 패키지가 설치되었는지 확인합니다 (버전 번호는 다를 수 있음).
    ~]$ rpm -q httpd
    httpd-2.2.11-6.i386
    
    Copy to Clipboard Toggle word wrap
    이 패키지가 설치되지 않은 경우 yum 유틸리티를 root로 사용하여 설치합니다.
    ~]# yum install httpd
    Copy to Clipboard Toggle word wrap
  2. /var/www/html/ 디렉터리로 변경합니다. root로 다음 명령을 입력하여 / shares/ 디렉터리에 대한 링크(마운트 )를 생성합니다.
    html]# ln -s /shares/ shares
    Copy to Clipboard Toggle word wrap
  3. Apache HTTP 서버를 시작합니다.
    ~]# systemctl start httpd.service
    Copy to Clipboard Toggle word wrap
  4. 웹 브라우저를 사용하여 http://localhost/shares 로 이동합니다. /shares/index.html 파일이 표시됩니다.
기본적으로 Apache HTTP 서버는 index.html 파일이 있는 경우 읽습니다. /shares/index.html 이 없고 대신 file1,file2, file3 이 있는 경우 http://localhost/shares 에 액세스할 때 디렉터리 목록이 발생합니다.
  1. index.html 파일을 제거합니다.
    ~]# rm -i /shares/index.html
    Copy to Clipboard Toggle word wrap
  2. /shares/:에 3개의 파일을 생성하려면 touch 유틸리티를 root로 사용합니다.
    ~]# touch /shares/file{1,2,3}
    ~]# ls -Z /shares/
    -rw-r--r--  root root system_u:object_r:public_content_t:s0 file1
    -rw-r--r--  root root unconfined_u:object_r:public_content_t:s0 file2
    -rw-r--r--  root root unconfined_u:object_r:public_content_t:s0 file3
    
    Copy to Clipboard Toggle word wrap
  3. root로 다음 명령을 입력하여 Apache HTTP Server의 상태를 확인합니다.
    ~]# 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 start httpd.service
    Copy to Clipboard Toggle word wrap
  4. 웹 브라우저를 사용하여 http://localhost/shares 로 이동합니다. 디렉터리 목록이 표시됩니다.

13.4.4. 포트 번호 변경

정책 구성에 따라 서비스는 특정 포트 번호에서만 실행되도록 허용할 수 있습니다. 정책 변경 없이 서비스가 실행되는 포트를 변경하려고 하면 서비스가 시작되지 않을 수 있습니다. semanage 유틸리티를 root 사용자로 사용하여 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
기본적으로 SELinux는 httpd 가 TCP 포트 80, 443, 488, 8008, 8009 또는 8443에서 수신 대기하도록 허용합니다. httpdhttp_port_t 에 대해 나열되지 않은 포트에서 수신 대기하도록 /etc/httpd/conf/httpd.conf 가 구성된 경우httpd 가 시작되지 않습니다.
TCP 포트 80, 443, 488, 8008, 8009 또는 8443 이외의 포트에서 실행되도록 httpd 를 구성하려면 다음을 수행합니다.
  1. /etc/httpd/conf/httpd.conf 파일을 root로 편집하여 Listen 옵션은 httpd 에 대해 SELinux 정책에 구성되지 않은 포트를 나열합니다. 다음 예제에서는 10.0.0.1 IP 주소 및 TCP 포트 12345에서 수신 대기하도록 httpd 를 구성합니다.
    # 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 10.0.0.1:12345
    
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 root 사용자로 입력하여 포트를 SELinux 정책 구성에 추가합니다.
    ~]# semanage port -a -t http_port_t -p tcp 12345
    Copy to Clipboard Toggle word wrap
  3. 포트가 추가되었는지 확인합니다.
    ~]# semanage port -l | grep -w http_port_t
    http_port_t                    tcp      12345, 80, 443, 488, 8008, 8009, 8443
    
    Copy to Clipboard Toggle word wrap
포트 12345에서 httpd 를 더 이상 실행하지 않는 경우 semanage 유틸리티를 root로 사용하여 정책 구성에서 포트를 제거합니다.
~]# semanage port -d -t http_port_t -p tcp 12345
Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat