我正在使用 rsyncd 3.2 运行 Debian 11,ProtectSystem=full
默认情况下。
我想覆盖它,所以我经常systemctl edit
这样做。这是我要在覆盖中添加的内容:
### Editing /etc/systemd/system/rsync.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file
[Service]
ProtectSystem=off
### Lines below this comment will be discarded
日志报告没有解析错误,并且单元(我认为)使用新配置重新加载。
/etc
但是,当尝试 rsync 到(例如)中的路径时,我仍然收到“只读文件系统”错误。
我无法超越此限制,这是怎么回事?或者这个限制不是问题?在我升级到 Debian 11 之前,该配置在 Debian 10 上工作正常,所以我认为这ProtectSystem
是导致问题的原因。
/etc/rsyncd.conf
编辑:这是我正在使用的配置:
[nameOfMount]
path = /etc/postfix
auth users = sysadmin
secrets file = /etc/rsyncd.secrets
hosts allow = xxx.xxx.xxx.xxx
read only = false
uid = root
pre-xfer exec = /usr/local/bin/scriptA.sh
post-xfer exec = /usr/local/bin/scriptB.sh
pro/post exec 脚本制作正在传输的文件的备份副本,并重新加载 postfix 守护进程。这些错误例如:
rsync error: requested action not supported (code 4) at clientserver.c(1098) [Receiver=3.2.3]
/bin/cp: cannot create regular file '/etc/postfix/fileName.yyyymmddd': Read-only file system
答案1
让我们从状态检查开始
systemctl show rsync | grep -E 'ProtectSystem|NoNewPrivileges'
在我未经修改的系统上,这会返回
ProtectSystem=full
NoNewPrivileges=yes
我之所以注意到这一点是NoNewPrivileges
因为此设置会阻止rsyncd
更改其 UID。
现在让我们看看守护进程重新启动的时间rsync
,并记下它(在我的例子中是 22:53):
ps -ef | grep '[r]sync --daemon'
root 22600 1 0 22:53 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
如果我将你的两行添加到覆盖中,
systemctl edit rsync
[Service]
ProtectSystem=off
然后我得到这个
systemctl show rsync | grep -E 'ProtectSystem|NoNewPrivileges'
ProtectSystem=no
NoNewPrivileges=yes
但rsync
守护进程没有重新启动:
ps -ef | grep '[r]sync --daemon'
root 22600 1 0 22:53 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
事实上我发现我必须手动执行此操作
systemctl restart rsync
ps -ef | grep '[r]sync --daemon'
root 22770 1 1 22:56 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
但是,文件系统仍处于只读模式。我们需要额外的一行:
systemctl edit rsync
[Service]
ProtectSystem=off
NoNewPrivileges=no
随后重新启动,
systemctl restart rsync
最后的健全性检查,
systemctl show rsync | grep -E 'ProtectSystem|NoNewPrivileges'
在我的系统上,这会返回所需的最终游戏,这允许我写入下面的文件和目录/etc
:
ProtectSystem=no
NoNewPrivileges=no