File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / rsyncd.conf.5.html
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 00:32:36 2021 UTC (3 years, 3 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_2_3, HEAD
rsync 3.2.3

    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>