selinux ポリシーを実行する rsync デーモン rsync_export_all_ro は、/var/spool/postfix/private/ 下のファイルへのアクセスをブロックします。

selinux ポリシーを実行する rsync デーモン rsync_export_all_ro は、/var/spool/postfix/private/ 下のファイルへのアクセスをブロックします。

私は定期的に使用するいくつかのDebianベースのシステムを持っていますrsync。いくつかの理由で小規模なCentOS 7サーバーを展開する必要があり、それをバックアップ計画に追加したかったです。 SSH経由のrsyncを使用してバックアップすることは不可能です。代わりにrsyncデーモンを使用する必要があります。

CentOSは実行モードでSELinuxを有効にしているため、学習曲線が急になります。

構成rsyncdセクション(単純化)

[root]
    comment = Filesystem
    path = /
    exclude = /proc/*** /run/*** /sys/*** [...]
    read only = yes
    list = yes
    uid = root
    secrets file = [...]
    ignore errors = no
    ignore nonreadable = no
    refuse options = delete

プロセスに正しくラベルが付けられていると思います。

ps -eZ | grep rsync
system_u:system_r:rsync_t:s0    26020 ?        00:00:00 rsync

当初、デーモンによるバックアップの試行は、rsyncさまざまな権限エラーのため失敗しました。これはSELinuxタグによるものでした。私をもっと掘ってみて参照が見つかりましたrsyncデーモンがすべてのファイルを読み取り専用にエクスポートできるようにするSELinuxポリシー:

setsebool -P rsync_export_all_ro 1

その結果、このコレクションが誕生しました。

getsebool -a | grep '^rsync'
rsync_anon_write --> off
rsync_client --> off
rsync_export_all_ro --> on
rsync_full_access --> off

残念ながら、この方法ではまだシステム内のすべてのファイルにアクセスできません。特に、以下には読めないファイルがいくつかあります/var/spool/postfix/private

rsync: readlink_stat("/var/spool/postfix/private/defer" (in root)) failed: Permission denied (13)
rsync: readlink_stat("/var/spool/postfix/private/trace" (in root)) failed: Permission denied (13)
rsync: readlink_stat("/var/spool/postfix/private/verify" (in root)) failed: Permission denied (13)
rsync: readlink_stat("/var/spool/postfix/private/proxymap" (in root)) failed: Permission denied (13)
...

/var/spool/postfix/privatefromに関連する項目の例はaudit2why -a次のとおりです。以下を参照する項目はありませんrsync_export_all_ro

type=AVC msg=audit(1565118203.332:21775): avc:  denied  { getattr } for  pid=26597 comm="rsync" path="/var/spool/postfix/private/scache" dev="dm-0" ino=9148374 scontext=system_u:system_r:rsync_t:s0 tcontext=system_u:object_r:postfix_private_t:s0 tclass=sock_file permissive=0
        Was caused by:
        The boolean rsync_full_access was set incorrectly.
        Description:
        Allow rsync to full access

        Allow access by executing:
        # setsebool -P rsync_full_access 1

rsync_full_access(設定したくないのでトリガーしてはいけません)への参照はありますが、への参照がない理由はわかりませんrsync_export_all_ro

完全なバックアップを取得するには、デーモンがエクスポートできるファイルセットにこのディレクトリツリーを追加する方法はrsync? (そしてこの変更は再起動後も続きます。)

ベストアンサー1

rsync_tあなたのドメインのSELinuxを無効にしないことは正しいです。残念ながら構成可能性rsyncのSELinux実装はかなり広いですが、いくつかの極端な場合、rsync_export_all_roブール設定はまだいいえrsyncデーモンが特定のファイルにアクセスできるようにします。持つBugzilla アイテムこれはあなたの問題に非常に似ています。提供されたアドバイスは、問題を克服するためにrsync_full_accessセキュリティが損なわれているにもかかわらず(まだそれにもかかわらずより良い)使用することです。semanage permissive -a rsync_t

カスタムポリシーモジュールの作成

したがって、あなたの質問に答えるために、より安全なオプションを使用したい場合rsync_export_all_ro そしてrsyncデーモンが「ベストプラクティス」ファイル/ディレクトリにアクセスできるようにするには、独自のポリシーモジュールを作成する必要があります。

これは、次のようにrsyncデーモンを許可モードで動作させ、AVC拒否をキャッチしてからAVC拒否をポリシーに変換することによって行われます。

# put SELinux in permissive mode
setenforce 0

# --- do your rsync stuff ---

# get related AVC denials
# I'm using 'recent' here, depending on the rsync run time please adjust accordingly
ausearch -m avc -ts recent --subject rsync_t

# go through the output. If you're satisfied, create the module
ausearch -m avc -ts recent --subject rsync_t | audit2allow -m roaima-rsync-custom-1 > roaima-rsync-custom-1.te
checkmodule -M -m -o roaima-rsync-custom-1.mod roaima-rsync-custom-1.te
semodule_package -o roaima-rsync-custom-1.pp -m roaima-rsync-custom-1.mod

# load the policy module
semodule -i roaima-rsync-custom-1.pp

# disable permissive mode
setenforce 1

# --- do your rsync stuff again --

未監査の AVC 拒否 ("dontaudit") キャプチャ

何らかの理由で「極端なケース」ファイルにアクセスできず、ausearchコマンドが結果を生成しない場合は、「dontaudit」ルールが発生する可能性があります。

SELinuxポリシーを再作成し、すべての「dontaudit」ルールを無視するには、を実行しますsemodule -DB-Dこのオプションは「dontaudit」ルールを無効に-Bします。

次に、監査ログイベントをトリガーできることを試してください。その場合は、上記のようにキャプチャしてSELinuxモジュールを作成し、次のコマンドを実行して「dontaudit」ルールを再度有効にしますsemodule -B

"dontaudit"ルールの完全なリストを取得するには、sesearch --dontauditコマンドを実行します。-s検索を絞り込むには、ドメインオプションとコマンドを使用してくださいgrep。たとえば: sesearch --dontaudit -s rsync_t

おすすめ記事