私は定期的に使用するいくつかの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/private
fromに関連する項目の例は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
。