Version Control with Subversion - svnserve, a custom server - Controlling the invoked command
Controlling the invoked command
Because we can specify the executed server-side command,
it's easy to name a specific
svnserve
binary to run and to pass it extra arguments:
command="/path/to/svnserve -t -r /virtual/root" TYPE KEY COMMENT
In this example, /path/to/svnserve
might be a custom wrapper script
around
svnserve
which sets the umask (see
the section called “Supporting Multiple Repository Access Methods”). It also shows how to
anchor
svnserve
in a virtual root
directory, just as one often does when
running
svnserve
as a daemon process.
This might be done either to restrict access to parts of the
system, or simply to relieve the user of having to type an
absolute path in the svn+ssh://
URL.
It's also possible to have multiple users share a single
account. Instead of creating a separate system account for
each user, generate a public/private keypair for each
person. Then place each public key into
the authorized_users file, one per
line, and use the --tunnel-user
option:
command="svnserve -t --tunnel-user=harry" TYPE1 KEY1 [email protected]
command="svnserve -t --tunnel-user=sally" TYPE2 KEY2 [email protected]
This example allows both Harry and Sally to connect to
the same account via public-key authentication. Each of
them has a custom command that will be executed;
the --tunnel-user option
tells
svnserve -t
to assume that the named
argument is the authenticated user. Without
--tunnel-user , it would appear as though
all commits were coming from the one shared system
account.
A final word of caution: giving a user access to the
server via public-key in a shared account might still allow
other forms of SSH access, even if you've set
the command value
in authorized_keys . For example, the
user may still get shell access through SSH, or be able to
perform X11 or general port-forwarding through your server.
To give the user as little permission as possible, you may
want to specify a number of restrictive options immediately
after the command :
command="svnserve -t --tunnel-user=harry",no-port-forwarding,\
no-agent-forwarding,no-X11-forwarding,no-pty \
TYPE1 KEY1 [email protected]
[an error occurred while processing this directive]
|