Secure CVS Pserver
Secure CVS Pserver
Morgon Kanter
February 2003
Revision History
Revision 1.1 2003−03−21 Revised by: mk
Fixed a missing link and added a section on CVSGrab
Revision 1.0 2003−02−01 Revised by: mk
Initial Release, reviewed by LDP.
This document will help you set up a more secure CVS Pserver for anonymous CVS access.
Permission is granted to copy, distribute, and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no
Invariant Sections, no Front−Cover Texts, and no Back−Cover Texts. A copy of the license is included in
Section 6, entitled "GNU Free Documentation License".
Secure CVS Pserver Mini−HOWTO
Table of Contents
1. Introduction.....................................................................................................................................................1
5. Acknowledgements.........................................................................................................................................8
i
1. Introduction
CVS Pserver is, by definition, an insecure protocol. Among other things, passwords are transmitted in plain
text, making it undesirable for much use. However, CVS Pserver is very good for providing anonymous CVS
access to a repository.
In this document we will introduce you to setting up a CVS repository (although not intruding on the CVS
HOWTO's space), and how to set up a chroot jail for the Pserver. We will also talk about using SSH for
developer access to a repository.
1. Introduction 1
2. Getting the tools
2.1. What you need
You'll need the following things in order to set up a secure Pserver:
CVS
Of course, you will need to have CVS in order to be running it. You can get it here.
cvsd
cvsd is a program that will run the CVS Pserver in a chroot jail. You can get it here.
SSHd
If you want your developers to have secure access to the repository, you'll have to be running an SSH
server. However, setting up that access is beyond the scope of this Mini−HOWTO. More information
can be found at the CVS−RCS howto.
$ ./configure −−prefix=/usr
$ make
# make install
First, plan out where you want your repository. Debian defaults to /var/lib/cvs. My repository is under
the directory /cvs/root, and is on its own small partition. What you do depends on your needs and can
vary widely.
Make sure that the repository is a subdirectory of an empty directory! For example, if you are installing
it into /var/lib/cvs, put the repository in /var/lib/cvs/root (or whatever you want for the
last directory). This is because we create a chroot jail for the Pserver!
After you have planned where you want to put your repository, made the necessary partitions, if desired, and
run the following command (we assume that it will be at /cvs/root):
That will initialize your repository and set up the necessary CVSROOT files.
If you installed cvsd from a package management system like RPM, this may already be done for you. If
that is the case, skip ahead to the next step.
Change your directory to /cvs (or whatever the directory before your root is) and enter the following
commands:
$ cvsd−buildroot /cvs
$ mkdir −p var/lock
$ adduser cvsd
$ addgroup cvsd
Thankfully, cvsd comes with the script cvsd−buildroot, so we don't have to do all the necessary copying by
hand. However, you should edit the /cvs/etc/passwd file, and remove the entry for "root," as it's
unneeded.
Example 1. My cvsd.conf
Uid cvsd
Gid cvsd
PidFile /var/run/cvsd.pid
RootJail /cvs
MaxConnections 10
Nice 1
Listen * 2401
Repos /root
Limit coredumpsize 0
Now edit the file READERS. Create it if it isn't there, and add a line that reads "anonymous".
The file READERS is a list of users who have read−only access to the CVS repository. People with write
access are listed in the file WRITERS. Read the cvs manual [1] for more information on these files.
Now commit the repository with the command below. We assume that your current working directory is
CVSROOT. If it isn't, forget the cd step.
# cd ../
# cvs −d /cvs/root commit
You should now get a message that says something like Re−building administrative files,
One last step and we're all done! Run the following command, and when prompted for a password, just press
ENTER:
Congratulations! You now have secure, anonymous CVS Pserver access to the repository!
Normally the Pserver will place lock files in the same directory as the files that you are trying to check out,
but this can cause permissions mayhem. Step back to when we built the chroot jail for cvsd; we also created
the directory var/lock. This is where we will place the lockfiles instead.
So use the following example, replacing /cvs with wherever your chroot environment is, and var with
wherever the locks are going to be placed. Mine are placed in var/lock, and there is nothing else under
var, so a chown −R is safe. Also, replace the cvsd user and group ids with the user and group ids that cvsd
runs as.
# cd /cvs
# chown −R cvsd:cvsd var
# chmod −R 775 var
# cd
# cvs −d /cvs/root checkout CVSROOT
# cd CVSROOT
Now we want to edit the file config. Change lock dir to the directory you want the locks to be placed, in our
case /var/lock.
Note that this applies to the Pserver AS WELL AS THE NON−CHROOT SSH LOGIN METHOD! Ensure
that this directory is not only in existence, but that you can write to it as well, relative to your root
directory. This is why I have chosen /var/lock, because it satisfies those conditions.
# cd ../
# cvs −d /cvs/root commit
$ export CVS_RSH='/usr/bin/ssh'
$ cvs −d :ext:[email protected]:/cvs/root login
This is a much more secure way for developers to access the repository.
There is also a set of Perl CGI scripts that do the same thing called cvsweb, but Viewcvs is more mature and
is preferred (at least by me).
4.3. CVSGrab
CVSGrab is an end−user tool for downloading the CVS repository by a ViewCVS interface. It is very useful
when you are behind a corporate firewall that blocks the Pserver, as you can just grab the repository over
standard HTTP. The only problem is if it doesn't have a ViewCVS interface, but most free software
repositories are now on the web, and the few that still use cvsweb seem to be switching over to ViewCVS.
CVSGrab is written in Java, which may at first be a turn−off to some people (it is to me), but it seems
completely compilable using GCJ, the Java front−end to GCC.
CVSGrab is a tool that goes hand−in−hand with ViewCVS. It is an end−user tool, not one that you as a
system administrator or repository administrator would set up and configure.
My thanks goes out to all the people who contributed to CVS over the years, as well as the creators of
Viewcvs, and in turn the creators of cvsweb who inspired it.
I would also like to thank Tabatha Persad for reviewing and helping me edit this monster, as well as putting
up with me. Thanks!
Also thanks to the various email contributors who pointed out missing stuff. Thank you Y Giridhar Appaji
Nag and Pasi Hirvonen!
5. Acknowledgements 7
6. GNU Free Documentation License
GNU Free Documentation License
Version 1.2, November 2002
0. PREAMBLE
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world−wide, royalty−free license, unlimited in duration, to use that
work under the conditions stated herein. The "Document", below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as "you". You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
The "Cover Texts" are certain short passages of text that are listed,
as Front−Cover Texts or Back−Cover Texts, in the notice that says that
the Document is released under this License. A Front−Cover Text may
be at most 5 words, and a Back−Cover Text may be at most 25 words.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front−Cover Texts on the front cover, and Back−Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled "History" in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the "History" section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section all
the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements"
or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
8. TRANSLATION
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
with the Invariant Sections being LIST THEIR TITLES, with the
Front−Cover Texts being LIST, and with the Back−Cover Texts being LIST.
Notes
[1] info cvs, if you have the stand−alone info viewer installed on your system