CVS für Benutzergruppen: read, write, read-write dank ACLs

Unix’ User/Group-Kombinationen reichen nicht aus, um z.B. einigen Usern Schreib- und anderen nur Lesezugriff auf CVS-Repositories bzw. einzelnen Repository-Untervereichnissen zu geben. Mit ALCs ist dies jedoch möglich.

Wir benutzen zwei Gruppen für Benutzer, die entweder nur lesend oder auch schreibend auf unser Repository zugreifen dürfen:

addgroup cvs-myproject-r addgroup cvs-myproject-w

Das Repository für unser Projekt ist schnell erstellt:

mkdir -m 2770 /cvs/repository/myproject
chgrp -R cvs-project-w /cvs/repository/myproject 
cvs -d /cvs/repository/myproject init 
chmod g+rw  /cvs/repository/myproject/CVSROOT
# ggf. auch diese beiden Zeilen, siehe unten 
# chmod -R o+r /cvs/repository/myproject/CVSROOT 
# chmod o+x /cvs/repository/myproject/CVSROOT 
chmod g+x
chmod g+rw /cvs/repository/myproject/CVSROOT


Mitglieder der Gruppe cvs-myproject-w können jetzt bereits fröhlich arbeiten.

Um nun auch z.B. externen Mitarbeitern Lesezugriff zu gestatten, benutzen wir die zweite Gruppe cvs-myproject-r. Dieser Gruppe gestatten wir per ACL lesenden Zugriff. Dazu muss das entsprechende Dateisystem ACLs unterstützen.

mount -o remount,acl $CVS_PARTITION
setfacl -d -m 'group:cvs-myproject-r:r-x' /cvs/repository/myproject
setfacl -m 'group:cvs-myproject-r:r-x' /cvs/repository/myproject

Die Syntax ist denkbar einfach: ‘-m’ für modify, ‘-d’ für default um das Ganze auf zukünftige Dateien zu vererben, ‘group:cvs-myproject-r:r-x’ für Gruppe cvs-myproject-r darf lesen und ausführen. Wobei ausführen hier für Verzeichnis-Kontext zu verstehen ist, Mitglieder der Gruppe cvs-myproject-r dürfen sich durch die Verzeichnisstruktur hangeln, die entsprechenden Verzeichnisse betreten.

Für Setups, bei denen Benutzergruppen nur Teile eines Repository sehen dürfen: Es ist notwendig, das Verzeichnis CVSROOT und seinen Inhalt für alle CVS-User lesbar zu machen, entweder worldreadable oder ebenfalls per ACLs.

setfacl -d -R -m 'group:cvs-myproject-r:r-x' /cvs/repository/CVSROOT
setfacl -R -m 'group:cvs-myproject-r:r-x' /cvs/repository/CVSROOT

Will man die CVS history nicht für jeden lesbar machen, dem cvs genügt es, wenn die Datei schreibbar ist:

chmod o=w /cvs/repository/myproject/CVSROOT/history

Referenz(en)