22.4. 설정 예
22.4.1. 데몬으로 rsync
Red Hat Enterprise Linux를 사용하는 경우 rsync를 데몬으로 사용하여 여러 클라이언트가 중앙 집중식 파일을 보관하고 동기화된 상태로 유지하도록 중앙 집중식 서버로 직접 통신할 수 있습니다. 다음 예제에서는 올바른 도메인에서 네트워크 소켓을 통해 rsync를 데몬으로 실행하는 방법과 SELinux에서 이 데몬이 사전 정의된(SELinux 정책) TCP 포트에서 실행될 것으로 예상하는 방법을 보여줍니다. 이 예제에서는
rsync
데몬이 비표준 포트에서 정상적으로 실행되도록 SELinux 정책을 수정하는 방법을 보여줍니다.
이 예제는 단일 시스템에서 SELinux 정책 및 로컬 데몬 및 프로세스에 대한 제어 권한을 시연하기 위해 수행됩니다. 이 예제는 SELinux가 rsync에 어떤 영향을 미칠 수 있는지를 보여줍니다. rsync의 포괄적인 설명서는 이 문서의 범위를 벗어납니다. 자세한 내용은 공식 rsync 설명서 를 참조하십시오. 이 예제에서는 rsync,setroubleshoot-server 및 audit 패키지가 설치되어 있다고 가정하고, SELinux 대상 정책이 사용되며 SELinux가 강제 모드로 실행 중이라고 가정합니다.
절차 22.1. rsync가 rsync로 시작됨_t
- getenforce 명령을 실행하여 SELinux가 강제 모드로 실행 중인지 확인합니다.
~]$ getenforce Enforcing
명령은 SELinux가 강제 모드에서 실행 중일 때Enforcing
(강제)을 반환합니다. - rsync 바이너리가 시스템 경로에 있는지 확인하려면 which 명령을 실행합니다.
~]$ which rsync /usr/bin/rsync
- 데몬으로 rsync를 실행하는 경우 구성 파일을 사용하고
/etc/rsyncd.conf
로 저장해야 합니다. 이 예에서 사용된 다음 구성 파일은 매우 간단하며 사용 가능한 모든 옵션을 나타내는 것은 아니며rsync
데몬을 시연하기에 충분합니다.log file = /var/log/rsync.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock [files] path = /srv/rsync comment = file area read only = false timeout = 300
- 이제 rsync가 데몬 모드에서 작동하도록 간단한 구성 파일이 있으므로 다음 명령을 실행하여 시작할 수 있습니다.
~]# systemctl start rsyncd.service
rsyncd
가 성공적으로 시작되었는지 확인합니다(출력은 아래와 유사하게 표시되며 타임스탬프만 다릅니다).~]# systemctl status rsyncd.service rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled) Active: active (running) since Thu 2014-02-27 09:46:24 CET; 2s ago Main PID: 3220 (rsync) CGroup: /system.slice/rsyncd.service └─3220 /usr/bin/rsync --daemon --no-detach
이제 SELinux는 rsync_t
도메인에서 실행 중이므로rsync
데몬을 통해 보호 메커니즘을 적용할 수 있습니다.~]$ ps -eZ | grep rsync system_u:system_r:rsync_t:s0 3220 ? 00:00:00 rsync
이 예제에서는 rsync
_t
도메인에서 rsyncd
를 실행하는 방법을 보여줍니다. rsync는 소켓이 활성화된 서비스로도 실행할 수 있습니다. 이 경우 클라이언트가 서비스에 연결을 시도할 때까지 rsyncd
가 실행되지 않습니다. rsyncd
가 socket-activated 서비스로 실행되도록 하려면 위의 단계를 따르십시오. rsyncd를
socket-activated 서비스로 시작하려면 다음 명령을 루트로 입력합니다.
~]# systemctl start rsyncd.socket
다음 예제에서는 이 데몬이 기본이 아닌 포트에서 성공적으로 실행되도록 하는 방법을 보여줍니다. 다음 예제에서는 TCP 포트 10000이 사용됩니다.
절차 22.2. 기본이 아닌 포트에서 rsync 데몬 실행
/etc/rsyncd.conf
파일을 수정하고 글로벌 구성 영역(즉, 파일 영역을 정의하기 전에)의 파일 맨 위에port = 10000
행을 추가합니다. 새 구성 파일은 다음과 같이 나타납니다.log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock port = 10000 [files] path = /srv/rsync comment = file area read only = false timeout = 300
- 이 새로운 설정으로
rsync
데몬을 시작한 후 다음과 유사한 거부 메시지가 SELinux에서 로깅합니다.Jul 22 10:46:59 localhost setroubleshoot: SELinux is preventing the rsync (rsync_t) from binding to port 10000. For complete SELinux messages, run sealert -l c371ab34-639e-45ae-9e42-18855b5c2de8
semanage
유틸리티를 사용하여rsync_port_t
의 SELinux 정책에 TCP 포트 10000을 추가합니다.~]# semanage port -a -t rsync_port_t -p tcp 10000
- 이제
rsync_port_t
의 SELinux 정책에 TCP 포트 10000이 추가되었으므로rsyncd
가 이 포트에서 정상적으로 시작되고 작동합니다.~]# systemctl start rsyncd.service
~]# netstat -lnp | grep 10000 tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 9910/rsync
SELinux는 정책을 수정했으며 이제
rsyncd
가 TCP 포트 10000에서 작동할 수 있게 되었습니다.