Write-only option

Dave Dykstra dwd at bell-labs.com
Tue Feb 26 05:10:30 EST 2002


It seems to me that there must be a more fundamental problem with the
security model of that backup system if users had the ability to read each
other's files.  Even with a "write only" option, they can overwrite each
other's files, right?  What if somebody overwrite a crucial file in
somebody else's area, and that file gets restored from backup?  I think a
better solution would be to ensure that only the root user has any access
to the backup area, probably by using a "secrets file" and a --password-file
that's readable only by root, or better yet use ssh and public/private key
pair.

- Dave Dykstra


On Sat, Feb 23, 2002 at 02:14:57PM +0100, Jurij Smakov wrote:
> Hi!
> 
> I am doing backups from a number of machines to an rsync server. For some
> time I was trying to come up with a solution, which would prevent users
> from peeking at each other's files, which are backed up. Finally, I've
> hacked rsync, introducing a new option "write only" for rsyncd.conf. When
> set to true, this option forbids the transfers from server to the client,
> thus solving my problems. Below is a patch against rsync-2.5.2 which
> implements those changes. Hopefully, somebody else will find it useful. I
> apologize, if that's the wrong list to post such stuff.
> 
> --Cut here----------------------------------------------------------------
> diff -urN rsync-2.5.2.orig/loadparm.c rsync-2.5.2/loadparm.c
> --- rsync-2.5.2.orig/loadparm.c	Sun Dec  2 09:16:15 2001
> +++ rsync-2.5.2/loadparm.c	Sat Feb 23 13:48:12 2002
> @@ -117,6 +117,7 @@
>  	char *comment;
>  	char *lock_file;
>  	BOOL read_only;
> +	BOOL write_only;
>  	BOOL list;
>  	BOOL use_chroot;
>  	BOOL transfer_logging;
> @@ -149,6 +150,7 @@
>  	NULL,    /* comment */
>  	DEFAULT_LOCK_FILE,    /* lock file */
>  	True,    /* read only */
> +	False,   /* write only */
>  	True,    /* list */
>  	True,    /* use chroot */
>  	False,   /* transfer logging */
> @@ -265,6 +267,7 @@
>    {"lock file",        P_STRING,  P_LOCAL,  &sDefault.lock_file,   NULL,   0},
>    {"path",             P_STRING,  P_LOCAL,  &sDefault.path,        NULL,   0},
>    {"read only",        P_BOOL,    P_LOCAL,  &sDefault.read_only,   NULL,   0},
> +  {"write only",       P_BOOL,    P_LOCAL,  &sDefault.write_only,  NULL,   0},
>    {"list",             P_BOOL,    P_LOCAL,  &sDefault.list,        NULL,   0},
>    {"use chroot",       P_BOOL,    P_LOCAL,  &sDefault.use_chroot,  NULL,   0},
>    {"ignore nonreadable",P_BOOL,   P_LOCAL,  &sDefault.ignore_nonreadable,  NULL,   0},
> @@ -342,6 +345,7 @@
>  FN_LOCAL_STRING(lp_path, path)
>  FN_LOCAL_STRING(lp_lock_file, lock_file)
>  FN_LOCAL_BOOL(lp_read_only, read_only)
> +FN_LOCAL_BOOL(lp_write_only, write_only)
>  FN_LOCAL_BOOL(lp_list, list)
>  FN_LOCAL_BOOL(lp_use_chroot, use_chroot)
>  FN_LOCAL_BOOL(lp_transfer_logging, transfer_logging)
> diff -urN rsync-2.5.2.orig/main.c rsync-2.5.2/main.c
> --- rsync-2.5.2.orig/main.c	Fri Jan 25 11:07:41 2002
> +++ rsync-2.5.2/main.c	Sat Feb 23 13:49:38 2002
> @@ -306,10 +306,19 @@
>  	extern int relative_paths;
>  	extern int recurse;
>  	extern int remote_version;
> +	extern int am_daemon;
> +	extern int module_id;
> +	extern int am_sender;
> 
>  	if (verbose > 2)
>  		rprintf(FINFO,"server_sender starting pid=%d\n",(int)getpid());
> 
> +	if (am_daemon && lp_write_only(module_id) && am_sender) {
> +		rprintf(FERROR,"ERROR: module is write only\n");
> +		exit_cleanup(RERR_SYNTAX);
> +		return;
> +	}
> +
>  	if (!relative_paths && !push_dir(dir, 0)) {
>  		rprintf(FERROR,"push_dir %s: %s (3)\n",dir,strerror(errno));
>  		exit_cleanup(RERR_FILESELECT);
> diff -urN rsync-2.5.2.orig/proto.h rsync-2.5.2/proto.h
> --- rsync-2.5.2.orig/proto.h	Sat Jan 26 00:07:33 2002
> +++ rsync-2.5.2/proto.h	Sat Feb 23 13:48:12 2002
> @@ -125,6 +125,7 @@
>  char *lp_path(int );
>  char *lp_lock_file(int );
>  BOOL lp_read_only(int );
> +BOOL lp_write_only(int );
>  BOOL lp_list(int );
>  BOOL lp_use_chroot(int );
>  BOOL lp_transfer_logging(int );
> --Cut here----------------------------------------------------------------
> 
> Best regards,
> 
> Jurij.
> 
> 
> 
> -- 
> To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync
> Before posting, read: http://www.tuxedo.org/~esr/faqs/smart-questions.html




More information about the rsync mailing list