全局参数

全局参数是在“/etc/rsyncd.conf”文件开头并且在模块前面定义的参数。或者在[global]模块中定义的参数。

“pid file”参数

指定rsyncd 进程id写入的文件的路径。

如果启动时,文件已存在,则会中止守护程序启动。
可以通过使用--dparam = pid-file = file选项来覆盖文件,并启动rsync守护程序。

“port”参数

rsync守护程序的默认值 “TCP”端口为873.
通过使用“--PORT”选项指定新端口。

“address”参数

指定rsync守护程序的监听地址。

可以使用--address选项启动守护程序可以覆盖文件中指定的地址。

在Linux上如何安装和配置rsync守护程序

模块配置的示例

让我们创建一个例子并在rsync服务器上创建一个模块。
我们必须做的第一件事是允许在“TCP”端口“873”上的传入流量。
如果我们使用防火墙,我们可以将预先配置的rsyncd服务添加到我们使用的区域:

$sudo firewall-cmd --permanent --add-service rsyncd && sudo
firewall-cmd --reload

如果我们使用UFW,那么我们可以运行:

$sudo ufw allow 873/tcp

配置防火墙后,我们可以继续和定义模块。
以下是我们的配置:

[onitroad]
path = /mnt/data/rsync
comment = "Example of an rsync daemon module"
read only = false
exclude = *.txt

我们将模块称为“onitroad”,并将/mnt/data/rsync目录与之关联。我们也发表了注释。通过将'read only'参数设置为false,我们将模块设置为可读写,并且通过'exclude'参数,我们提供了一种模式来排除扩展名为'.txt'的所有文件。

在使用模块之前,我们需要启动守护进程。我们可以通过使用“---daemon”选项调用程序,将rsync作为守护进程运行,也可以简单地使用systemd来完成任务(在后台,systemd服务执行相同的命令)。

在基于Debian的发行版中,该服务称为“rsync”;

在Fedora和Archlinux上,它被称为“rsyncd”:

$sudo systemctl start rsync

要使rsync自动启动,我们必须使用systemctl enable 子命令:

$sudo systemctl enable rsync

我们将/mnt/data/rsync目录设置为nobody用户和nogroup组(Debian系统)所有。内容如下:

$ls /mnt/data/rsync
csv1.csv  text1.txt  text2.txt

正如我们可以看到的目录包含两个.txt文件和一个.csv
如果我们使用该模块作为传输中的源,则只能包含“CSV1.CSV”文件:

$rsync -av
rsync://192.168.0.39/onitroad/.
receiving incremental file list
./
csv1.csv

当我们使用模块作为目的地时,排除也会生效。
假设我们在当前工作目录中创建“csv2.csv”和“text3.txt”文件:

$touch csv2.csv text3.txt

如果我们现在运行rsync并使用当前工作目录作为源和模块作为目标,我们可以看到守护程序如何拒绝接收“text3.txt”文件,因为它与指定的排除模式匹配:

$rsync -av .
rsync://192.168.0.39/onitroad
sending incremental file list
ERROR: daemon refused to receive file "text3.txt"
./
csv2.csv

请注意,在上面的命令中,我们使用了rsync URL来指定服务器的IP地址和要使用的模块的名称。我们如何获得机器上所有可用模块的列表?这很简单,我们只需运行rsync命令,在URL中只指定服务器地址:

$rsync rsync://192.168.0.39
onitroad    	"Example of an rsync daemon module"

将显示所有可用模块和相关注释;在这个例子中,只有“onitroad”一个。

模块参数

模块参数是模块部分中指定的参数,仅应用于该部分。

“path”参数

此参数是强制性的,必须为每个模块提供。
它用于指定模块本身可用的目录的路径。

“comment”参数

“注释”参数是可选的:当客户端请求可用的列表时,我们可以指定将在模块名称附近显示的字符串。

将模块设置为只读或者写

默认情况下,所有模块都创建为只读。这意味着客户端只能将其用作传输源。通过将“只读”参数设置为“否”或者“false”,可以更改此行为。通过使用'write only'参数并提供'yes'或者'true'作为值,也可以将模块设置为只写。如果激活后一个参数,客户端将无法从模块下载文件。为了从模块中读取文件或者写入文件,还必须遵守标准的unix权限,因此,必须允许运行传输的用户执行所需的操作。

UID和GID参数

“UID”和“GID参数”组合,定义传输将具有的权限。

前者用于定义用户运行传输,因为守护程序以root运行时(如果守护程序使用普通用户的权限运行,则用户将不会改变)。
用户可以通过其用户名或者其数字ID标识。
后者定义要用于传输的一个或者多个组名称或者组ID。

这两个选项的默认值都是“nobody”,这意味着当守护进程以root用户身份运行时,传输将以“nobody”用户和“nobody”组的权限运行(在Debian上,nobody组不存在,而是使用“nogroup”)。

安装rsync守护程序

在Debian上,我们可以使用APT包管理器:

$sudo apt-get install rsync

在Archlinux上,我们使用Pacman:

$sudo pacman -S rsync

在Fedora上,使用“DNF”包管理器,注意软件包名为 rsync-daemon

$sudo dnf install rsync-daemon

rsyncd配置文件

rsyncd 默认配置文件为“/etc/rsyncd.conf”(在Debian上,没有该文件,需要创建)。

以下是fedora上文件的内容:

# /etc/rsyncd: configuration file for
rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
#        path = /home/ftp
#        comment = ftp export area

下面是如何定义rsyncd模块:

[ftp]
        path = /home/ftp
        comment = ftp export area

模块在一个“节”中定义,该节以方括号中的模块名称声明开始,在本例中为“[ftp]”。

模块与文件系统中的目录相关联,该目录由'path'参数指定。节中提供的所有参数都是“local”,因此它们仅应用于相关模块;
在任何节之前提供的设置都是“全局”。

日期:2020-07-07 20:57:17 来源:oir作者:oir