rsync没有在启动时工作?

时间:2013-11-28 14:00:04

标签: linux

您好我是Linux的新手,我一直在尝试使用rsync命令同步两个文件夹。我正在使用CentOS,当我通过命令行执行命令(#rsync -zvr /tmp/f1/ /tmp/f2/)工作正常,但通过重启时rc.local无效。显示以下消息:

sending incremental file list

rsync: change_dir "/tmp/f1" failed: Permission denied (13)

rsync: ERROR: cannot stat destination "/tmp/f2/": Permission denied (13)

rsync error: errors selecting input/output files, dirs (code 3) at main.c(554) [receiver=3.0.6]

rsync: connection unexpectedly closed (9 bytes received so far) [sender]

rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]

请帮忙吗?

2 个答案:

答案 0 :(得分:1)

您遇到SELinux时遇到问题。 SELinux是一个模块,它允许比文件系统权限和ACL更精细的访问控制。其中,如果用户没有从终端运行rsync,它将默认禁止访问rsync文件。现在,您如何让它访问您想要的文件?

有两种选择。如果您只处理目录没有其他服务(包括httpd等)需要访问,您可以执行以下操作:

semanage fcontext -a -t public_content_t "/tmp/f1(/.*)?"
semanage fcontext -a -t public_content_t "/tmp/f2(/.*)?"

这应该持久地更改SELinux规则,以使rsync可以访问目录/ tmp / f1和/ tmp / f2。实际上,它会在目录和文件上设置public_content_t类型。 rsync可以访问具有该类型的节点。但是,如上所述,有一个问题:节点(目录或文件)只能有一个类型。许多服务对他们访问的文件有其他要求(例如sshd需要ssh_t),因此您不能在/ etc中执行此操作。

另一种解决方案是持久允许rsync访问所有文件。如果您不运行rsync守护程序,这很好:

setsebool -P rsync_full_access 1

之后,rsync将能够访问所有文件,即使从init而不是从用户终端运行。


如果守护程序或用户启动rsync,为什么会有所不同?

(仅适用于最常见的targeted政策)

SELinux了解用户,普通用户使用SELinux-user unconfined_u。 unconfined_u允许执行文件系统ACL允许它执行的几乎所有操作。但是,init等运行为system_u,而system_u则受到更多约束。这有助于防止对httpd和其他暴露的守护进程的攻击。<​​/ p>

答案 1 :(得分:0)

如果刚重新启动/ tmp将被清除,因此/ tmp / f1和/ tmp / f2将不存在

rc.local通常在启动序列中运行得很晚,所以我猜想/ tmp是挂载的,但它可能仍然只是挂载了