22.4. 設定の例
22.4.1. デーモンとしての Rsync
Red Hat Enterprise Linux を使用する場合は、rsync をデーモンとして使用できるため、複数のクライアントが中央サーバーとして直接通信し、集中ファイルを格納して同期を維持できます。以下の例は、正しいドメインのネットワークソケットで rsync をデーモンとして実行し、SELinux がこのデーモンを事前定義済み (SELinux ポリシー) の TCP ポートで実行する方法を示しています。次に、
rsync
デーモンが標準以外のポートで通常どおり実行できるように SELinux ポリシーを変更する方法を示します。
この例は、1 つのシステムで実行し、SELinux ポリシーと、そのローカルデーモンおよびプロセスに対する制御を示します。これは単なる例で、SELinux が rsync に与える影響を示していることに注意してください。rsync の包括的なドキュメントは、このドキュメントの範囲外です。詳細は、公式の rsync のドキュメント を参照してください。この例では、rsync、setroubleshoot-server、および audit パッケージがインストールされ、SELinux Targeted ポリシーが使用され、SELinux が Enforcing モードで実行されていることを前提としています。
手順22.1 rsync を rsync_t として起動させる
- getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
~]$ getenforce Enforcing
SELinux が Enforcing モードで実行されていると、このコマンドはEnforcing
を返します。 - which コマンドを実行して、rsync バイナリーがシステムパスにあることを確認します。
~]$ 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
がソケットにより起動したサービスとして実行できるようにするには、上記の手順を行います。rsyncd
をソケット起動サービスとして起動するには、root で以下のコマンドを実行します。
~]# 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 での動作が許可されるようになりました。