「rsyncd.conf」- 配置选项详解

  LINUX MANUAL PAGES

以服务模式运行「rsync」(LAUNCHING THE RSYNC DAEMON)

以服务模式启动rsync是通过在rsync启动时指定–daemon选项。

如果要使用chroot、绑定1024以下的端口号、设置文件的所有权,则rsync守护进程必须以root权限运行。否则的话,只需要有读写相应的数据、日志、锁定文件的权限就可以了。

可以使用inetd来运行rsync,也可以以独立守护进程来运行rsync,或者通过远程shell来访问rsync。如果以守护进程的方式启动rsync,只需要使用”rsync –daemon”命令。

当通过inetd来运行rsync时
首先,需要在/etc/services中配置如下行:

rsync 873/tcp

然后,需要在/etc/inetd.conf配置如下行:

rsync stream tcp nowait root /usr/bin/rsync rsyncd –daemon

最后,向inetd发送HUP信号来告诉inetd重新读取配置文件。

注意:你不应该向rsync守护进程发送HUP信号来强制rsync重新读取rsyncd.conf配置文件。该文件在每个客户端连接中会重新读取。

仅用于全局参数

文件中的第一个参数([module]头之前)是全局参数。 Rsync还允许使用“[global]”模块名称来指示一个或多个全局参数节的开始(global必须小写)。

您也可以在配置文件的全局部分包含任何模块参数,在这种情况下,提供的值将覆盖该参数的默认值。

您可以在参数值中使用对环境变量的引用。字符串参数将尽可能延迟%VAR%引用(当在程序中使用该字符串时),从而允许在rsync连接时使用设置的变量,例如RSYNC_USER_NAME。从配置文件读取时,非字符串参数(如真/假设置)会被展开。如果环境中不存在变量,或者一系列字符不是有效的引用(例如未配对的百分号),则原始字符将保持不变。这有助于向后兼容性和安全性(例如,将不存在的%VAR%扩展为路径中的空字符串可能会导致非常不安全的路径)。将%插入值的最安全方法是使用%%。

motd file
该选项允许你指定一个“”message of the day”“来向每个连接上的客户端展示。类似于Linux中的/etc/motd的功能。
默认值:无默认值。
通常是一些站点信息或者一些其他内容。可以在命令行选项中使用–dparam=motdfile=FILE来覆盖该选项的设置。

pid file
该参数告诉rsync守护进程将PID写入指定的文件中。如果文件已经存在,rsync守护进程将终止,而不是覆盖文件。
可以在命令行选项中使用–dparam=pidfile=FILE来覆盖该选项的设置。

port
通过指定该值来覆盖rsync守护进程监听的默认端口号。
默认值:873
如果守护进程是由inetd运行的,那么会忽略此选项的配置。
可以在命令行选项中使用–port来覆盖该选项的设置。

address
通过指定该值来覆盖rsync守护进程监听的默认IP地址。
如果守护进程是由inetd运行的,那么会忽略此选项的配置。
可以在命令行选项中使用–address来覆盖该选项的设置。

socket options
这个参数可以为喜欢最大限度地调整系统的人们提供无尽的乐趣。 您可以设置各种套接字选项,这可能会使传输更快(或更慢!)。 请阅读setsockopt()系统调用的手册页,以获取有关可能设置的一些选项的详细信息。 默认情况下,不设置特殊的套接字选项。
这些设置也可以通过–sockopts命令行选项指定。

listen backlog
当守护程序侦听连接时,您可以覆盖默认的backlog值。
默认值:5

模块参数(MODULE PARAMETERS)

After the global parameters you should define a number of modules, each module
exports a directory tree as a symbolic name. Modules are exported by specifying a
module name in square brackets [module] followed by the parameters for that module.
The module name cannot contain a slash or a closing square bracket. If the name con‐
tains whitespace, each internal sequence of whitespace will be changed into a single
space, while leading or trailing whitespace will be discarded. Also, the name cannot
be “global” as that exact name indicates that global parameters follow (see above).

As with GLOBAL PARAMETERS, you may use references to environment variables in the
values of parameters. See the GLOBAL PARAMETERS section for more details.

comment

This parameter specifies a description string that is displayed next to the

module name when clients obtain a list of available modules. The default is no

comment.

