Hello,


i'm still thinking about rewriting the CVS authentication
method to make the remote CVS access method "pserver" more
secure.


Planned changes.
---------------

I'm going to write an external program, seperated from
the CVS source, which only wraps the pserver
authentication protocol. Its name will we "cvs-auth".

Then, after authentication,
it dup's the necessary input output streams (stdin, stderr,..)
and starts the local CVS program under an authenticated user id.

To identify users _names_ instead of the authenticated id,
it appends (during the fork) something like this -u log_username

For this it is necessary to have a small patch in subr.c in
the getcaller functions.

After the fork and the dup'ed streams it _should_ work
the same as the remote access methode (currently this is unchecked,
maybe this is wrong?)

The benefit of this system is:

* For every repository only two uids (for read only,write only)
* users can see who has changed what.(CVS_username is currently a :pserver
  only thing)
* mutiple repositories on the same server 
  (because its safe to run "cvs-auth" as root)
* users can never add new members to cvs (possible over .ssh, and pserver)


Disadvantages:

* The password/changes are transfered in clear text.
  (Maybe its possible to wrap cvs-auth another time with ssh,
   but I`m not sure about this)



Possible enhancements:

* make cvs-auth a pam module?
* query the user/repository/password tokens from a NIS/NIS+ table?
* sshd for port 2401?


Please feel free to comment.I posted a similar mail on
cvs-devel which produced no helpful information.

regards,

Martin






Reply via email to