Annotation of embedaddon/rsync/rsyncd.conf.5.html, revision 1.1.1.1

1.1       misho       1: <html><head>
                      2: <title>rsyncd.conf(5) man page</title>
                      3: <link href="https://fonts.googleapis.com/css2?family=Roboto&family=Roboto+Mono&display=swap" rel="stylesheet">
                      4: <style>
                      5: body {
                      6:   max-width: 50em;
                      7:   margin: auto;
                      8: }
                      9: body, b, strong, u {
                     10:   font-family: 'Roboto', sans-serif;
                     11: }
                     12: code {
                     13:   font-family: 'Roboto Mono', monospace;
                     14:   font-weight: bold;
                     15:   white-space: pre;
                     16: }
                     17: pre code {
                     18:   display: block;
                     19:   font-weight: normal;
                     20: }
                     21: blockquote pre code {
                     22:   background: #f1f1f1;
                     23: }
                     24: dd p:first-of-type {
                     25:   margin-block-start: 0em;
                     26: }
                     27: </style>
                     28: </head><body>
                     29: <h1>NAME</h1>
                     30: <p>rsyncd.conf -&#8288; configuration file for rsync in daemon mode</p>
                     31: <h1>SYNOPSIS</h1>
                     32: <p>rsyncd.conf</p>
                     33: <h1>DESCRIPTION</h1>
                     34: <p>The rsyncd.conf file is the runtime configuration file for rsync when run as an
                     35: rsync daemon.</p>
                     36: <p>The rsyncd.conf file controls authentication, access, logging and available
                     37: modules.</p>
                     38: <h1>FILE FORMAT</h1>
                     39: <p>The file consists of modules and parameters. A module begins with the name of
                     40: the module in square brackets and continues until the next module begins.
                     41: Modules contain parameters of the form <code>name = value</code>.</p>
                     42: <p>The file is line-based&nbsp;-&#8288;-&#8288; that is, each newline-terminated line represents
                     43: either a comment, a module name or a parameter.</p>
                     44: <p>Only the first equals sign in a parameter is significant. Whitespace before or
                     45: after the first equals sign is discarded. Leading, trailing and internal
                     46: whitespace in module and parameter names is irrelevant. Leading and trailing
                     47: whitespace in a parameter value is discarded. Internal whitespace within a
                     48: parameter value is retained verbatim.</p>
                     49: <p>Any line <strong>beginning</strong> with a hash (<code>#</code>) is ignored, as are lines containing
                     50: only whitespace. (If a hash occurs after anything other than leading
                     51: whitespace, it is considered a part of the line's content.)</p>
                     52: <p>Any line ending in a <code>\</code> is &quot;continued&quot; on the next line in the customary UNIX
                     53: fashion.</p>
                     54: <p>The values following the equals sign in parameters are all either a string (no
                     55: quotes needed) or a boolean, which may be given as yes/no, 0/1 or true/false.
                     56: Case is not significant in boolean values, but is preserved in string values.</p>
                     57: <h1>LAUNCHING THE RSYNC DAEMON</h1>
                     58: <p>The rsync daemon is launched by specifying the <code>--daemon</code> option to
                     59: rsync.</p>
                     60: <p>The daemon must run with root privileges if you wish to use chroot, to bind to
                     61: a port numbered under 1024 (as is the default 873), or to set file ownership.
                     62: Otherwise, it must just have permission to read and write the appropriate data,
                     63: log, and lock files.</p>
                     64: <p>You can launch it either via inetd, as a stand-alone daemon, or from an rsync
                     65: client via a remote shell.  If run as a stand-alone daemon then just run the
                     66: command &quot;<code>rsync --daemon</code>&quot; from a suitable startup script.</p>
                     67: <p>When run via inetd you should add a line like this to /etc/services:</p>
                     68: <blockquote>
                     69: <pre><code>rsync           873/tcp
                     70: </code></pre>
                     71: </blockquote>
                     72: <p>and a single line something like this to /etc/inetd.conf:</p>
                     73: <blockquote>
                     74: <pre><code>rsync   stream  tcp     nowait  root   /usr/bin/rsync rsyncd --daemon
                     75: </code></pre>
                     76: </blockquote>
                     77: <p>Replace &quot;/usr/bin/rsync&quot; with the path to where you have rsync installed on
                     78: your system.  You will then need to send inetd a HUP signal to tell it to
                     79: reread its config file.</p>
                     80: <p>Note that you should <strong>not</strong> send the rsync daemon a HUP signal to force it to
                     81: reread the <code>rsyncd.conf</code> file. The file is re-read on each client connection.</p>
                     82: <h1>GLOBAL PARAMETERS</h1>
                     83: <p>The first parameters in the file (before a [module] header) are the global
                     84: parameters.  Rsync also allows for the use of a &quot;[global]&quot; module name to
                     85: indicate the start of one or more global-parameter sections (the name must be
                     86: lower case).</p>
                     87: <p>You may also include any module parameters in the global part of the config
                     88: file in which case the supplied value will override the default for that
                     89: parameter.</p>
                     90: <p>You may use references to environment variables in the values of parameters.
                     91: String parameters will have %VAR% references expanded as late as possible (when
                     92: the string is first used in the program), allowing for the use of variables
                     93: that rsync sets at connection time, such as RSYNC_USER_NAME.  Non-string
                     94: parameters (such as true/false settings) are expanded when read from the config
                     95: file.  If a variable does not exist in the environment, or if a sequence of
                     96: characters is not a valid reference (such as an un-paired percent sign), the
                     97: raw characters are passed through unchanged.  This helps with backward
                     98: compatibility and safety (e.g. expanding a non-existent %VAR% to an empty
                     99: string in a path could result in a very unsafe path).  The safest way to insert
                    100: a literal % into a value is to use %%.</p>
                    101: <dl>
                    102: 
                    103: <dt><code>motd file</code></dt><dd>
                    104: <p>This parameter allows you to specify a &quot;message of the day&quot; to display to
                    105: clients on each connect. This usually contains site information and any
                    106: legal notices. The default is no motd file.  This can be overridden by the
                    107: <code>--dparam=motdfile=FILE</code> command-line option when starting the daemon.</p>
                    108: </dd>
                    109: 
                    110: <dt><code>pid file</code></dt><dd>
                    111: <p>This parameter tells the rsync daemon to write its process ID to that file.
                    112: The rsync keeps the file locked so that it can know when it is safe to
                    113: overwrite an existing file.</p>
                    114: <p>The filename can be overridden by the <code>--dparam=pidfile=FILE</code> command-line
                    115: option when starting the daemon.</p>
                    116: </dd>
                    117: 
                    118: <dt><code>port</code></dt><dd>
                    119: <p>You can override the default port the daemon will listen on by specifying
                    120: this value (defaults to 873).  This is ignored if the daemon is being run
                    121: by inetd, and is superseded by the <code>--port</code> command-line option.</p>
                    122: </dd>
                    123: 
                    124: <dt><code>address</code></dt><dd>
                    125: <p>You can override the default IP address the daemon will listen on by
                    126: specifying this value.  This is ignored if the daemon is being run by
                    127: inetd, and is superseded by the <code>--address</code> command-line option.</p>
                    128: </dd>
                    129: 
                    130: <dt><code>socket options</code></dt><dd>
                    131: <p>This parameter can provide endless fun for people who like to tune their
                    132: systems to the utmost degree. You can set all sorts of socket options which
                    133: may make transfers faster (or slower!). Read the man page for the
                    134: <strong>setsockopt()</strong> system call for details on some of the options you may be
                    135: able to set. By default no special socket options are set.  These settings
                    136: can also be specified via the <code>--sockopts</code> command-line option.</p>
                    137: </dd>
                    138: 
                    139: <dt><code>listen backlog</code></dt><dd>
                    140: <p>You can override the default backlog value when the daemon listens for
                    141: connections.  It defaults to 5.</p>
                    142: </dd>
                    143: 
                    144: <dt><code>use slp</code></dt><dd>
                    145: <p>You can enable Service Location Protocol support by enabling this global
                    146: parameter.  The default is &quot;false&quot;.</p>
                    147: </dd>
                    148: 
                    149: <dt><code>slp refresh</code></dt><dd>
                    150: <p>This parameter is used to determine how long service advertisements are
                    151: valid (measured in seconds), and is only applicable if you have Service
                    152: Location Protocol support compiled in. If this is not set or is set to
                    153: zero, then service advertisements never time out. If this is set to less
                    154: than 120 seconds, then 120 seconds is used. If it is set to more than
                    155: 65535, then 65535 is used (which is a limitation of SLP).  Using 3600
                    156: (one hour) is a good number if you tend to change your configuration.</p>
                    157: </dd>
                    158: </dl>
                    159: <h1>MODULE PARAMETERS</h1>
                    160: <p>After the global parameters you should define a number of modules, each module
                    161: exports a directory tree as a symbolic name. Modules are exported by specifying
                    162: a module name in square brackets [module] followed by the parameters for that
                    163: module.  The module name cannot contain a slash or a closing square bracket.
                    164: If the name contains whitespace, each internal sequence of whitespace will be
                    165: changed into a single space, while leading or trailing whitespace will be
                    166: discarded.  Also, the name cannot be &quot;global&quot; as that exact name indicates that
                    167: global parameters follow (see above).</p>
                    168: <p>As with GLOBAL PARAMETERS, you may use references to environment variables in
                    169: the values of parameters.  See the GLOBAL PARAMETERS section for more details.</p>
                    170: <dl>
                    171: 
                    172: <dt><code>comment</code></dt><dd>
                    173: <p>This parameter specifies a description string that is displayed next to the
                    174: module name when clients obtain a list of available modules. The default is
                    175: no comment.</p>
                    176: </dd>
                    177: 
                    178: <dt><code>path</code></dt><dd>
                    179: <p>This parameter specifies the directory in the daemon's filesystem to make
                    180: available in this module.  You must specify this parameter for each module
                    181: in <code>rsyncd.conf</code>.</p>
                    182: <p>You may base the path's value off of an environment variable by surrounding
                    183: the variable name with percent signs.  You can even reference a variable
                    184: that is set by rsync when the user connects.  For example, this would use
                    185: the authorizing user's name in the path:</p>
                    186: <blockquote>
                    187: <pre><code>path = /home/%RSYNC_USER_NAME%
                    188: </code></pre>
                    189: </blockquote>
                    190: <p>It is fine if the path includes internal spaces&nbsp;-&#8288;-&#8288; they will be retained
                    191: verbatim (which means that you shouldn't try to escape them).  If your
                    192: final directory has a trailing space (and this is somehow not something you
                    193: wish to fix), append a trailing slash to the path to avoid losing the
                    194: trailing whitespace.</p>
                    195: </dd>
                    196: 
                    197: <dt><code>use chroot</code></dt><dd>
                    198: <p>If &quot;use chroot&quot; is true, the rsync daemon will chroot to the &quot;path&quot; before
                    199: starting the file transfer with the client.  This has the advantage of
                    200: extra protection against possible implementation security holes, but it has
                    201: the disadvantages of requiring super-user privileges, of not being able to
                    202: follow symbolic links that are either absolute or outside of the new root
                    203: path, and of complicating the preservation of users and groups by name (see
                    204: below).</p>
                    205: <p>As an additional safety feature, you can specify a dot-dir in the module's
                    206: &quot;path&quot; to indicate the point where the chroot should occur.  This allows
                    207: rsync to run in a chroot with a non-&quot;/&quot; path for the top of the transfer
                    208: hierarchy.  Doing this guards against unintended library loading (since
                    209: those absolute paths will not be inside the transfer hierarchy unless you
                    210: have used an unwise pathname), and lets you setup libraries for the chroot
                    211: that are outside of the transfer.  For example, specifying
                    212: &quot;/var/rsync/./module1&quot; will chroot to the &quot;/var/rsync&quot; directory and set
                    213: the inside-chroot path to &quot;/module1&quot;.  If you had omitted the dot-dir, the
                    214: chroot would have used the whole path, and the inside-chroot path would
                    215: have been &quot;/&quot;.</p>
                    216: <p>When both &quot;use chroot&quot; and &quot;daemon chroot&quot; are false, OR the inside-chroot
                    217: path of &quot;use chroot&quot; is not &quot;/&quot;, rsync will: (1) munge symlinks by default
                    218: for security reasons (see &quot;munge symlinks&quot; for a way to turn this off, but
                    219: only if you trust your users), (2) substitute leading slashes in absolute
                    220: paths with the module's path (so that options such as <code>--backup-dir</code>,
                    221: <code>--compare-dest</code>, etc. interpret an absolute path as rooted in the module's
                    222: &quot;path&quot; dir), and (3) trim &quot;..&quot; path elements from args if rsync believes
                    223: they would escape the module hierarchy.  The default for &quot;use chroot&quot; is
                    224: true, and is the safer choice (especially if the module is not read-only).</p>
                    225: <p>When this parameter is enabled <u>and</u> the &quot;name converter&quot; parameter is
                    226: <u>not</u> set, the &quot;numeric ids&quot; parameter will default to being enabled
                    227: (disabling name lookups).  This means that if you manually setup
                    228: name-lookup libraries in your chroot (instead of using a name converter)
                    229: that you need to explicitly set <code>numeric ids = false</code> for rsync to do name
                    230: lookups.</p>
                    231: <p>If you copy library resources into the module's chroot area, you should
                    232: protect them through your OS's normal user/group or ACL settings (to
                    233: prevent the rsync module's user from being able to change them), and then
                    234: hide them from the user's view via &quot;exclude&quot; (see how in the discussion of
                    235: that parameter).  However, it's easier and safer to setup a name converter.</p>
                    236: </dd>
                    237: 
                    238: <dt><code>daemon chroot</code></dt><dd>
                    239: <p>This parameter specifies a path to which the daemon will chroot before
                    240: beginning communication with clients. Module paths (and any &quot;use chroot&quot;
                    241: settings) will then be related to this one. This lets you choose if you
                    242: want the whole daemon to be chrooted (with this setting), just the
                    243: transfers to be chrooted (with &quot;use chroot&quot;), or both.  Keep in mind that
                    244: the &quot;daemon chroot&quot; area may need various OS/lib/etc files installed to
                    245: allow the daemon to function.  By default the daemon runs without any
                    246: chrooting.</p>
                    247: </dd>
                    248: 
                    249: <dt><code>proxy protocol</code></dt><dd>
                    250: <p>When this parameter is enabled, all incoming connections must start with a
                    251: V1 or V2 proxy protocol header.  If the header is not found, the connection
                    252: is closed.</p>
                    253: <p>Setting this to <code>true</code> requires a proxy server to forward source IP
                    254: information to rsync, allowing you to log proper IP/host info and make use
                    255: of client-oriented IP restrictions.  The default of <code>false</code> means that the
                    256: IP information comes directly from the socket's metadata.  If rsync is not
                    257: behind a proxy, this should be disabled.</p>
                    258: <p><u>CAUTION</u>: using this option can be dangerous if you do not ensure that
                    259: only the proxy is allowed to connect to the rsync port.  If any non-proxied
                    260: connections are allowed through, the client will be able to use a modified
                    261: rsync to spoof any remote IP address that they desire.  You can lock this
                    262: down using something like iptables <code>-uid-owner root</code> rules (for strict
                    263: localhost access), various firewall rules, or you can require password
                    264: authorization so that any spoofing by users will not grant extra access.</p>
                    265: <p>This setting is global.  If you need some modules to require this and not
                    266: others, then you will need to setup multiple rsync daemon processes on
                    267: different ports.</p>
                    268: </dd>
                    269: 
                    270: <dt><code>name converter</code></dt><dd>
                    271: <p>This parameter lets you specify a program that will be run by the rsync
                    272: daemon to do user &amp; group conversions between names &amp; ids.  This script
                    273: is started prior to any chroot being setup, and runs as the daemon user
                    274: (not the transfer user).  You can specify a fully qualified pathname or
                    275: a program name that is on the $PATH.</p>
                    276: <p>The program can be used to do normal user &amp; group lookups without having to
                    277: put any extra files into the chroot area of the module <u>or</u> you can do
                    278: customized conversions.</p>
                    279: <p>The nameconvert program has access to all of the environment variables that
                    280: are described in the section on <code>pre-xfer exec</code>.  This is useful if you
                    281: want to customize the conversion using information about the module and/or
                    282: the copy request.</p>
                    283: <p>There is a sample python script in the support dir named &quot;nameconvert&quot; that
                    284: implements the normal user &amp; group lookups.  Feel free to customize it or
                    285: just use it as documentation to implement your own.</p>
                    286: </dd>
                    287: 
                    288: <dt><code>numeric ids</code></dt><dd>
                    289: <p>Enabling this parameter disables the mapping of users and groups by name
                    290: for the current daemon module.  This prevents the daemon from trying to
                    291: load any user/group-related files or libraries.  This enabling makes the
                    292: transfer behave as if the client had passed the <code>--numeric-ids</code>
                    293: command-line option.  By default, this parameter is enabled for chroot
                    294: modules and disabled for non-chroot modules.  Also keep in mind that
                    295: uid/gid preservation requires the module to be running as root (see &quot;uid&quot;)
                    296: or for &quot;fake super&quot; to be configured.</p>
                    297: <p>A chroot-enabled module should not have this parameter set to false unless
                    298: you're using a &quot;name converter&quot; program <u>or</u> you've taken steps to ensure
                    299: that the module has the necessary resources it needs to translate names and
                    300: that it is not possible for a user to change those resources.</p>
                    301: </dd>
                    302: 
                    303: <dt><code>munge symlinks</code></dt><dd>
                    304: <p>This parameter tells rsync to modify all symlinks in the same way as the
                    305: (non-daemon-affecting) <code>--munge-links</code> command-line option (using a method
                    306: described below).  This should help protect your files from user trickery
                    307: when your daemon module is writable.  The default is disabled when
                    308: &quot;use chroot&quot; is on with an inside-chroot path of &quot;/&quot;, OR if &quot;daemon chroot&quot;
                    309: is on, otherwise it is enabled.</p>
                    310: <p>If you disable this parameter on a daemon that is not read-only, there are
                    311: tricks that a user can play with uploaded symlinks to access
                    312: daemon-excluded items (if your module has any), and, if &quot;use chroot&quot; is
                    313: off, rsync can even be tricked into showing or changing data that is
                    314: outside the module's path (as access-permissions allow).</p>
                    315: <p>The way rsync disables the use of symlinks is to prefix each one with the
                    316: string &quot;/rsyncd-munged/&quot;.  This prevents the links from being used as long
                    317: as that directory does not exist.  When this parameter is enabled, rsync
                    318: will refuse to run if that path is a directory or a symlink to a directory.
                    319: When using the &quot;munge symlinks&quot; parameter in a chroot area that has an
                    320: inside-chroot path of &quot;/&quot;, you should add &quot;/rsyncd-munged/&quot; to the exclude
                    321: setting for the module so that a user can't try to create it.</p>
                    322: <p>Note:  rsync makes no attempt to verify that any pre-existing symlinks in
                    323: the module's hierarchy are as safe as you want them to be (unless, of
                    324: course, it just copied in the whole hierarchy).  If you setup an rsync
                    325: daemon on a new area or locally add symlinks, you can manually protect your
                    326: symlinks from being abused by prefixing &quot;/rsyncd-munged/&quot; to the start of
                    327: every symlink's value.  There is a perl script in the support directory of
                    328: the source code named &quot;munge-symlinks&quot; that can be used to add or remove
                    329: this prefix from your symlinks.</p>
                    330: <p>When this parameter is disabled on a writable module and &quot;use chroot&quot; is
                    331: off (or the inside-chroot path is not &quot;/&quot;), incoming symlinks will be
                    332: modified to drop a leading slash and to remove &quot;..&quot; path elements that
                    333: rsync believes will allow a symlink to escape the module's hierarchy.
                    334: There are tricky ways to work around this, though, so you had better trust
                    335: your users if you choose this combination of parameters.</p>
                    336: </dd>
                    337: 
                    338: <dt><code>charset</code></dt><dd>
                    339: <p>This specifies the name of the character set in which the module's
                    340: filenames are stored.  If the client uses an <code>--iconv</code> option, the daemon
                    341: will use the value of the &quot;charset&quot; parameter regardless of the character
                    342: set the client actually passed.  This allows the daemon to support charset
                    343: conversion in a chroot module without extra files in the chroot area, and
                    344: also ensures that name-translation is done in a consistent manner.  If the
                    345: &quot;charset&quot; parameter is not set, the <code>--iconv</code> option is refused, just as if
                    346: &quot;iconv&quot; had been specified via &quot;refuse options&quot;.</p>
                    347: <p>If you wish to force users to always use <code>--iconv</code> for a particular module,
                    348: add &quot;no-iconv&quot; to the &quot;refuse options&quot; parameter.  Keep in mind that this
                    349: will restrict access to your module to very new rsync clients.</p>
                    350: </dd>
                    351: 
                    352: <dt><code>max connections</code></dt><dd>
                    353: <p>This parameter allows you to specify the maximum number of simultaneous
                    354: connections you will allow.  Any clients connecting when the maximum has
                    355: been reached will receive a message telling them to try later.  The default
                    356: is 0, which means no limit.  A negative value disables the module.  See
                    357: also the &quot;lock file&quot; parameter.</p>
                    358: </dd>
                    359: 
                    360: <dt><code>link by hash dir</code></dt><dd>
                    361: <p>When the &quot;link by hash dir&quot; parameter is set to a non-empty string,
                    362: received files will be hard linked into <strong>DIR</strong>, a link farm arranged by
                    363: MD5 file hash. See the <code>--link-by-hash</code> option for a full explanation.</p>
                    364: <p>The <strong>DIR</strong> must be accessible inside any chroot restrictions for the
                    365: module, but can exist outside the transfer location if there is an
                    366: inside-the-chroot path to the module (see &quot;use chroot&quot;).  Note that a
                    367: user-specified option does not allow this outside-the-transfer-area
                    368: placement.</p>
                    369: <p>If this parameter is set, it will disable the <code>--link-by-hash</code> command-line
                    370: option for copies into the module.</p>
                    371: </dd>
                    372: </dl>
                    373: <p>The default is for this parameter to be unset.</p>
                    374: <dl>
                    375: 
                    376: <dt><code>log file</code></dt><dd>
                    377: <p>When the &quot;log file&quot; parameter is set to a non-empty string, the rsync
                    378: daemon will log messages to the indicated file rather than using syslog.
                    379: This is particularly useful on systems (such as AIX) where <strong>syslog()</strong>
                    380: doesn't work for chrooted programs.  The file is opened before <strong>chroot()</strong>
                    381: is called, allowing it to be placed outside the transfer.  If this value is
                    382: set on a per-module basis instead of globally, the global log will still
                    383: contain any authorization failures or config-file error messages.</p>
                    384: <p>If the daemon fails to open the specified file, it will fall back to using
                    385: syslog and output an error about the failure.  (Note that the failure to
                    386: open the specified log file used to be a fatal error.)</p>
                    387: <p>This setting can be overridden by using the <code>--log-file=FILE</code> or
                    388: <code>--dparam=logfile=FILE</code> command-line options.  The former overrides all the
                    389: log-file parameters of the daemon and all module settings.  The latter sets
                    390: the daemon's log file and the default for all the modules, which still
                    391: allows modules to override the default setting.</p>
                    392: </dd>
                    393: 
                    394: <dt><code>syslog facility</code></dt><dd>
                    395: <p>This parameter allows you to specify the syslog facility name to use when
                    396: logging messages from the rsync daemon. You may use any standard syslog
                    397: facility name which is defined on your system. Common names are auth,
                    398: authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, syslog, user,
                    399: uucp, local0, local1, local2, local3, local4, local5, local6 and local7.
                    400: The default is daemon.  This setting has no effect if the &quot;log file&quot;
                    401: setting is a non-empty string (either set in the per-modules settings, or
                    402: inherited from the global settings).</p>
                    403: </dd>
                    404: 
                    405: <dt><code>syslog tag</code></dt><dd>
                    406: <p>This parameter allows you to specify the syslog tag to use when logging
                    407: messages from the rsync daemon. The default is &quot;rsyncd&quot;.  This setting has
                    408: no effect if the &quot;log file&quot; setting is a non-empty string (either set in
                    409: the per-modules settings, or inherited from the global settings).</p>
                    410: <p>For example, if you wanted each authenticated user's name to be included in
                    411: the syslog tag, you could do something like this:</p>
                    412: <blockquote>
                    413: <pre><code>syslog tag = rsyncd.%RSYNC_USER_NAME%
                    414: </code></pre>
                    415: </blockquote>
                    416: </dd>
                    417: 
                    418: <dt><code>max verbosity</code></dt><dd>
                    419: <p>This parameter allows you to control the maximum amount of verbose
                    420: information that you'll allow the daemon to generate (since the information
                    421: goes into the log file). The default is 1, which allows the client to
                    422: request one level of verbosity.</p>
                    423: <p>This also affects the user's ability to request higher levels of <code>--info</code>
                    424: and <code>--debug</code> logging.  If the max value is 2, then no info and/or debug
                    425: value that is higher than what would be set by <code>-vv</code> will be honored by the
                    426: daemon in its logging.  To see how high of a verbosity level you need to
                    427: accept for a particular info/debug level, refer to <code>rsync --info=help</code> and
                    428: <code>rsync --debug=help</code>.  For instance, it takes max-verbosity 4 to be able to
                    429: output debug TIME2 and FLIST3.</p>
                    430: </dd>
                    431: 
                    432: <dt><code>lock file</code></dt><dd>
                    433: <p>This parameter specifies the file to use to support the &quot;max connections&quot;
                    434: parameter. The rsync daemon uses record locking on this file to ensure that
                    435: the max connections limit is not exceeded for the modules sharing the lock
                    436: file.  The default is <code>/var/run/rsyncd.lock</code>.</p>
                    437: </dd>
                    438: 
                    439: <dt><code>checksum files</code></dt><dd>
                    440: <p>This parameter tells rsync to make use of any cached checksum information
                    441: it finds in per-directory .rsyncsums files when the current transfer is
                    442: using the <code>--checksum</code> option.  The value can be set to either &quot;lax&quot;,
                    443: &quot;strict&quot;, &quot;+lax&quot;, &quot;+strict&quot;, &quot;++lax&quot;, &quot;++strict&quot;, or +&quot;none&quot;.  See the
                    444: client's <code>--sumfiles</code> option for what these choices do.</p>
                    445: <p>Note also that the client's command-line option, <code>--sumfiles</code>, has no
                    446: effect on a daemon.  A daemon will only access checksum files if this
                    447: config option tells it to.  You can configure updating of the .rsyncsums
                    448: files even if the module itself is configured to be read-only.  See also
                    449: the <code>exclude</code> directive for a way to hide the .rsyncsums files from the
                    450: user.</p>
                    451: </dd>
                    452: 
                    453: <dt><code>read only</code></dt><dd>
                    454: <p>This parameter determines whether clients will be able to upload files or
                    455: not. If &quot;read only&quot; is true then any attempted uploads will fail. If
                    456: &quot;read only&quot; is false then uploads will be possible if file permissions on
                    457: the daemon side allow them. The default is for all modules to be read only.</p>
                    458: <p>Note that &quot;auth users&quot; can override this setting on a per-user basis.</p>
                    459: </dd>
                    460: 
                    461: <dt><code>write only</code></dt><dd>
                    462: <p>This parameter determines whether clients will be able to download files or
                    463: not. If &quot;write only&quot; is true then any attempted downloads will fail. If
                    464: &quot;write only&quot; is false then downloads will be possible if file permissions
                    465: on the daemon side allow them.  The default is for this parameter to be
                    466: disabled.</p>
                    467: <p>Helpful hint: you probably want to specify &quot;refuse options = delete&quot; for a
                    468: write-only module.</p>
                    469: </dd>
                    470: 
                    471: <dt><code>open noatime</code></dt><dd>
                    472: <p>When set to True, this parameter tells the rsync daemon to open files with
                    473: the O_NOATIME flag
                    474: (on systems that support it) to avoid changing the access time of the files
                    475: that are being transferred.  If your OS does not support the O_NOATIME flag
                    476: then rsync will silently ignore this option.  Note also that some
                    477: filesystems are mounted to avoid updating the atime on read access even
                    478: without the O_NOATIME flag being set.</p>
                    479: <p>When set to False, this parameters ensures that files on the server are not
                    480: opened with O_NOATIME.</p>
                    481: <p>When set to Unset (the default) the user controls the setting via
                    482: <code>--open-noatime</code>.</p>
                    483: </dd>
                    484: 
                    485: <dt><code>list</code></dt><dd>
                    486: <p>This parameter determines whether this module is listed when the client
                    487: asks for a listing of available modules.  In addition, if this is false,
                    488: the daemon will pretend the module does not exist when a client denied by
                    489: &quot;hosts allow&quot; or &quot;hosts deny&quot; attempts to access it.  Realize that if
                    490: &quot;reverse lookup&quot; is disabled globally but enabled for the module, the
                    491: resulting reverse lookup to a potentially client-controlled DNS server may
                    492: still reveal to the client that it hit an existing module.  The default is
                    493: for modules to be listable.</p>
                    494: </dd>
                    495: 
                    496: <dt><code>uid</code></dt><dd>
                    497: <p>This parameter specifies the user name or user ID that file transfers to
                    498: and from that module should take place as when the daemon was run as root.
                    499: In combination with the &quot;gid&quot; parameter this determines what file
                    500: permissions are available. The default when run by a super-user is to
                    501: switch to the system's &quot;nobody&quot; user.  The default for a non-super-user is
                    502: to not try to change the user.  See also the &quot;gid&quot; parameter.</p>
                    503: <p>The RSYNC_USER_NAME environment variable may be used to request that rsync
                    504: run as the authorizing user.  For example, if you want a rsync to run as
                    505: the same user that was received for the rsync authentication, this setup is
                    506: useful:</p>
                    507: <blockquote>
                    508: <pre><code>uid = %RSYNC_USER_NAME%
                    509: gid = *
                    510: </code></pre>
                    511: </blockquote>
                    512: </dd>
                    513: 
                    514: <dt><code>gid</code></dt><dd>
                    515: <p>This parameter specifies one or more group names/IDs that will be used when
                    516: accessing the module.  The first one will be the default group, and any
                    517: extra ones be set as supplemental groups.  You may also specify a &quot;<code>*</code>&quot; as
                    518: the first gid in the list, which will be replaced by all the normal groups
                    519: for the transfer's user (see &quot;uid&quot;).  The default when run by a super-user
                    520: is to switch to your OS's &quot;nobody&quot; (or perhaps &quot;nogroup&quot;) group with no
                    521: other supplementary groups.  The default for a non-super-user is to not
                    522: change any group attributes (and indeed, your OS may not allow a
                    523: non-super-user to try to change their group settings).</p>
                    524: <p>The specified list is normally split into tokens based on spaces and
                    525: commas.  However, if the list starts with a comma, then the list is only
                    526: split on commas, which allows a group name to contain a space.  In either
                    527: case any leading and/or trailing whitespace is removed from the tokens and
                    528: empty tokens are ignored.</p>
                    529: </dd>
                    530: 
                    531: <dt><code>daemon uid</code></dt><dd>
                    532: <p>This parameter specifies a uid under which the daemon will run. The daemon
                    533: usually runs as user root, and when this is left unset the user is left
                    534: unchanged. See also the &quot;uid&quot; parameter.</p>
                    535: </dd>
                    536: 
                    537: <dt><code>daemon gid</code></dt><dd>
                    538: <p>This parameter specifies a gid under which the daemon will run. The daemon
                    539: usually runs as group root, and when this is left unset, the group is left
                    540: unchanged. See also the &quot;gid&quot; parameter.</p>
                    541: </dd>
                    542: 
                    543: <dt><code>fake super</code></dt><dd>
                    544: <p>Setting &quot;fake super = yes&quot; for a module causes the daemon side to behave as
                    545: if the <code>--fake-super</code> command-line option had been specified.  This allows
                    546: the full attributes of a file to be stored without having to have the
                    547: daemon actually running as root.</p>
                    548: </dd>
                    549: 
                    550: <dt><code>filter</code></dt><dd>
                    551: <p>The daemon has its own filter chain that determines what files it will let
                    552: the client access.  This chain is not sent to the client and is independent
                    553: of any filters the client may have specified.  Files excluded by the daemon
                    554: filter chain (<code>daemon-excluded</code> files) are treated as non-existent if the
                    555: client tries to pull them, are skipped with an error message if the client
                    556: tries to push them (triggering exit code 23), and are never deleted from
                    557: the module.  You can use daemon filters to prevent clients from downloading
                    558: or tampering with private administrative files, such as files you may add
                    559: to support uid/gid name translations.</p>
                    560: <p>The daemon filter chain is built from the &quot;filter&quot;, &quot;include from&quot;,
                    561: &quot;include&quot;, &quot;exclude from&quot;, and &quot;exclude&quot; parameters, in that order of
                    562: priority.  Anchored patterns are anchored at the root of the module.  To
                    563: prevent access to an entire subtree, for example, &quot;<code>/secret</code>&quot;, you <strong>must</strong>
                    564: exclude everything in the subtree; the easiest way to do this is with a
                    565: triple-star pattern like &quot;<code>/secret/***</code>&quot;.</p>
                    566: <p>The &quot;filter&quot; parameter takes a space-separated list of daemon filter rules,
                    567: though it is smart enough to know not to split a token at an internal space
                    568: in a rule (e.g. &quot;<code>- /foo - /bar</code>&quot; is parsed as two rules).  You may specify
                    569: one or more merge-file rules using the normal syntax.  Only one &quot;filter&quot;
                    570: parameter can apply to a given module in the config file, so put all the
                    571: rules you want in a single parameter.  Note that per-directory merge-file
                    572: rules do not provide as much protection as global rules, but they can be
                    573: used to make <code>--delete</code> work better during a client download operation if
                    574: the per-dir merge files are included in the transfer and the client
                    575: requests that they be used.</p>
                    576: </dd>
                    577: 
                    578: <dt><code>exclude</code></dt><dd>
                    579: <p>This parameter takes a space-separated list of daemon exclude patterns.  As
                    580: with the client <code>--exclude</code> option, patterns can be qualified with &quot;<code>-</code>&quot; or
                    581: &quot;<code>+</code>&quot; to explicitly indicate exclude/include.  Only one &quot;exclude&quot; parameter
                    582: can apply to a given module.  See the &quot;filter&quot; parameter for a description
                    583: of how excluded files affect the daemon.</p>
                    584: </dd>
                    585: 
                    586: <dt><code>include</code></dt><dd>
                    587: <p>Use an &quot;include&quot; to override the effects of the &quot;exclude&quot; parameter.  Only
                    588: one &quot;include&quot; parameter can apply to a given module.  See the &quot;filter&quot;
                    589: parameter for a description of how excluded files affect the daemon.</p>
                    590: </dd>
                    591: 
                    592: <dt><code>exclude from</code></dt><dd>
                    593: <p>This parameter specifies the name of a file on the daemon that contains
                    594: daemon exclude patterns, one per line.  Only one &quot;exclude from&quot; parameter
                    595: can apply to a given module; if you have multiple exclude-from files, you
                    596: can specify them as a merge file in the &quot;filter&quot; parameter.  See the
                    597: &quot;filter&quot; parameter for a description of how excluded files affect the
                    598: daemon.</p>
                    599: </dd>
                    600: 
                    601: <dt><code>include from</code></dt><dd>
                    602: <p>Analogue of &quot;exclude from&quot; for a file of daemon include patterns.  Only one
                    603: &quot;include from&quot; parameter can apply to a given module.  See the &quot;filter&quot;
                    604: parameter for a description of how excluded files affect the daemon.</p>
                    605: </dd>
                    606: 
                    607: <dt><code>incoming chmod</code></dt><dd>
                    608: <p>This parameter allows you to specify a set of comma-separated chmod strings
                    609: that will affect the permissions of all incoming files (files that are
                    610: being received by the daemon).  These changes happen after all other
                    611: permission calculations, and this will even override destination-default
                    612: and/or existing permissions when the client does not specify <code>--perms</code>.
                    613: See the description of the <code>--chmod</code> rsync option and the <strong>chmod</strong>(1)
                    614: manpage for information on the format of this string.</p>
                    615: </dd>
                    616: 
                    617: <dt><code>outgoing chmod</code></dt><dd>
                    618: <p>This parameter allows you to specify a set of comma-separated chmod strings
                    619: that will affect the permissions of all outgoing files (files that are
                    620: being sent out from the daemon).  These changes happen first, making the
                    621: sent permissions appear to be different than those stored in the filesystem
                    622: itself.  For instance, you could disable group write permissions on the
                    623: server while having it appear to be on to the clients.  See the description
                    624: of the <code>--chmod</code> rsync option and the <strong>chmod</strong>(1) manpage for information
                    625: on the format of this string.</p>
                    626: </dd>
                    627: 
                    628: <dt><code>auth users</code></dt><dd>
                    629: <p>This parameter specifies a comma and/or space-separated list of
                    630: authorization rules.  In its simplest form, you list the usernames that
                    631: will be allowed to connect to this module. The usernames do not need to
                    632: exist on the local system. The rules may contain shell wildcard characters
                    633: that will be matched against the username provided by the client for
                    634: authentication. If &quot;auth users&quot; is set then the client will be challenged
                    635: to supply a username and password to connect to the module. A challenge
                    636: response authentication protocol is used for this exchange. The plain text
                    637: usernames and passwords are stored in the file specified by the
                    638: &quot;secrets file&quot; parameter. The default is for all users to be able to
                    639: connect without a password (this is called &quot;anonymous rsync&quot;).</p>
                    640: <p>In addition to username matching, you can specify groupname matching via a
                    641: '@' prefix.  When using groupname matching, the authenticating username
                    642: must be a real user on the system, or it will be assumed to be a member of
                    643: no groups.  For example, specifying &quot;@rsync&quot; will match the authenticating
                    644: user if the named user is a member of the rsync group.</p>
                    645: <p>Finally, options may be specified after a colon (:).  The options allow you
                    646: to &quot;deny&quot; a user or a group, set the access to &quot;ro&quot; (read-only), or set the
                    647: access to &quot;rw&quot; (read/write).  Setting an auth-rule-specific ro/rw setting
                    648: overrides the module's &quot;read only&quot; setting.</p>
                    649: <p>Be sure to put the rules in the order you want them to be matched, because
                    650: the checking stops at the first matching user or group, and that is the
                    651: only auth that is checked.  For example:</p>
                    652: <blockquote>
                    653: <pre><code>auth users = joe:deny @guest:deny admin:rw @rsync:ro susan joe sam
                    654: </code></pre>
                    655: </blockquote>
                    656: <p>In the above rule, user joe will be denied access no matter what.  Any user
                    657: that is in the group &quot;guest&quot; is also denied access.  The user &quot;admin&quot; gets
                    658: access in read/write mode, but only if the admin user is not in group
                    659: &quot;guest&quot; (because the admin user-matching rule would never be reached if the
                    660: user is in group &quot;guest&quot;).  Any other user who is in group &quot;rsync&quot; will get
                    661: read-only access.  Finally, users susan, joe, and sam get the ro/rw setting
                    662: of the module, but only if the user didn't match an earlier group-matching
                    663: rule.</p>
                    664: <p>If you need to specify a user or group name with a space in it, start your
                    665: list with a comma to indicate that the list should only be split on commas
                    666: (though leading and trailing whitespace will also be removed, and empty
                    667: entries are just ignored).  For example:</p>
                    668: <blockquote>
                    669: <pre><code>auth users = , joe:deny, @Some Group:deny, admin:rw, @RO Group:ro
                    670: </code></pre>
                    671: </blockquote>
                    672: <p>See the description of the secrets file for how you can have per-user
                    673: passwords as well as per-group passwords.  It also explains how a user can
                    674: authenticate using their user password or (when applicable) a group
                    675: password, depending on what rule is being authenticated.</p>
                    676: <p>See also the section entitled &quot;USING RSYNC-DAEMON FEATURES VIA A REMOTE
                    677: SHELL CONNECTION&quot; in <strong>rsync</strong>(1) for information on how handle an
                    678: rsyncd.conf-level username that differs from the remote-shell-level
                    679: username when using a remote shell to connect to an rsync daemon.</p>
                    680: </dd>
                    681: 
                    682: <dt><code>secrets file</code></dt><dd>
                    683: <p>This parameter specifies the name of a file that contains the
                    684: username:password and/or @groupname:password pairs used for authenticating
                    685: this module. This file is only consulted if the &quot;auth users&quot; parameter is
                    686: specified.  The file is line-based and contains one name:password pair per
                    687: line.  Any line has a hash (#) as the very first character on the line is
                    688: considered a comment and is skipped.  The passwords can contain any
                    689: characters but be warned that many operating systems limit the length of
                    690: passwords that can be typed at the client end, so you may find that
                    691: passwords longer than 8 characters don't work.</p>
                    692: <p>The use of group-specific lines are only relevant when the module is being
                    693: authorized using a matching &quot;@groupname&quot; rule.  When that happens, the user
                    694: can be authorized via either their &quot;username:password&quot; line or the
                    695: &quot;@groupname:password&quot; line for the group that triggered the authentication.</p>
                    696: <p>It is up to you what kind of password entries you want to include, either
                    697: users, groups, or both.  The use of group rules in &quot;auth users&quot; does not
                    698: require that you specify a group password if you do not want to use shared
                    699: passwords.</p>
                    700: <p>There is no default for the &quot;secrets file&quot; parameter, you must choose a
                    701: name (such as <code>/etc/rsyncd.secrets</code>).  The file must normally not be
                    702: readable by &quot;other&quot;; see &quot;strict modes&quot;.  If the file is not found or is
                    703: rejected, no logins for a &quot;user auth&quot; module will be possible.</p>
                    704: </dd>
                    705: 
                    706: <dt><code>strict modes</code></dt><dd>
                    707: <p>This parameter determines whether or not the permissions on the secrets
                    708: file will be checked.  If &quot;strict modes&quot; is true, then the secrets file
                    709: must not be readable by any user ID other than the one that the rsync
                    710: daemon is running under.  If &quot;strict modes&quot; is false, the check is not
                    711: performed.  The default is true.  This parameter was added to accommodate
                    712: rsync running on the Windows operating system.</p>
                    713: </dd>
                    714: 
                    715: <dt><code>hosts allow</code></dt><dd>
                    716: <p>This parameter allows you to specify a list of comma- and/or
                    717: whitespace-separated patterns that are matched against a connecting
                    718: client's hostname and IP address.  If none of the patterns match, then the
                    719: connection is rejected.</p>
                    720: <p>Each pattern can be in one of six forms:</p>
                    721: <ul>
                    722: <li>a dotted decimal IPv4 address of the form a.b.c.d, or an IPv6 address of
                    723: the form a:b:c::d:e:f. In this case the incoming machine's IP address
                    724: must match exactly.</li>
                    725: <li>an address/mask in the form ipaddr/n where ipaddr is the IP address and n
                    726: is the number of one bits in the netmask.  All IP addresses which match
                    727: the masked IP address will be allowed in.</li>
                    728: <li>an address/mask in the form ipaddr/maskaddr where ipaddr is the IP
                    729: address and maskaddr is the netmask in dotted decimal notation for IPv4,
                    730: or similar for IPv6, e.g. ffff:ffff:ffff:ffff:: instead of /64. All IP
                    731: addresses which match the masked IP address will be allowed in.</li>
                    732: <li>a hostname pattern using wildcards. If the hostname of the connecting IP
                    733: (as determined by a reverse lookup) matches the wildcarded name (using
                    734: the same rules as normal unix filename matching), the client is allowed
                    735: in.  This only works if &quot;reverse lookup&quot; is enabled (the default).</li>
                    736: <li>a hostname. A plain hostname is matched against the reverse DNS of the
                    737: connecting IP (if &quot;reverse lookup&quot; is enabled), and/or the IP of the
                    738: given hostname is matched against the connecting IP (if &quot;forward lookup&quot;
                    739: is enabled, as it is by default).  Any match will be allowed in.</li>
                    740: <li>an '@' followed by a netgroup name, which will match if the reverse DNS
                    741: of the connecting IP is in the specified netgroup.</li>
                    742: </ul>
                    743: <p>Note IPv6 link-local addresses can have a scope in the address
                    744: specification:</p>
                    745: <blockquote>
                    746: <pre><code>fe80::1%link1
                    747: fe80::%link1/64
                    748: fe80::%link1/ffff:ffff:ffff:ffff::
                    749: </code></pre>
                    750: </blockquote>
                    751: <p>You can also combine &quot;hosts allow&quot; with &quot;hosts deny&quot; as a way to add
                    752: exceptions to your deny list.  When both parameters are specified, the
                    753: &quot;hosts allow&quot; parameter is checked first and a match results in the client
                    754: being able to connect.  A non-allowed host is then matched against the
                    755: &quot;hosts deny&quot; list to see if it should be rejected.  A host that does not
                    756: match either list is allowed to connect.</p>
                    757: <p>The default is no &quot;hosts allow&quot; parameter, which means all hosts can
                    758: connect.</p>
                    759: </dd>
                    760: 
                    761: <dt><code>hosts deny</code></dt><dd>
                    762: <p>This parameter allows you to specify a list of comma- and/or
                    763: whitespace-separated patterns that are matched against a connecting clients
                    764: hostname and IP address. If the pattern matches then the connection is
                    765: rejected. See the &quot;hosts allow&quot; parameter for more information.</p>
                    766: <p>The default is no &quot;hosts deny&quot; parameter, which means all hosts can
                    767: connect.</p>
                    768: </dd>
                    769: 
                    770: <dt><code>reverse lookup</code></dt><dd>
                    771: <p>Controls whether the daemon performs a reverse lookup on the client's IP
                    772: address to determine its hostname, which is used for &quot;hosts allow&quot; &amp;
                    773: &quot;hosts deny&quot; checks and the &quot;%h&quot; log escape.  This is enabled by default,
                    774: but you may wish to disable it to save time if you know the lookup will not
                    775: return a useful result, in which case the daemon will use the name
                    776: &quot;UNDETERMINED&quot; instead.</p>
                    777: <p>If this parameter is enabled globally (even by default), rsync performs the
                    778: lookup as soon as a client connects, so disabling it for a module will not
                    779: avoid the lookup.  Thus, you probably want to disable it globally and then
                    780: enable it for modules that need the information.</p>
                    781: </dd>
                    782: 
                    783: <dt><code>forward lookup</code></dt><dd>
                    784: <p>Controls whether the daemon performs a forward lookup on any hostname
                    785: specified in an hosts allow/deny setting.  By default this is enabled,
                    786: allowing the use of an explicit hostname that would not be returned by
                    787: reverse DNS of the connecting IP.</p>
                    788: </dd>
                    789: 
                    790: <dt><code>ignore errors</code></dt><dd>
                    791: <p>This parameter tells rsyncd to ignore I/O errors on the daemon when
                    792: deciding whether to run the delete phase of the transfer. Normally rsync
                    793: skips the <code>--delete</code> step if any I/O errors have occurred in order to
                    794: prevent disastrous deletion due to a temporary resource shortage or other
                    795: I/O error. In some cases this test is counter productive so you can use
                    796: this parameter to turn off this behavior.</p>
                    797: </dd>
                    798: 
                    799: <dt><code>ignore nonreadable</code></dt><dd>
                    800: <p>This tells the rsync daemon to completely ignore files that are not
                    801: readable by the user. This is useful for public archives that may have some
                    802: non-readable files among the directories, and the sysadmin doesn't want
                    803: those files to be seen at all.</p>
                    804: </dd>
                    805: 
                    806: <dt><code>transfer logging</code></dt><dd>
                    807: <p>This parameter enables per-file logging of downloads and uploads in a
                    808: format somewhat similar to that used by ftp daemons.  The daemon always
                    809: logs the transfer at the end, so if a transfer is aborted, no mention will
                    810: be made in the log file.</p>
                    811: <p>If you want to customize the log lines, see the &quot;log format&quot; parameter.</p>
                    812: </dd>
                    813: 
                    814: <dt><code>log format</code></dt><dd>
                    815: <p>This parameter allows you to specify the format used for logging file
                    816: transfers when transfer logging is enabled.  The format is a text string
                    817: containing embedded single-character escape sequences prefixed with a
                    818: percent (%) character.  An optional numeric field width may also be
                    819: specified between the percent and the escape letter (e.g.
                    820: &quot;<code>%-50n %8l %07p</code>&quot;).  In addition, one or more apostrophes may be specified
                    821: prior to a numerical escape to indicate that the numerical value should be
                    822: made more human-readable.  The 3 supported levels are the same as for the
                    823: <code>--human-readable</code> command-line option, though the default is for
                    824: human-readability to be off.  Each added apostrophe increases the level
                    825: (e.g. &quot;<code>%''l %'b %f</code>&quot;).</p>
                    826: <p>The default log format is &quot;<code>%o %h [%a] %m (%u) %f %l</code>&quot;, and a &quot;<code>%t [%p]</code>&quot;
                    827: is always prefixed when using the &quot;log file&quot; parameter.  (A perl script
                    828: that will summarize this default log format is included in the rsync source
                    829: code distribution in the &quot;support&quot; subdirectory: rsyncstats.)</p>
                    830: <p>The single-character escapes that are understood are as follows:</p>
                    831: <ul>
                    832: <li>%a the remote IP address (only available for a daemon)</li>
                    833: <li>%b the number of bytes actually transferred</li>
                    834: <li>%B the permission bits of the file (e.g. rwxrwxrwt)</li>
                    835: <li>%c the total size of the block checksums received for the basis file
                    836: (only when sending)</li>
                    837: <li>%C the full-file checksum if it is known for the file. For older rsync
                    838: protocols/versions, the checksum was salted, and is thus not a useful
                    839: value (and is not displayed when that is the case). For the checksum to
                    840: output for a file, either the <code>--checksum</code> option must be in-effect or
                    841: the file must have been transferred without a salted checksum being used.
                    842: See the <code>--checksum-choice</code> option for a way to choose the algorithm.</li>
                    843: <li>%f the filename (long form on sender; no trailing &quot;/&quot;)</li>
                    844: <li>%G the gid of the file (decimal) or &quot;DEFAULT&quot;</li>
                    845: <li>%h the remote host name (only available for a daemon)</li>
                    846: <li>%i an itemized list of what is being updated</li>
                    847: <li>%l the length of the file in bytes</li>
                    848: <li>%L the string &quot;<code>-&gt; SYMLINK</code>&quot;, &quot;<code>=&gt; HARDLINK</code>&quot;, or &quot;&quot; (where <code>SYMLINK</code>
                    849: or <code>HARDLINK</code> is a filename)</li>
                    850: <li>%m the module name</li>
                    851: <li>%M the last-modified time of the file</li>
                    852: <li>%n the filename (short form; trailing &quot;/&quot; on dir)</li>
                    853: <li>%o the operation, which is &quot;send&quot;, &quot;recv&quot;, or &quot;del.&quot; (the latter includes
                    854: the trailing period)</li>
                    855: <li>%p the process ID of this rsync session</li>
                    856: <li>%P the module path</li>
                    857: <li>%t the current date time</li>
                    858: <li>%u the authenticated username or an empty string</li>
                    859: <li>%U the uid of the file (decimal)</li>
                    860: </ul>
                    861: <p>For a list of what the characters mean that are output by &quot;%i&quot;, see the
                    862: <code>--itemize-changes</code> option in the rsync manpage.</p>
                    863: <p>Note that some of the logged output changes when talking with older rsync
                    864: versions.  For instance, deleted files were only output as verbose messages
                    865: prior to rsync 2.6.4.</p>
                    866: </dd>
                    867: 
                    868: <dt><code>timeout</code></dt><dd>
                    869: <p>This parameter allows you to override the clients choice for I/O timeout
                    870: for this module. Using this parameter you can ensure that rsync won't wait
                    871: on a dead client forever. The timeout is specified in seconds. A value of
                    872: zero means no timeout and is the default. A good choice for anonymous rsync
                    873: daemons may be 600 (giving a 10 minute timeout).</p>
                    874: </dd>
                    875: 
                    876: <dt><code>refuse options</code></dt><dd>
                    877: <p>This parameter allows you to specify a space-separated list of rsync
                    878: command-line options that will be refused by your rsync daemon.  You may
                    879: specify the full option name, its one-letter abbreviation, or a wild-card
                    880: string that matches multiple options. Beginning in 3.2.0, you can also
                    881: negate a match term by starting it with a &quot;!&quot;.</p>
                    882: <p>When an option is refused, the daemon prints an error message and exits.</p>
                    883: <p>For example, this would refuse <code>--checksum</code> (<code>-c</code>) and all the various
                    884: delete options:</p>
                    885: <blockquote>
                    886: <pre><code>refuse options = c delete
                    887: </code></pre>
                    888: </blockquote>
                    889: <p>The reason the above refuses all delete options is that the options imply
                    890: <code>--delete</code>, and implied options are refused just like explicit options.</p>
                    891: <p>The use of a negated match allows you to fine-tune your refusals after a
                    892: wild-card, such as this:</p>
                    893: <blockquote>
                    894: <pre><code>refuse options = delete-* !delete-during
                    895: </code></pre>
                    896: </blockquote>
                    897: <p>Negated matching can also turn your list of refused options into a list of
                    898: accepted options. To do this, begin the list with a &quot;<code>*</code>&quot; (to refuse all
                    899: options) and then specify one or more negated matches to accept.  For
                    900: example:</p>
                    901: <blockquote>
                    902: <pre><code>refuse options = * !a !v !compress*
                    903: </code></pre>
                    904: </blockquote>
                    905: <p>Don't worry that the &quot;<code>*</code>&quot; will refuse certain vital options such as
                    906: <code>--dry-run</code>, <code>--server</code>, <code>--no-iconv</code>, <code>--protect-args</code>, etc. These
                    907: important options are not matched by wild-card, so they must be overridden
                    908: by their exact name.  For instance, if you're forcing iconv transfers you
                    909: could use something like this:</p>
                    910: <blockquote>
                    911: <pre><code>refuse options = * no-iconv !a !v
                    912: </code></pre>
                    913: </blockquote>
                    914: <p>As an additional aid (beginning in 3.2.0), refusing (or &quot;<code>!refusing</code>&quot;) the
                    915: &quot;a&quot; or &quot;archive&quot;  option also affects all the options that the <code>--archive</code>
                    916: option implies (<code>-rdlptgoD</code>), but only if the option  is matched explicitly
                    917: (not using a wildcard). If you want to do something tricky, you can use
                    918: &quot;<code>archive*</code>&quot; to avoid this side-effect, but keep in mind that no normal
                    919: rsync client ever sends the actual archive option to the server.</p>
                    920: <p>As an additional safety feature, the refusal of &quot;delete&quot; also refuses
                    921: <code>remove-source-files</code> when the daemon is the sender; if you want the latter
                    922: without the former, instead refuse &quot;<code>delete-*</code>&quot; as that refuses all the
                    923: delete modes without affecting <code>--remove-source-files</code>. (Keep in mind that
                    924: the client's <code>--delete</code> option typically results in <code>--delete-during</code>.)</p>
                    925: <p>When un-refusing delete options, you should either specify &quot;<code>!delete*</code>&quot; (to
                    926: accept all delete options) or specify a limited set that includes &quot;delete&quot;,
                    927: such as:</p>
                    928: <blockquote>
                    929: <pre><code>refuse options = * !a !delete !delete-during
                    930: </code></pre>
                    931: </blockquote>
                    932: <p>... whereas this accepts any delete option except <code>--delete-after</code>:</p>
                    933: <blockquote>
                    934: <pre><code>refuse options = * !a !delete* delete-after
                    935: </code></pre>
                    936: </blockquote>
                    937: <p>A note on refusing &quot;compress&quot;&nbsp;-&#8288;-&#8288; it is better to set the &quot;dont compress&quot;
                    938: daemon parameter to &quot;<code>*</code>&quot; because that disables compression silently
                    939: instead of returning an error that forces the client to remove the <code>-z</code>
                    940: option.</p>
                    941: <p>If you are un-refusing the compress option, you probably want to match
                    942: &quot;<code>!compress*</code>&quot; so that you also accept the <code>--compress-level</code> option.</p>
                    943: <p>Note that the &quot;copy-devices&quot; &amp; &quot;write-devices&quot; options are refused by
                    944: default, but they can be explicitly accepted with &quot;<code>!copy-devices</code>&quot; and/or
                    945: &quot;<code>!write-devices</code>&quot;.  The options &quot;log-file&quot; and &quot;log-file-format&quot; are
                    946: forcibly refused and cannot be accepted.</p>
                    947: <p>Here are all the options that are not matched by wild-cards:</p>
                    948: <ul>
                    949: <li><code>--server</code>: Required for rsync to even work.</li>
                    950: <li><code>--rsh</code>, <code>-e</code>: Required to convey compatibility flags to the server.</li>
                    951: <li><code>--out-format</code>: This is required to convey output behavior to a remote
                    952: receiver.  While rsync passes the older alias <code>--log-format</code> for
                    953: compatibility reasons, this options should not be confused with
                    954: <code>--log-file-format</code>.</li>
                    955: <li><code>--sender</code>: Use &quot;write only&quot; parameter instead of refusing this.</li>
                    956: <li><code>--dry-run</code>, <code>-n</code>: Who would want to disable this?</li>
                    957: <li><code>--protect-args</code>, <code>-s</code>: This actually makes transfers safer.</li>
                    958: <li><code>--from0</code>, <code>-0</code>: Makes it easier to accept/refuse <code>--files-from</code> without
                    959: affecting this helpful modifier.</li>
                    960: <li><code>--iconv</code>: This is auto-disabled based on &quot;charset&quot; parameter.</li>
                    961: <li><code>--no-iconv</code>: Most transfers use this option.</li>
                    962: <li><code>--checksum-seed</code>: Is a fairly rare, safe option.</li>
                    963: <li><code>--write-devices</code>: Is non-wild but also auto-disabled.</li>
                    964: </ul>
                    965: </dd>
                    966: 
                    967: <dt><code>dont compress</code></dt><dd>
                    968: <p>This parameter allows you to select filenames based on wildcard patterns
                    969: that should not be compressed when pulling files from the daemon (no
                    970: analogous parameter exists to govern the pushing of files to a daemon).
                    971: Compression can be expensive in terms of CPU usage, so it is usually good
                    972: to not try to compress files that won't compress well, such as already
                    973: compressed files.</p>
                    974: <p>The &quot;dont compress&quot; parameter takes a space-separated list of
                    975: case-insensitive wildcard patterns. Any source filename matching one of the
                    976: patterns will be compressed as little as possible during the transfer.  If
                    977: the compression algorithm has an &quot;off&quot; level (such as zlib/zlibx) then no
                    978: compression occurs for those files.  Other algorithms have the level
                    979: minimized to reduces the CPU usage as much as possible.</p>
                    980: <p>See the <code>--skip-compress</code> parameter in the <strong>rsync</strong>(1) manpage for the
                    981: list of file suffixes that are not compressed by default.  Specifying a
                    982: value for the &quot;dont compress&quot; parameter changes the default when the daemon
                    983: is the sender.</p>
                    984: </dd>
                    985: 
                    986: <dt><code>early exec</code>, <code>pre-xfer exec</code>, <code>post-xfer exec</code></dt><dd>
                    987: <p>You may specify a command to be run in the early stages of the connection,
                    988: or right before and/or after the transfer.  If the <code>early exec</code> or
                    989: <code>pre-xfer exec</code> command returns an error code, the transfer is aborted
                    990: before it begins.  Any output from the <code>pre-xfer exec</code> command on stdout
                    991: (up to several KB) will be displayed to the user when aborting, but is
                    992: <u>not</u> displayed if the script returns success.  The other programs cannot
                    993: send any text to the user.  All output except for the <code>pre-xfer exec</code>
                    994: stdout goes to the corresponding daemon's stdout/stderr, which is typically
                    995: discarded.  See the <code>--no-detatch</code> option for a way to see the daemon's
                    996: output, which can assist with debugging.</p>
                    997: <p>Note that the <code>early exec</code> command runs before any part of the transfer
                    998: request is known except for the module name.  This helper script can be
                    999: used to setup a disk mount or decrypt some data into a module dir, but you
                   1000: may need to use <code>lock file</code> and <code>max connections</code> to avoid concurrency
                   1001: issues.  If the client rsync specified the <code>--early-input=FILE</code> option, it
                   1002: can send up to about 5K of data to the stdin of the early script.  The
                   1003: stdin will otherwise be empty.</p>
                   1004: <p>Note that the <code>post-xfer exec</code> command is still run even if one of the
                   1005: other scripts returns an error code. The <code>pre-xfer exec</code> command will <u>not</u>
                   1006: be run, however, if the <code>early exec</code> command fails.</p>
                   1007: <p>The following environment variables will be set, though some are specific
                   1008: to the pre-xfer or the post-xfer environment:</p>
                   1009: <ul>
                   1010: <li><code>RSYNC_MODULE_NAME</code>: The name of the module being accessed.</li>
                   1011: <li><code>RSYNC_MODULE_PATH</code>: The path configured for the module.</li>
                   1012: <li><code>RSYNC_HOST_ADDR</code>: The accessing host's IP address.</li>
                   1013: <li><code>RSYNC_HOST_NAME</code>: The accessing host's name.</li>
                   1014: <li><code>RSYNC_USER_NAME</code>: The accessing user's name (empty if no user).</li>
                   1015: <li><code>RSYNC_PID</code>: A unique number for this transfer.</li>
                   1016: <li><code>RSYNC_REQUEST</code>: (pre-xfer only) The module/path info specified by the
                   1017: user.  Note that the user can specify multiple source files, so the
                   1018: request can be something like &quot;mod/path1 mod/path2&quot;, etc.</li>
                   1019: <li><code>RSYNC_ARG#</code>: (pre-xfer only) The pre-request arguments are set in these
                   1020: numbered values. RSYNC_ARG0 is always &quot;rsyncd&quot;, followed by the options
                   1021: that were used in RSYNC_ARG1, and so on.  There will be a value of &quot;.&quot;
                   1022: indicating that the options are done and the path args are beginning&nbsp;-&#8288;-&#8288;
                   1023: these contain similar information to RSYNC_REQUEST, but with values
                   1024: separated and the module name stripped off.</li>
                   1025: <li><code>RSYNC_EXIT_STATUS</code>: (post-xfer only) the server side's exit value.  This
                   1026: will be 0 for a successful run, a positive value for an error that the
                   1027: server generated, or a -&#8288;1 if rsync failed to exit properly.  Note that an
                   1028: error that occurs on the client side does not currently get sent to the
                   1029: server side, so this is not the final exit status for the whole transfer.</li>
                   1030: <li><code>RSYNC_RAW_STATUS</code>: (post-xfer only) the raw exit value from
                   1031: <strong>waitpid()</strong>.</li>
                   1032: </ul>
                   1033: <p>Even though the commands can be associated with a particular module, they
                   1034: are run using the permissions of the user that started the daemon (not the
                   1035: module's uid/gid setting) without any chroot restrictions.</p>
                   1036: <p>These settings honor 2 environment variables: use RSYNC_SHELL to set a
                   1037: shell to use when running the command (which otherwise uses your
                   1038: <strong>system()</strong> call's default shell), and use RSYNC_NO_XFER_EXEC to disable
                   1039: both options completely.</p>
                   1040: </dd>
                   1041: </dl>
                   1042: <h1>CONFIG DIRECTIVES</h1>
                   1043: <p>There are currently two config directives available that allow a config file to
                   1044: incorporate the contents of other files:  <code>&amp;include</code> and <code>&amp;merge</code>.  Both allow
                   1045: a reference to either a file or a directory.  They differ in how segregated the
                   1046: file's contents are considered to be.</p>
                   1047: <p>The <code>&amp;include</code> directive treats each file as more distinct, with each one
                   1048: inheriting the defaults of the parent file, starting the parameter parsing as
                   1049: globals/defaults, and leaving the defaults unchanged for the parsing of the
                   1050: rest of the parent file.</p>
                   1051: <p>The <code>&amp;merge</code> directive, on the other hand, treats the file's contents as if it
                   1052: were simply inserted in place of the directive, and thus it can set parameters
                   1053: in a module started in another file, can affect the defaults for other files,
                   1054: etc.</p>
                   1055: <p>When an <code>&amp;include</code> or <code>&amp;merge</code> directive refers to a directory, it will read in
                   1056: all the <code>*.conf</code> or <code>*.inc</code> files (respectively) that are contained inside that
                   1057: directory (without any recursive scanning), with the files sorted into alpha
                   1058: order.  So, if you have a directory named &quot;rsyncd.d&quot; with the files &quot;foo.conf&quot;,
                   1059: &quot;bar.conf&quot;, and &quot;baz.conf&quot; inside it, this directive:</p>
                   1060: <blockquote>
                   1061: <pre><code>&amp;include /path/rsyncd.d
                   1062: </code></pre>
                   1063: </blockquote>
                   1064: <p>would be the same as this set of directives:</p>
                   1065: <blockquote>
                   1066: <pre><code>&amp;include /path/rsyncd.d/bar.conf
                   1067: &amp;include /path/rsyncd.d/baz.conf
                   1068: &amp;include /path/rsyncd.d/foo.conf
                   1069: </code></pre>
                   1070: </blockquote>
                   1071: <p>except that it adjusts as files are added and removed from the directory.</p>
                   1072: <p>The advantage of the <code>&amp;include</code> directive is that you can define one or more
                   1073: modules in a separate file without worrying about unintended side-effects
                   1074: between the self-contained module files.</p>
                   1075: <p>The advantage of the <code>&amp;merge</code> directive is that you can load config snippets
                   1076: that can be included into multiple module definitions, and you can also set
                   1077: global values that will affect connections (such as <code>motd file</code>), or globals
                   1078: that will affect other include files.</p>
                   1079: <p>For example, this is a useful /etc/rsyncd.conf file:</p>
                   1080: <blockquote>
                   1081: <pre><code>port = 873
                   1082: log file = /var/log/rsync.log
                   1083: pid file = /var/lock/rsync.lock
                   1084: 
                   1085: &amp;merge /etc/rsyncd.d
                   1086: &amp;include /etc/rsyncd.d
                   1087: </code></pre>
                   1088: </blockquote>
                   1089: <p>This would merge any <code>/etc/rsyncd.d/*.inc</code> files (for global values that should
                   1090: stay in effect), and then include any <code>/etc/rsyncd.d/*.conf</code> files (defining
                   1091: modules without any global-value cross-talk).</p>
                   1092: <h1>AUTHENTICATION STRENGTH</h1>
                   1093: <p>The authentication protocol used in rsync is a 128 bit MD4 based challenge
                   1094: response system. This is fairly weak protection, though (with at least one
                   1095: brute-force hash-finding algorithm publicly available), so if you want really
                   1096: top-quality security, then I recommend that you run rsync over ssh.  (Yes, a
                   1097: future version of rsync will switch over to a stronger hashing method.)</p>
                   1098: <p>Also note that the rsync daemon protocol does not currently provide any
                   1099: encryption of the data that is transferred over the connection. Only
                   1100: authentication is provided. Use ssh as the transport if you want encryption.</p>
                   1101: <p>You can also make use of SSL/TLS encryption if you put rsync behind an
                   1102: SSL proxy.</p>
                   1103: <h1>SSL/TLS Daemon Setup</h1>
                   1104: <p>When setting up an rsync daemon for access via SSL/TLS, you will need to
                   1105: configure a proxy (such as haproxy or nginx) as the front-end that handles the
                   1106: encryption.</p>
                   1107: <ul>
                   1108: <li>You should limit the access to the backend-rsyncd port to only allow the
                   1109: proxy to connect.  If it is on the same host as the proxy, then configuring
                   1110: it to only listen on localhost is a good idea.</li>
                   1111: <li>You should consider turning on the <code>proxy protocol</code> parameter if your proxy
                   1112: supports sending that information.  The examples below assume that this is
                   1113: enabled.</li>
                   1114: </ul>
                   1115: <p>An example haproxy setup is as follows:</p>
                   1116: <blockquote>
                   1117: <pre><code>frontend fe_rsync-ssl
                   1118:    bind :::874 ssl crt /etc/letsencrypt/example.com/combined.pem
                   1119:    mode tcp
                   1120:    use_backend be_rsync
                   1121: 
                   1122: backend be_rsync
                   1123:    mode tcp
                   1124:    server local-rsync 127.0.0.1:873 check send-proxy
                   1125: </code></pre>
                   1126: </blockquote>
                   1127: <p>An example nginx proxy setup is as follows:</p>
                   1128: <blockquote>
                   1129: <pre><code>stream {
                   1130:    server {
                   1131:        listen 874 ssl;
                   1132:        listen [::]:874 ssl;
                   1133: 
                   1134:        ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
                   1135:        ssl_certificate_key /etc/letsencrypt/example.com/privkey.pem;
                   1136: 
                   1137:        proxy_pass localhost:873;
                   1138:        proxy_protocol on; # Requires &quot;proxy protocol = true&quot;
                   1139:        proxy_timeout 1m;
                   1140:        proxy_connect_timeout 5s;
                   1141:    }
                   1142: }
                   1143: </code></pre>
                   1144: </blockquote>
                   1145: <h1>EXAMPLES</h1>
                   1146: <p>A simple rsyncd.conf file that allow anonymous rsync to a ftp area at
                   1147: <code>/home/ftp</code> would be:</p>
                   1148: <blockquote>
                   1149: <pre><code>[ftp]
                   1150:         path = /home/ftp
                   1151:         comment = ftp export area
                   1152: </code></pre>
                   1153: </blockquote>
                   1154: <p>A more sophisticated example would be:</p>
                   1155: <blockquote>
                   1156: <pre><code>uid = nobody
                   1157: gid = nobody
                   1158: use chroot = yes
                   1159: max connections = 4
                   1160: syslog facility = local5
                   1161: pid file = /var/run/rsyncd.pid
                   1162: slp refresh = 3600
                   1163: 
                   1164: [ftp]
                   1165:         path = /var/ftp/./pub
                   1166:         comment = whole ftp area (approx 6.1 GB)
                   1167: 
                   1168: [sambaftp]
                   1169:         path = /var/ftp/./pub/samba
                   1170:         comment = Samba ftp area (approx 300 MB)
                   1171: 
                   1172: [rsyncftp]
                   1173:         path = /var/ftp/./pub/rsync
                   1174:         comment = rsync ftp area (approx 6 MB)
                   1175: 
                   1176: [sambawww]
                   1177:         path = /public_html/samba
                   1178:         comment = Samba WWW pages (approx 240 MB)
                   1179: 
                   1180: [cvs]
                   1181:         path = /data/cvs
                   1182:         comment = CVS repository (requires authentication)
                   1183:         auth users = tridge, susan
                   1184:         secrets file = /etc/rsyncd.secrets
                   1185: </code></pre>
                   1186: </blockquote>
                   1187: <p>The /etc/rsyncd.secrets file would look something like this:</p>
                   1188: <blockquote>
                   1189: <pre><code>tridge:mypass
                   1190: susan:herpass
                   1191: </code></pre>
                   1192: </blockquote>
                   1193: <h1>FILES</h1>
                   1194: <p>/etc/rsyncd.conf or rsyncd.conf</p>
                   1195: <h1>SEE ALSO</h1>
                   1196: <p><strong>rsync</strong>(1), <strong>rsync-ssl</strong>(1)</p>
                   1197: <h1>BUGS</h1>
                   1198: <p>Please report bugs! The rsync bug tracking system is online at
                   1199: <a href="https://rsync.samba.org/">https://rsync.samba.org/</a>.</p>
                   1200: <h1>VERSION</h1>
                   1201: <p>This man page is current for version 3.2.3 of rsync.</p>
                   1202: <h1>CREDITS</h1>
                   1203: <p>rsync is distributed under the GNU General Public License.  See the file
                   1204: COPYING for details.</p>
                   1205: <p>The primary ftp site for rsync is <a href="ftp://rsync.samba.org/pub/rsync">ftp://rsync.samba.org/pub/rsync</a></p>
                   1206: <p>A web site is available at <a href="https://rsync.samba.org/">https://rsync.samba.org/</a>.</p>
                   1207: <p>We would be delighted to hear from you if you like this program.</p>
                   1208: <p>This program uses the zlib compression library written by Jean-loup Gailly and
                   1209: Mark Adler.</p>
                   1210: <h1>THANKS</h1>
                   1211: <p>Thanks to Warren Stanley for his original idea and patch for the rsync daemon.
                   1212: Thanks to Karsten Thygesen for his many suggestions and documentation!</p>
                   1213: <h1>AUTHOR</h1>
                   1214: <p>rsync was written by Andrew Tridgell and Paul Mackerras.  Many people have
                   1215: later contributed to it.</p>
                   1216: <p>Mailing lists for support and development are available at
                   1217: <a href="https://lists.samba.org/">https://lists.samba.org/</a>.</p>
                   1218: <div style="float: right"><p><i>06 Aug 2020</i></p></div>
                   1219: </body></html>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>