path
This parameter specifies the directory in the daemon’s filesystem to make

available in this module. You must specify this parameter for each module in

rsyncd.conf.

You may base the path’s value off of an environment variable by surrounding

the variable name with percent signs. You can even reference a variable that

is set by rsync when the user connects. For example, this would use the

authorizing user’s name in the path:

path = /home/%RSYNC_USER_NAME%

It is fine if the path includes internal spaces — they will be retained ver‐

batim (which means that you shouldn’t try to escape them). If your final

directory has a trailing space (and this is somehow not something you wish to

fix), append a trailing slash to the path to avoid losing the trailing white‐

space.

use chroot

If “use chroot” is true, the rsync daemon will chroot to the “path” before

starting the file transfer with the client. This has the advantage of extra

protection against possible implementation security holes, but it has the dis‐

advantages of requiring super-user privileges, of not being able to follow

symbolic links that are either absolute or outside of the new root path, and

of complicating the preservation of users and groups by name (see below).

As an additional safety feature, you can specify a dot-dir in the module’s

“path” to indicate the point where the chroot should occur. This allows rsync

to run in a chroot with a non-“/” path for the top of the transfer hierarchy.

Doing this guards against unintended library loading (since those absolute

paths will not be inside the transfer hierarchy unless you have used an unwise

pathname), and lets you setup libraries for the chroot that are outside of the

transfer. For example, specifying “/var/rsync/./module1” will chroot to the

“/var/rsync” directory and set the inside-chroot path to “/module1”. If you

had omitted the dot-dir, the chroot would have used the whole path, and the

inside-chroot path would have been “/”.

When “use chroot” is false or the inside-chroot path is not “/”, rsync will:

(1) munge symlinks by default for security reasons (see “munge symlinks” for a

way to turn this off, but only if you trust your users), (2) substitute lead‐

ing slashes in absolute paths with the module’s path (so that options such as

–backup-dir, –compare-dest, etc. interpret an absolute path as rooted in the

module’s “path” dir), and (3) trim “..” path elements from args if rsync

believes they would escape the module hierarchy. The default for “use chroot”

is true, and is the safer choice (especially if the module is not read-only).

When this parameter is enabled, the “numeric-ids” option will also default to

being enabled (disabling name lookups). See below for what a chroot needs in

order for name lookups to succeed.

If you copy library resources into the module’s chroot area, you should pro‐

tect them through your OS’s normal user/group or ACL settings (to prevent the

rsync module’s user from being able to change them), and then hide them from

the user’s view via “exclude” (see how in the discussion of that parameter).

At that point it will be safe to enable the mapping of users and groups by

name using this “numeric ids” daemon parameter.

Note also that you are free to setup custom user/group information in the

chroot area that is different from your normal system. For example, you could

abbreviate the list of users and groups.

numeric ids

Enabling this parameter disables the mapping of users and groups by name for

the current daemon module. This prevents the daemon from trying to load any

user/group-related files or libraries. This enabling makes the transfer

behave as if the client had passed the –numeric-ids command-line option. By

default, this parameter is enabled for chroot modules and disabled for

non-chroot modules. Also keep in mind that uid/gid preservation requires the

module to be running as root (see “uid”) or for “fake super” to be configured.

A chroot-enabled module should not have this parameter enabled unless you’ve

taken steps to ensure that the module has the necessary resources it needs to

translate names, and that it is not possible for a user to change those

resources. That includes being the code being able to call functions like

getpwuid() , getgrgid() , getpwname() , and getgrnam() ). You should test

what libraries and config files are required for your OS and get those setup

before starting to test name mapping in rsync.

munge symlinks

This parameter tells rsync to modify all symlinks in the same way as the

(non-daemon-affecting) –munge-links command-line option (using a method

described below). This should help protect your files from user trickery when

your daemon module is writable. The default is disabled when “use chroot” is

on and the inside-chroot path is “/”, otherwise it is enabled.

If you disable this parameter on a daemon that is not read-only, there are

tricks that a user can play with uploaded symlinks to access daemon-excluded

items (if your module has any), and, if “use chroot” is off, rsync can even be

tricked into showing or changing data that is outside the module’s path (as

access-permissions allow).

The way rsync disables the use of symlinks is to prefix each one with the

