以服务模式运行「rsync」（LAUNCHING THE RSYNC DAEMON）
该选项允许你指定一个“”message of the day”“来向每个连接上的客户端展示。类似于Linux中的/etc/motd的功能。
这个参数可以为喜欢最大限度地调整系统的人们提供无尽的乐趣。 您可以设置各种套接字选项，这可能会使传输更快（或更慢！）。 请阅读setsockopt()系统调用的手册页，以获取有关可能设置的一些选项的详细信息。 默认情况下，不设置特殊的套接字选项。
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.
module name when clients obtain a list of available modules. The default is no
This parameter specifies the directory in the daemon’s filesystem to make
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:
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‐
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).
“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 “/”.
(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).
being enabled (disabling name lookups). See below for what a chroot needs in
order for name lookups to succeed.
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.
chroot area that is different from your normal system. For example, you could
abbreviate the list of users and groups.
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.
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.
(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.
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
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.
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
(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.
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”.
“no-iconv” to the “refuse options” parameter. Keep in mind that this will
restrict access to your module to very new rsync clients.
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.
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.
syslog and output an error about the failure. (Note that the failure to open
the specified log file used to be a fatal error.)
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.
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
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
–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.
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 = true，则客户端的上传操作将会失败；如果read only = false，则可以进行上传，但前提是守护进程端的文件权限允许它们。
该参数用于决定是否允许客户端下载文件。如果write only = true，则客户端的下载操作将会失败；如果write only = false，则可以进行下载，但前提是守护进程端的文件权限允许它们。
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.
This parameter specifies the user name or user ID that file transfers to and
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.
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:
gid = *
This parameter specifies one or more group names/IDs that will be used when
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).
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.
The daemon has its own filter chain that determines what files it will let the
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
“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
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.
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” parameter can apply to a given module. See the “filter” parameter
for a description of how excluded files affect the 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” parameter can apply to a given module. See the “filter” param‐
eter for a description of how excluded files affect the daemon.
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.
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
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‐
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.
“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.
checking stops at the first matching user or group, and that is the only auth
that is checked. For example:
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.
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.
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.
@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
authorized using a matching ”
@groupname” rule. When that happens, the user
can be authorized via either their “username:password” line or the ”
name:password” line for the group that triggered the authentication.
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
(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.
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
against a connecting clients hostname and IP address. If none of the patterns
match then the connection is rejected.
address must match exactly.
match the masked IP address will be allowed in.
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.
(using the same rules as normal unix filename matching), the client is
allowed in. This only works if “reverse lookup” is enabled (the
given hostname is matched against the connecting IP (if “forward
lookup” is enabled, as it is by default). Any match will be allowed
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.
against a connecting clients hostname and IP address. If the pattern matches
then the connection is rejected. See the “hosts allow” parameter for more
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.
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.
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
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.
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.
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.
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”).
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.)
–itemize-changes option in the rsync manpage.
sions. For instance, deleted files were only output as verbose messages prior
to rsync 2.6.4.
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).
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:
–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.
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.
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.
wildcard patterns. Any source filename matching one of the patterns will not
be compressed during transfer.
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
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 pre-xfer or the post-xfer environment:
request can be something like “mod/path1 mod/path2”, etc.
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.
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
run using the permissions of the user that started the daemon (not the mod‐
ule’s uid/gid setting) without any chroot restrictions.
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:
would be the same as this set of directives:
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
For example, this is a useful /etc/rsyncd.conf file:
port = 873
log file = /var/log/rsync.log
pid file = /var/lock/rsync.lock
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).
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