Ralf Hildebrandt
Ralf Hildebrandt

Reputation: 541

rsync daemon behaving eratically

I'm running an rsync daemon (providing a mirror for the SaneSecurity signatures).

rsync is started like this (from runit):

    /usr/bin/rsync -v --daemon --no-detach

And the config contains:

    use chroot = no
    munge symlinks = no
    max connections = 200
    timeout = 30
    syslog facility = local5
    transfer logging = no
    log file = /var/log/rsync.log
    reverse lookup = no
    [sanesecurity]
      comment = SaneSecurity ClamAV Mirror
      path = /srv/mirror/sanesecurity
      read only = yes
      list = no
      uid = nobody
      gid = nogroup

But what I'm seeing is a lot of "lingering" rsync processes:

   # ps auxwww|grep rsync
   root       423  0.0  0.0   4244  1140 ?        Ss   Oct30   0:00 runsv rsync
   root      2529  0.0  0.0  11156  2196 ?        S    15:00   0:00 /usr/bin/rsync -v --daemon --no-detach
   nobody    4788  0.0  0.0  20536  2860 ?        S    15:10   0:00 /usr/bin/rsync -v --daemon --no-detach
   nobody    5094  0.0  0.0  19604  2448 ?        S    15:13   0:00 /usr/bin/rsync -v --daemon --no-detach
   root      5304  0.0  0.0  11156   180 ?        S    15:15   0:00 /usr/bin/rsync -v --daemon --no-detach
   root      5435  0.0  0.0  11156   180 ?        S    15:16   0:00 /usr/bin/rsync -v --daemon --no-detach
   root      5797  0.0  0.0  11156   180 ?        S    15:19   0:00 /usr/bin/rsync -v --daemon --no-detach 
   nobody    5913  0.0  0.0  20536  2860 ?        S    15:20   0:00 /usr/bin/rsync -v --daemon --no-detach
   nobody    6032  0.0  0.0  20536  2860 ?        S    15:21   0:00 /usr/bin/rsync -v --daemon --no-detach
   root      6207  0.0  0.0  11156   180 ?        S    15:22   0:00 /usr/bin/rsync -v --daemon --no-detach
   nobody    6292  0.0  0.0  20544  2744 ?        S    15:23   0:00 /usr/bin/rsync -v --daemon --no-detach
   root      6467  0.0  0.0  11156   180 ?        S    15:25   0:00 /usr/bin/rsync -v --daemon --no-detach
   root      6905  0.0  0.0  11156   180 ?        S    15:29   0:00 /usr/bin/rsync -v --daemon --no-detach

(it's currently 15:30)

So there's processes (not even having dropped privileges!) hanging around since 15:10, 15:13 and the like.

And what are they doing?

Let's check:

    # strace -p 5304
    strace: Process 5304 attached
    select(4, [3], NULL, [3], {25, 19185}^C
    strace: Process 5304 detached
    <detached ...>

    # strace -p 5797
    strace: Process 5797 attached
    select(4, [3], NULL, [3], {48, 634487}^C
    strace: Process 5797 detached
    <detached ...>

This happended with both rsync from Ubuntu Xenial as well as installed from PPA (currently using rsync 3.1.2-1~ubuntu16.04.1york0 )

Upvotes: 0

Views: 1153

Answers (2)

Ralf Hildebrandt
Ralf Hildebrandt

Reputation: 541

In the end, I resorted to invoking rsync from (x)inetd instead of running it standalone.

    service rsync
    {
      disable = no
      socket_type = stream
      wait = no
      user = root
      server = /usr/bin/timeout
      server_args =  -k 60s 60s /usr/bin/rsync --daemon
      log_on_failure += USERID
      flags = IPv6
    }

As an additional twist, I wrapped the rsync invocation with timeout, adding another safeguard against long-running processes.

Upvotes: 1

Alexander Sulfrian
Alexander Sulfrian

Reputation: 3563

One process is created for each connection. Before a client selects the module the process does not know if it should drop privileges.

You can easily create such a process.

nc $host 873

You will notice that the connection will not be closed after 30s because the timeout is just a disk i/o timeout. The rsync client have a --contimeout option, but it seems that a server side option is missing.

Upvotes: 1

Related Questions