Debian 10 から 11 にアップグレードした後、/etc 内の一部の宛先を持つ rsync ジョブが機能しなくなりました。
サーバー (宛先) 側には次のものがあります:
uid = root
gid = root
hosts allow = mysender
[mymodule]
# NOGO
path = /etc/tmp
# GO
# path = /root/tmp
comment = Just for testing
read only = false
クライアント側 (ソース) で次のコマンドを入力します。
rsync -a /etc/temp/test myserver::mymodule
これにより、rsync は次のメッセージで失敗します:
rsync: [generator] recv_generator: mkdir "/test" (in mymodule) failed: Read-only file system (30)
*** Skipping any contents from this failed directory ***
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1333) [sender=3.2.3]
/etc の外部のパス (たとえば /root/tmp) を使用するようにサーバーを構成すると、期待どおりに動作します。
ルートファイルシステム(/etcディレクトリも含む)はないもちろん読み取り専用でマウントされており、クリーンです。では、なぜ rsyncd は /etc を読み取り専用ファイルシステムの一部と見なすのでしょうか?
答え1
rsyncバージョン3.2.0-1では、「ProtectSystem」と呼ばれる拡張機能が導入され、特に書き込みアクセスを防止します/etc
(参照:https://download.samba.org/pub/rsync/ニュース/etc/systemd/system/rsync.service.d/override.conf
)。次の内容のファイルを作成することでこれを上書きできます。
[Service]
ProtectSystem=off
最初の投稿から長い時間が経った後でも、それが役に立つことを願っています。