23.4. 設定例

23.4.1. デーモンとして rsync を使用する

Red Hat Enterprise Linux を使用する場合、rsync をデーモンとして使用することで、複数のクライアントがセントラルサーバーとしてこのデーモンと直接通信して、一元的にファイルを格納し、継続的に同期することができます。以下の例では、rsync を適切なドメイン内のネットワークソケットでデーモンとして実行し、SELinux が期待する、事前定義された TCP ポート (SELinux ポリシー内) 上でのこのデーモンの実行を説明します。次に、非標準のポートでの rsync デーモンによる正常な実行を許可するため SELinux を編集する方法について説明していきます。
SELinux ポリシーとローカルのデーモンおよびプロセスに対するその制御を示すために、この例は単一のシステム上で行います。以下に示す例は、rsync に対してどのように SELinux が影響を与えることができるのかを示す一例に過ぎません。rsync に関する総合的な説明は本ガイドの対象外となります。詳細については、公式の rsync ドキュメント を参照してください。ここでは、rsync パッケージ、setroubleshoot-server パッケージ、audit パッケージがインストールされていること、SELinux のターゲットポリシーを使用していること、SELinux が enforcing モードで実行されていることを前提としています。

手順23.1 rsync を rsync_t として起動する

  1. getenforce コマンドを実行して、SELinux が enforcing モードで実行していることを確認します。
    ~]$ getenforce
    Enforcing
    SELinux が enforcing モードで実行している場合は、Enforcing が返されます。
  2. which コマンドを実行し、rsync バイナリがシステムパス内にあるか確認します。
    ~]$ which rsync
    /usr/bin/rsync
  3. 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
  4. これで、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
    rsync が rsync_t ドメイン内で実行するようになったため、SELinux はその保護メカニズムを rsync デーモンに適用できます。
    ~]$ ps -eZ | grep rsync
    system_u:system_r:rsync_t:s0     3220 ?        00:00:00 rsync
上記の例では、rsyncdrsync_t ドメイン内で実行する方法について説明しました。rsync は、ソケットでアクティベートされたサービスとして実行することも可能です。この場合、rsyncd は、クライアントがサービスに接続を試みるまで実行されません。ソケットでアクティベートされたサービスとして rsyncd を実行可能とするには、上記のステップに従います。ソケットでアクティベートされたサービスとして rsyncd を開始するには、root で以下のコマンドを実行します。
~]# systemctl start rsyncd.socket
次の例では、このデーモンをデフォルト以外のポートで適切に実行する方法について説明します。ここでは TCP ポート 10000 を使用します。

手順23.2 デフォルト以外のポートで rsync デーモンを実行する

  1. /etc/rsyncd.conf ファイルを変更して、port = 10000 の行をファイルの冒頭にあるグローバル設定エリア内に追加します (つまり、file エリアが定義される前)。新しい設定ファイルは以下のようになります。
    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
  2. この新規設定で 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
  3. semanage ユーティリティーを使用して TCP ポート 10000 を rsync_port_t の SELinux ポリシーに追加します。
    ~]# semanage port -a -t rsync_port_t -p tcp 10000
  4. TCP ポート 10000 が rsync_port_t の SELinux ポリシーに追加されたので、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 での動作が許可されるようになりました。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。