string “/rsyncd-munged/”. This prevents the links from being used as long as

that directory does not exist. When this parameter is enabled, rsync will

refuse to run if that path is a directory or a symlink to a directory. When

using the “munge symlinks” parameter in a chroot area that has an

inside-chroot path of “/”, you should add “/rsyncd-munged/” to the exclude

setting for the module so that a user can’t try to create it.

Note: rsync makes no attempt to verify that any pre-existing symlinks in the

module’s hierarchy are as safe as you want them to be (unless, of course, it

just copied in the whole hierarchy). If you setup an rsync daemon on a new

area or locally add symlinks, you can manually protect your symlinks from

being abused by prefixing “/rsyncd-munged/” to the start of every symlink’s

value. There is a perl script in the support directory of the source code

named “munge-symlinks” that can be used to add or remove this prefix from your

symlinks.

When this parameter is disabled on a writable module and “use chroot” is off

(or the inside-chroot path is not “/”), incoming symlinks will be modified to

drop a leading slash and to remove “..” path elements that rsync believes will

allow a symlink to escape the module’s hierarchy. There are tricky ways to

work around this, though, so you had better trust your users if you choose

this combination of parameters.

charset

This specifies the name of the character set in which the module’s filenames

are stored. If the client uses an –iconv option, the daemon will use the

value of the “charset” parameter regardless of the character set the client

actually passed. This allows the daemon to support charset conversion in a

chroot module without extra files in the chroot area, and also ensures that

name-translation is done in a consistent manner. If the “charset” parameter

is not set, the –iconv option is refused, just as if “iconv” had been speci‐

fied via “refuse options”.

If you wish to force users to always use –iconv for a particular module, add

“no-iconv” to the “refuse options” parameter. Keep in mind that this will

restrict access to your module to very new rsync clients.

max connections

This parameter allows you to specify the maximum number of simultaneous con‐

nections you will allow. Any clients connecting when the maximum has been

reached will receive a message telling them to try later. The default is 0,

which means no limit. A negative value disables the module. See also the

“lock file” parameter.

log file

When the “log file” parameter is set to a non-empty string, the rsync daemon

will log messages to the indicated file rather than using syslog. This is par‐

ticularly useful on systems (such as AIX) where syslog() doesn’t work for

chrooted programs. The file is opened before chroot() is called, allowing it

to be placed outside the transfer. If this value is set on a per-module basis

instead of globally, the global log will still contain any authorization fail‐

ures or config-file error messages.

If the daemon fails to open the specified file, it will fall back to using

syslog and output an error about the failure. (Note that the failure to open

the specified log file used to be a fatal error.)

This setting can be overridden by using the –log-file=FILE or –dparam=log‐

file=FILE command-line options. The former overrides all the log-file parame‐

ters of the daemon and all module settings. The latter sets the daemon’s log

file and the default for all the modules, which still allows modules to over‐

ride the default setting.

syslog facility

This parameter allows you to specify the syslog facility name to use when log‐

ging messages from the rsync daemon. You may use any standard syslog facility

name which is defined on your system. Common names are auth, authpriv, cron,

daemon, ftp, kern, lpr, mail, news, security, syslog, user, uucp, local0,

local1, local2, local3, local4, local5, local6 and local7. The default is dae‐

mon. This setting has no effect if the “log file” setting is a non-empty

string (either set in the per-modules settings, or inherited from the global

settings).

max verbosity

This parameter allows you to control the maximum amount of verbose information

that you’ll allow the daemon to generate (since the information goes into the

log file). The default is 1, which allows the client to request one level of

verbosity.

This also affects the user’s ability to request higher levels of –info and

–debug logging. If the max value is 2, then no info and/or debug value that

is higher than what would be set by -vv will be honored by the daemon in its

logging. To see how high of a verbosity level you need to accept for a par‐

ticular info/debug level, refer to “rsync –info=help” and “rsync

–debug=help”. For instance, it takes max-verbosity 4 to be able to output

debug TIME2 and FLIST3.

lock file

This parameter specifies the file to use to support the “max connections”

parameter. The rsync daemon uses record locking on this file to ensure that

the max connections limit is not exceeded for the modules sharing the lock

file. The default is /var/run/rsyncd.lock.

