Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

11.2.2. 제한된 서비스 실행 방법은 무엇입니까?

서비스는 다양한 방법으로 실행할 수 있습니다. 이를 위해 서비스를 실행하는 방법을 지정해야 합니다. 이 작업은 SELinux 정책 작성에 대한 지식 없이 런타임 시 SELinux 정책 부분을 변경할 수 있는 부울을 통해 수행할 수 있습니다. 이렇게 하면 SELinux 정책을 다시 로드하거나 다시 컴파일하지 않고도 NFS 볼륨에 서비스 액세스 허용 등의 변경 사항을 허용합니다. 또한 기본이 아닌 포트 번호에서 서비스를 실행하려면 semanage 명령을 사용하여 정책 구성을 업데이트해야 합니다.
예를 들어 Apache HTTP 서버가 MariaDB와 통신할 수 있도록 하려면 httpd_can_network_connect_db 부울을 활성화합니다.
~]# setsebool -P httpd_can_network_connect_db on
특정 서비스에 대한 액세스가 거부된 경우 getseboolgrep 유틸리티를 사용하여 액세스를 허용하는 부울을 사용할 수 있는지 확인합니다. 예를 들어 getsebool -a | grep ftp 명령을 사용하여 FTP 관련 부울을 검색합니다.
~]$ getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_nfs --> off

ftpd_connect_db --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
부울 목록 및 on 또는 off 여부에 대해 getsebool -a 명령을 실행합니다. 부울 목록의 경우 각 항목이 무엇인지, on 또는 off 상태인지에 대한 설명으로 semanage boolean -l 명령을 root로 실행합니다. 부울 나열 및 구성에 대한 자세한 내용은 4.6절. “부울” 을 참조하십시오.

포트 번호

정책 구성에 따라 서비스는 특정 포트 번호에서만 실행되도록 허용할 수 있습니다. 정책 변경 없이 서비스가 실행되는 포트를 변경하려고 하면 서비스가 시작되지 않을 수 있습니다. 예를 들어 semanage port -l | grep http 명령을 root로 실행하여 http 관련 포트를 나열합니다.
~]# semanage port -l | grep http
http_cache_port_t              tcp      3128, 8080, 8118
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
http_port_t 포트 유형은 Apache HTTP Server가 수신 대기할 수 있는 포트를 정의합니다. 이 경우 TCP 포트 80, 443, 488, 8008, 8009, 8443입니다. httpd가 포트 9876(Listen 9 876) 에서 수신 대기하지만이를 반영하도록 정책이 업데이트되지 않도록 관리자가 httpd.conf 를 구성하는 경우 다음 명령이 실패합니다.
~]# systemctl start httpd.service
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
~]# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: failed (Result: exit-code) since Thu 2013-08-15 09:57:05 CEST; 59s ago
  Process: 16874 ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop (code=exited, status=0/SUCCESS)
  Process: 16870 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
다음과 유사한 SELinux 거부 메시지가 /var/log/audit/audit.log에 기록됩니다.
type=AVC msg=audit(1225948455.061:294): avc:  denied  { name_bind } for  pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
httpdhttp_port_t 포트 유형에 대해 나열되지 않은 포트에서 수신 대기하도록 허용하려면 semanage port 명령을 입력하여 정책 구성에 포트를 추가합니다.[9]:
~]# semanage port -a -t http_port_t -p tcp 9876
a 옵션은 새 레코드를 추가하고, -t 옵션은 유형을 정의하고, -p 옵션은 프로토콜을 정의합니다. 마지막 인수는 추가할 포트 번호입니다.


[9] semanage port -a 명령은 /etc/selinux/targeted/modules/active/ports.local 파일에 항목을 추가합니다. 기본적으로 이 파일은 root만 볼 수 있습니다.