Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rrsync(1)			  User Commands 		       rrsync(1)

NAME
     rrsync - a script to setup restricted rsync users via ssh logins

SYNOPSIS
     rrsync [-ro|-rw] [-munge] [-no-del] [-no-lock] [-no-overwrite]  DIR

     The  single non-option argument specifies the restricted DIR to use. It can
     be relative to the user's home directory or an absolute path.

     The online version of this manpage (that includes cross-linking of  topics)
     is available at https://download.samba.org/pub/rsync/rrsync.1.

DESCRIPTION
     A	user's ssh login can be restricted to only allow the running of an rsync
     transfer in one of two easy ways:

     o	    forcing the running of the rrsync script

     o	    forcing the running of an rsync daemon-over-ssh command.

     Both of these setups use a feature of ssh	that  allows  a  command  to  be
     forced to run instead of an interactive shell.  However, if the user's home
     shell is bash, please see BASH SECURITY ISSUE for a potential issue.

     To  use  the rrsync script, edit the user's ~/.ssh/authorized_keys file and
     add a prefix like one of the following (followed by a space)  in  front  of
     each ssh-key line that should be restricted:

	 command="rrsync DIR"
	 command="rrsync -ro DIR"
	 command="rrsync -munge -no-del DIR"

     Then,  ensure  that the rrsync script has your desired option restrictions.
     You may want to copy the script to a local bin dir with a	unique	name  if
     you want to have multiple configurations. One or more rrsync options can be
     specified prior to the DIR if you want to further restrict the transfer.

     To  use  an rsync daemon setup, edit the user's ~/.ssh/authorized_keys file
     and add a prefix like one of the following (followed by a space)  in  front
     of each ssh-key line that should be restricted:

	 command="rsync --server --daemon ."
	 command="rsync --server --daemon --config=/PATH/TO/rsyncd.conf ."

     Then,  ensure  that the rsyncd.conf file is created with one or more module
     names with the appropriate path and option restrictions.  If rsync's --con-
     fig  option  is  omitted,	it   defaults	to   ~/rsyncd.conf.    See   the
     rsyncd.conf(5) manpage for details of how to configure an rsync daemon.

     When using rrsync, there can be just one restricted dir per authorized key.
     A	daemon setup, on the other hand, allows multiple module names inside the
     config file, each one with its own path setting.

     The remainder of this manpage is dedicated to using the rrsync script.

OPTIONS
     -ro    Allow only reading from the DIR. Implies -no-del and -no-lock.

     -wo    Allow only writing to the DIR.

     -munge Enable rsync's --munge-links on the server side.

     -no-delDisable rsync's --delete* and --remove* options.

     -no-lock
	    Avoid the single-run (per-user) lock check.  Useful with -munge.

     -no-overwrite
	    Enforce --ignore-existing on the server. Prevents overwriting exist-
	    ing files when the server is the receiver.

     -help, -h
	    Output this help message and exit.

SECURITY RESTRICTIONS
     The rrsync script validates the path arguments it is sent	to  try  to  re-
     strict them to staying within the specified DIR.

     The  rrsync script rejects rsync's --copy-links option (by default) so that
     a copy cannot dereference a symlink within the DIR to get to a file outside
     the DIR.

     The rrsync script rejects rsync's --protect-args  (-s)  option  because  it
     would  allow  options  to be sent to the server-side that the script cannot
     check.  If you want to support --protect-args, use a daemon-over-ssh setup.

     The rrsync script accepts just a subset of rsync's options  that  the  real
     rsync  uses  when	running the server command.  A few extra convenience op-
     tions are also included to help it to interact  with  BackupPC  and  accept
     some convenient user overrides.

     The  script (or a copy of it) can be manually edited if you want it to cus-
     tomize the option handling.

BASH SECURITY ISSUE
     If your users have bash set as their home shell, bash may try to be  overly
     helpful and ensure that the user's login bashrc files are run prior to exe-
     cuting  the  forced command.  This can be a problem if the user can somehow
     update their home bashrc files, perhaps via the restricted copy,  a  shared
     home directory, or something similar.

     One simple way to avoid the issue is to switch the user to a simpler shell,
     such  as dash.  When choosing the new home shell, make sure that you're not
     choosing bash in disguise, as it is unclear if it avoids the  security  is-
     sue.

     Another  potential fix is to ensure that the user's home directory is not a
     shared mount and that they have no means of copying files outside of  their
     restricted directories.  This may require you to force the enabling of sym-
     link munging on the server side.

     A	future	version  of  openssh may have a change to the handling of forced
     commands that allows it to avoid using the user's home shell.

EXAMPLES
     The ~/.ssh/authorized_keys file might have lines in it like this:

	 command="rrsync client/logs" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAzG...
	 command="rrsync -ro results" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAmk...

FILES
     ~/.ssh/authorized_keys

SEE ALSO
     rsync(1), rsyncd.conf(5)

VERSION
     This manpage is current for version 3.3.0 of rsync.

CREDITS
     rsync is distributed under the GNU General Public License.   See  the  file
     COPYING for details.

     An  rsync	web site is available at https://rsync.samba.org/ and its github
     project is https://github.com/WayneD/rsync.

AUTHOR
     The original rrsync perl script was written by Joe Smith.	Many people have
     later contributed to it.  The python version was created by Wayne Davison.

rrsync from rsync 3.3.0 	   6 Apr 2024			       rrsync(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rrsync&manpath=FreeBSD+14.2-RELEASE+and+Ports>

home | help