read only
该参数用于决定是否允许客户端上传文件。如果read only = true,则客户端的上传操作将会失败;如果read only = false,则可以进行上传,但前提是守护进程端的文件权限允许它们。
默认值:true

注意:”auth users”参数可以基于每个用户覆盖该设置。

write only
该参数用于决定是否允许客户端下载文件。如果write only = true,则客户端的下载操作将会失败;如果write only = false,则可以进行下载,但前提是守护进程端的文件权限允许它们。
默认值:false

list

This parameter determines whether this module is listed when the client asks

for a listing of available modules. In addition, if this is false, the daemon

will pretend the module does not exist when a client denied by “hosts allow”

or “hosts deny” attempts to access it. Realize that if “reverse lookup” is

disabled globally but enabled for the module, the resulting reverse lookup to

a potentially client-controlled DNS server may still reveal to the client that

it hit an existing module. The default is for modules to be listable.

uid
This parameter specifies the user name or user ID that file transfers to and

from that module should take place as when the daemon was run as root. In com‐

bination with the “gid” parameter this determines what file permissions are

available. The default when run by a super-user is to switch to the system’s

“nobody” user. The default for a non-super-user is to not try to change the

user. See also the “gid” parameter.

The RSYNC_USER_NAME environment variable may be used to request that rsync run

as the authorizing user. For example, if you want a rsync to run as the same

user that was received for the rsync authentication, this setup is useful:

uid = %RSYNC_USER_NAME%

gid = *

gid
This parameter specifies one or more group names/IDs that will be used when

accessing the module. The first one will be the default group, and any extra

ones be set as supplemental groups. You may also specify a “*” as the first

gid in the list, which will be replaced by all the normal groups for the

transfer’s user (see “uid”). The default when run by a super-user is to

switch to your OS’s “nobody” (or perhaps “nogroup”) group with no other sup‐

plementary groups. The default for a non-super-user is to not change any

group attributes (and indeed, your OS may not allow a non-super-user to try to

change their group settings).

fake super

Setting “fake super = yes” for a module causes the daemon side to behave as if

the –fake-super command-line option had been specified. This allows the full

attributes of a file to be stored without having to have the daemon actually

running as root.

filter
The daemon has its own filter chain that determines what files it will let the

client access. This chain is not sent to the client and is independent of any

filters the client may have specified. Files excluded by the daemon filter

chain (daemon-excluded files) are treated as non-existent if the client tries

to pull them, are skipped with an error message if the client tries to push

them (triggering exit code 23), and are never deleted from the module. You

can use daemon filters to prevent clients from downloading or tampering with

private administrative files, such as files you may add to support uid/gid

name translations.

The daemon filter chain is built from the “filter”, “include from”, “include”,

“exclude from”, and “exclude” parameters, in that order of priority. Anchored

patterns are anchored at the root of the module. To prevent access to an

entire subtree, for example, “/secret”, you must exclude everything in the

subtree; the easiest way to do this is with a triple-star pattern like

