HOW TO: Install the rsync daemon on Mac OS X

Taken originally from here

Before we start anything here, I’m going to give you a warning.

rsync can make a real mess of Mac OS files.

There, I said it. It wasn’t designed to handle resource forks or packages or the Mac’s icon storing arrangements. If you really need that, there’s another product called RsyncX which can do the job - but I’m not dealing with that app this time.

What is rsync?

The man page describes it as a “faster, flexible replacement for rcp”. Essentially, it’s an app used for copying files either locally, or to other hosts. It can synchronize directories, or individual file, and can maintain file permissions and owners along the way. If you’re a UNIX geek, it’s for you.

I’m not going to go into the details of exactly what it can do, and how it work - rather, I’m going to go through the process of running the rsync daemon on your machine. This will allow you to access your rsync “shares” from any other machine on your network at any time.

Let’s begin.

1. First thing you want to do, is make sure you are an administrator on your mac. There’s not much point continuing if you’re not. You may need to use sudo to create some of the files below.

2. Open up Terminal and cd to /Library/LaunchDaemons
Here we’ll create a service definition which will allow the daemon to start (through launchd).

3. Download this file and copy it into the directory: rsync.plist
(e.g. cp ~/Downloads/rsync.plist)

4. Check the directory and make sure the owner of the file is root, the group is wheel, and the permissions are rw-r--r--. Note: If the permissions are not correct, the daemon will not load. You can check if launchd is loading the module correctly by running: sudo launchctl load /Library/LaunchDaemons/rsync.plist

5. cd to /etc

6. Create a new file called rsyncd.conf
Here we create definitions for the various “shares” the rsync daemon will host.

[root]
   path = /
   hosts allow = 192.168.1.1
   uid = root
   gid = wheel
   read only = false
   comment = Root volume

Again, I won’t explain exactly what all the options are, but essentially, this creates a share called root which points to the root path of the volume ( / ), is readeadable/writeable, only allows connections from the host at 192.168.1.1, and uses root permissions. I wouldn’t grant permissions like this to a host unless you trust that host a whole lot.
If you’re not sure you want to be as extreme as the example above, try:

[websites]
   path = /web_sites
   comment = Web Site Directory for OS X

Save the file and exit your editor.

7. Check the directory and make sure the owner of the file is root, the group is wheel, and the permissions are rw-r-----.

8. Now we have everything we need run. I didn't need to restart or do anything else - it just worked. If for some reason you can't rsync right away, you may need to restart your machine.

9. The final step is to test the service. If you port scan (or nmap) your machine, you’ll probably see that the default rsync port is closed (port 873). Launchd will open the port when required. You may want to test the connection by running a basic rsync:

rsync -axv rsync://192.168.1.2/root/etc/hosts /tmp/