“/secret/***”.

The “filter” parameter takes a space-separated list of daemon filter rules,

though it is smart enough to know not to split a token at an internal space in

a rule (e.g. “- /foo – /bar” is parsed as two rules). You may specify one or

more merge-file rules using the normal syntax. Only one “filter” parameter

can apply to a given module in the config file, so put all the rules you want

in a single parameter. Note that per-directory merge-file rules do not pro‐

vide as much protection as global rules, but they can be used to make –delete

work better during a client download operation if the per-dir merge files are

included in the transfer and the client requests that they be used.

exclude

This parameter takes a space-separated list of daemon exclude patterns. As

with the client –exclude option, patterns can be qualified with “- ” or “+ ”

to explicitly indicate exclude/include. Only one “exclude” parameter can

apply to a given module. See the “filter” parameter for a description of how

excluded files affect the daemon.

include

Use an “include” to override the effects of the “exclude” parameter. Only one

“include” parameter can apply to a given module. See the “filter” parameter

for a description of how excluded files affect the daemon.

exclude from

This parameter specifies the name of a file on the daemon that contains daemon

exclude patterns, one per line. Only one “exclude from” parameter can apply

to a given module; if you have multiple exclude-from files, you can specify

them as a merge file in the “filter” parameter. See the “filter” parameter

for a description of how excluded files affect the daemon.

include from

Analogue of “exclude from” for a file of daemon include patterns. Only one

“include from” parameter can apply to a given module. See the “filter” param‐

eter for a description of how excluded files affect the daemon.

incoming chmod

This parameter allows you to specify a set of comma-separated chmod strings

that will affect the permissions of all incoming files (files that are being

received by the daemon). These changes happen after all other permission cal‐

culations, and this will even override destination-default and/or existing

permissions when the client does not specify –perms. See the description of

the –chmod rsync option and the chmod(1) manpage for information on the for‐

mat of this string.

outgoing chmod

This parameter allows you to specify a set of comma-separated chmod strings

that will affect the permissions of all outgoing files (files that are being

sent out from the daemon). These changes happen first, making the sent per‐

missions appear to be different than those stored in the filesystem itself.

For instance, you could disable group write permissions on the server while

having it appear to be on to the clients. See the description of the –chmod

rsync option and the chmod(1) manpage for information on the format of this

string.

auth users

This parameter specifies a comma and/or space-separated list of authorization

rules. In its simplest form, you list the usernames that will be allowed to

connect to this module. The usernames do not need to exist on the local sys‐

tem. The rules may contain shell wildcard characters that will be matched

against the username provided by the client for authentication. If “auth

users” is set then the client will be challenged to supply a username and

password to connect to the module. A challenge response authentication proto‐

col is used for this exchange. The plain text usernames and passwords are

stored in the file specified by the “secrets file” parameter. The default is

for all users to be able to connect without a password (this is called “anony‐

mous rsync”).

In addition to username matching, you can specify groupname matching via a ’@’

prefix. When using groupname matching, the authenticating username must be a

real user on the system, or it will be assumed to be a member of no groups.

For example, specifying ”
@rsync” will match the authenticating user if the

named user is a member of the rsync group.

Finally, options may be specified after a colon (:). The options allow you to

“deny” a user or a group, set the access to “ro” (read-only), or set the

access to “rw” (read/write). Setting an auth-rule-specific ro/rw setting

overrides the module’s “read only” setting.

Be sure to put the rules in the order you want them to be matched, because the

checking stops at the first matching user or group, and that is the only auth

that is checked. For example:

auth users = joe:deny @guest:deny admin:rw @rsync:ro susan joe sam

In the above rule, user joe will be denied access no matter what. Any user

that is in the group “guest” is also denied access. The user “admin” gets

access in read/write mode, but only if the admin user is not in group “guest”

(because the admin user-matching rule would never be reached if the user is in

group “guest”). Any other user who is in group “rsync” will get read-only

access. Finally, users susan, joe, and sam get the ro/rw setting of the mod‐

ule, but only if the user didn’t match an earlier group-matching rule.

See the description of the secrets file for how you can have per-user pass‐

words as well as per-group passwords. It also explains how a user can authen‐

ticate using their user password or (when applicable) a group password,

depending on what rule is being authenticated.

See also the section entitled “USING RSYNC-DAEMON FEATURES VIA A REMOTE SHELL

CONNECTION” in rsync(1) for information on how handle an rsyncd.conf-level

username that differs from the remote-shell-level username when using a remote

shell to connect to an rsync daemon.

secrets file

This parameter specifies the name of a file that contains the username:pass‐

word and/or
@groupname:password pairs used for authenticating this module.

This file is only consulted if the “auth users” parameter is specified. The

file is line-based and contains one name:password pair per line. Any line has

a hash (#) as the very first character on the line is considered a comment and

is skipped. The passwords can contain any characters but be warned that many

operating systems limit the length of passwords that can be typed at the

client end, so you may find that passwords longer than 8 characters don’t

work.

The use of group-specific lines are only relevant when the module is being

authorized using a matching ”
@groupname” rule. When that happens, the user

can be authorized via either their “username:password” line or the ”
@group‐


name:password” line for the group that triggered the authentication.

It is up to you what kind of password entries you want to include, either

users, groups, or both. The use of group rules in “auth users” does not

require that you specify a group password if you do not want to use shared

passwords.

There is no default for the “secrets file” parameter, you must choose a name

(such as /etc/rsyncd.secrets). The file must normally not be readable by

“other”; see “strict modes”. If the file is not found or is rejected, no

logins for a “user auth” module will be possible.

strict modes

This parameter determines whether or not the permissions on the secrets file

will be checked. If “strict modes” is true, then the secrets file must not be

readable by any user ID other than the one that the rsync daemon is running

under. If “strict modes” is false, the check is not performed. The default

is true. This parameter was added to accommodate rsync running on the Windows

operating system.

hosts allow

This parameter allows you to specify a list of patterns that are matched

against a connecting clients hostname and IP address. If none of the patterns

match then the connection is rejected.

Each pattern can be in one of five forms:

o a dotted decimal IPv4 address of the form a.b.c.d, or an IPv6 address
of the form a:b:c::d:e:f. In this case the incoming machine’s IP

address must match exactly.

o an address/mask in the form ipaddr/n where ipaddr is the IP address and
n is the number of one bits in the netmask. All IP addresses which

match the masked IP address will be allowed in.

o an address/mask in the form ipaddr/maskaddr where ipaddr is the IP
address and maskaddr is the netmask in dotted decimal notation for

IPv4, or similar for IPv6, e.g. ffff:ffff:ffff:ffff:: instead of /64.

All IP addresses which match the masked IP address will be allowed in.

o a hostname pattern using wildcards. If the hostname of the connecting
IP (as determined by a reverse lookup) matches the wildcarded name

(using the same rules as normal unix filename matching), the client is

allowed in. This only works if “reverse lookup” is enabled (the

default).

o a hostname. A plain hostname is matched against the reverse DNS of the
connecting IP (if “reverse lookup” is enabled), and/or the IP of the

given hostname is matched against the connecting IP (if “forward

lookup” is enabled, as it is by default). Any match will be allowed

in.

Note IPv6 link-local addresses can have a scope in the address specification:

fe80::1%link1

fe80::%link1/64

fe80::%link1/ffff:ffff:ffff:ffff::

You can also combine “hosts allow” with a separate “hosts deny” parameter. If

both parameters are specified then the “hosts allow” parameter is checked

first and a match results in the client being able to connect. The “hosts

deny” parameter is then checked and a match means that the host is rejected.

If the host does not match either the “hosts allow” or the “hosts deny” pat‐

terns then it is allowed to connect.

The default is no “hosts allow” parameter, which means all hosts can connect.

hosts deny

This parameter allows you to specify a list of patterns that are matched

against a connecting clients hostname and IP address. If the pattern matches

then the connection is rejected. See the “hosts allow” parameter for more

information.

The default is no “hosts deny” parameter, which means all hosts can connect.

reverse lookup

Controls whether the daemon performs a reverse lookup on the client’s IP

address to determine its hostname, which is used for “hosts allow”/”hosts

deny” checks and the “%h” log escape. This is enabled by default, but you may

wish to disable it to save time if you know the lookup will not return a use‐

ful result, in which case the daemon will use the name “UNDETERMINED” instead.

If this parameter is enabled globally (even by default), rsync performs the

lookup as soon as a client connects, so disabling it for a module will not

avoid the lookup. Thus, you probably want to disable it globally and then

enable it for modules that need the information.

forward lookup

Controls whether the daemon performs a forward lookup on any hostname speci‐

fied in an hosts allow/deny setting. By default this is enabled, allowing the

use of an explicit hostname that would not be returned by reverse DNS of the

connecting IP.

ignore errors

This parameter tells rsyncd to ignore I/O errors on the daemon when deciding

whether to run the delete phase of the transfer. Normally rsync skips the

–delete step if any I/O errors have occurred in order to prevent disastrous

deletion due to a temporary resource shortage or other I/O error. In some

cases this test is counter productive so you can use this parameter to turn

off this behavior.

ignore nonreadable

This tells the rsync daemon to completely ignore files that are not readable

by the user. This is useful for public archives that may have some non-read‐

able files among the directories, and the sysadmin doesn’t want those files to

be seen at all.

transfer logging

This parameter enables per-file logging of downloads and uploads in a format

somewhat similar to that used by ftp daemons. The daemon always logs the

transfer at the end, so if a transfer is aborted, no mention will be made in

the log file.

If you want to customize the log lines, see the “log format” parameter.

log format

This parameter allows you to specify the format used for logging file trans‐

fers when transfer logging is enabled. The format is a text string containing

embedded single-character escape sequences prefixed with a percent (%) charac‐

ter. An optional numeric field width may also be specified between the per‐

cent and the escape letter (e.g. “%-50n %8l %07p”). In addition, one or more

apostrophes may be specified prior to a numerical escape to indicate that the

numerical value should be made more human-readable. The 3 supported levels

are the same as for the –human-readable command-line option, though the

default is for human-readability to be off. Each added apostrophe increases

the level (e.g. “%”l %’b %f”).

The default log format is “%o %h [%a] %m (%u) %f %l”, and a “%t [%p] ” is

always prefixed when using the “log file” parameter. (A perl script that will

summarize this default log format is included in the rsync source code distri‐

bution in the “support” subdirectory: rsyncstats.)

The single-character escapes that are understood are as follows:

o %a the remote IP address (only available for a daemon)

o %b the number of bytes actually transferred

o %B the permission bits of the file (e.g. rwxrwxrwt)

o %c the total size of the block checksums received for the basis file
(only when sending)

o %C the full-file MD5 checksum if –checksum is enabled or a file was
transferred (only for protocol 30 or above).

o %f the filename (long form on sender; no trailing “/”)

o %G the gid of the file (decimal) or “DEFAULT”

o %h the remote host name (only available for a daemon)

o %i an itemized list of what is being updated

o %l the length of the file in bytes

o %L the string ” -> SYMLINK”, ” => HARDLINK”, or “” (where SYMLINK or
HARDLINK is a filename)

o %m the module name

o %M the last-modified time of the file

o %n the filename (short form; trailing “/” on dir)

o %o the operation, which is “send”, “recv”, or “del.” (the latter
includes the trailing period)

o %p the process ID of this rsync session

o %P the module path

o %t the current date time

o %u the authenticated username or an empty string

o %U the uid of the file (decimal)

For a list of what the characters mean that are output by “%i”, see the

–itemize-changes option in the rsync manpage.

Note that some of the logged output changes when talking with older rsync ver‐

sions. For instance, deleted files were only output as verbose messages prior

to rsync 2.6.4.

timeout

This parameter allows you to override the clients choice for I/O timeout for

this module. Using this parameter you can ensure that rsync won’t wait on a

dead client forever. The timeout is specified in seconds. A value of zero

means no timeout and is the default. A good choice for anonymous rsync daemons

may be 600 (giving a 10 minute timeout).

refuse options

This parameter allows you to specify a space-separated list of rsync command

line options that will be refused by your rsync daemon. You may specify the

full option name, its one-letter abbreviation, or a wild-card string that

matches multiple options. For example, this would refuse –checksum (-c) and

all the various delete options:

refuse options = c delete

The reason the above refuses all delete options is that the options imply

–delete, and implied options are refused just like explicit options. As an

additional safety feature, the refusal of “delete” also refuses

remove-source-files when the daemon is the sender; if you want the latter

without the former, instead refuse “delete-*” — that refuses all the delete

modes without affecting –remove-source-files.

When an option is refused, the daemon prints an error message and exits. To

prevent all compression when serving files, you can use “dont compress = *”

(see below) instead of “refuse options = compress” to avoid returning an error

to a client that requests compression.

dont compress

This parameter allows you to select filenames based on wildcard patterns that

should not be compressed when pulling files from the daemon (no analogous

parameter exists to govern the pushing of files to a daemon). Compression is

expensive in terms of CPU usage, so it is usually good to not try to compress

files that won’t compress well, such as already compressed files.

The “dont compress” parameter takes a space-separated list of case-insensitive

wildcard patterns. Any source filename matching one of the patterns will not

be compressed during transfer.

See the –skip-compress parameter in the rsync(1) manpage for the list of file

suffixes that are not compressed by default. Specifying a value for the “dont

compress” parameter changes the default when the daemon is the sender.

pre-xfer exec, post-xfer exec

You may specify a command to be run before and/or after the transfer. If the

pre-xfer exec command fails, the transfer is aborted before it begins. Any

output from the script on stdout (up to several KB) will be displayed to the

user when aborting, but is NOT displayed if the script returns success. Any

output from the script on stderr goes to the daemon’s stderr, which is typi‐

cally discarded (though see –no-detatch option for a way to see the stderr

output, which can assist with debugging).

The following environment variables will be set, though some are specific to

the pre-xfer or the post-xfer environment:

o RSYNC_MODULE_NAME: The name of the module being accessed.

o RSYNC_MODULE_PATH: The path configured for the module.

o RSYNC_HOST_ADDR: The accessing host’s IP address.

o RSYNC_HOST_NAME: The accessing host’s name.

o RSYNC_USER_NAME: The accessing user’s name (empty if no user).

o RSYNC_PID: A unique number for this transfer.

o RSYNC_REQUEST: (pre-xfer only) The module/path info specified by the
user. Note that the user can specify multiple source files, so the

request can be something like “mod/path1 mod/path2”, etc.

o RSYNC_ARG#: (pre-xfer only) The pre-request arguments are set in these
numbered values. RSYNC_ARG0 is always “rsyncd”, followed by the options

that were used in RSYNC_ARG1, and so on. There will be a value of “.”

indicating that the options are done and the path args are beginning —

these contain similar information to RSYNC_REQUEST, but with values

separated and the module name stripped off.

o RSYNC_EXIT_STATUS: (post-xfer only) the server side’s exit value. This
will be 0 for a successful run, a positive value for an error that the

server generated, or a -1 if rsync failed to exit properly. Note that

an error that occurs on the client side does not currently get sent to

the server side, so this is not the final exit status for the whole

transfer.

o RSYNC_RAW_STATUS: (post-xfer only) the raw exit value from waitpid() .

Even though the commands can be associated with a particular module, they are

run using the permissions of the user that started the daemon (not the mod‐

ule’s uid/gid setting) without any chroot restrictions.

配置指令(CONFIG DIRECTIVES)

There are currently two config directives available that allow a config file to
incorporate the contents of other files: &include and &merge. Both allow a refer‐
ence to either a file or a directory. They differ in how segregated the file’s con‐
tents are considered to be.

The &include directive treats each file as more distinct, with each one inheriting
the defaults of the parent file, starting the parameter parsing as globals/defaults,
and leaving the defaults unchanged for the parsing of the rest of the parent file.

The &merge directive, on the other hand, treats the file’s contents as if it were
simply inserted in place of the directive, and thus it can set parameters in a module
started in another file, can affect the defaults for other files, etc.

When an &include or &merge directive refers to a directory, it will read in all the
*.conf or *.inc files (respectively) that are contained inside that directory (with‐
out any recursive scanning), with the files sorted into alpha order. So, if you have
a directory named “rsyncd.d” with the files “foo.conf”, “bar.conf”, and “baz.conf”
inside it, this directive:

&include /path/rsyncd.d

would be the same as this set of directives:

&include /path/rsyncd.d/bar.conf
&include /path/rsyncd.d/baz.conf
&include /path/rsyncd.d/foo.conf

except that it adjusts as files are added and removed from the directory.

The advantage of the &include directive is that you can define one or more modules in
a separate file without worrying about unintended side-effects between the self-con‐
tained module files.

The advantage of the &merge directive is that you can load config snippets that can
be included into multiple module definitions, and you can also set global values that
will affect connections (such as motd file), or globals that will affect other
include files.

For example, this is a useful /etc/rsyncd.conf file:

port = 873
log file = /var/log/rsync.log
pid file = /var/lock/rsync.lock

&merge /etc/rsyncd.d
&include /etc/rsyncd.d

This would merge any /etc/rsyncd.d/*.inc files (for global values that should stay in
effect), and then include any /etc/rsyncd.d/*.conf files (defining modules without
any global-value cross-talk).

认证强度(AUTHENTICATION STRENGTH)

The authentication protocol used in rsync is a 128 bit MD4 based challenge response
system. This is fairly weak protection, though (with at least one brute-force
hash-finding algorithm publicly available), so if you want really top-quality secu‐
rity, then I recommend that you run rsync over ssh. (Yes, a future version of rsync
will switch over to a stronger hashing method.)

Also note that the rsync daemon protocol does not currently provide any encryption of
the data that is transferred over the connection. Only authentication is provided.
Use ssh as the transport if you want encryption.

Future versions of rsync may support SSL for better authentication and encryption,
but that is still being investigated.

参考文献

man 5 rsyncd.conf, version 3.1.2-2