Cette section décrira la façon de paramétrer, administrer et sécuriser un serveur Subversion.
Les instructions suivantes installeront un serveur Subversion, qui sera paramétré pour utiliser OpenSSH comme méthode sécurisée à distance, avec svnserve disponible pour un accès anonyme.
La configuration du serveur Subversion consiste en les étapes suivantes :
Vous devrez être l'utilisateur root
pour la partie initiale de la
configuration. Créez l'utilisateur et le groupe svn
avec les commandes suivantes :
groupadd -g 56 svn && useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn
Si vous envisagez d'avoir plusieurs dépôts, vous devriez avoir un
groupe dédié à chaque dépôt pour faciliter l'administration.
Créez le groupe svntest
pour le
dépôt de test et ajoutez l'utilisateur svn
au groupe avec les commandes
suivantes :
groupadd -g 57 svntest && usermod -G svntest -a svn
En outre, vous devriez régler umask 002 pendant que vous travaillez avec un dépôt pour que tous les nouveaux fichiers soient accessibles en écriture au propriétaire et au groupe. Ceci est rendu obligatoire par la création d'un script enveloppe pour svn et svnserve :
mv /usr/bin/svn /usr/bin/svn.orig && mv /usr/bin/svnserve /usr/bin/svnserve.orig && cat >> /usr/bin/svn << "EOF"#!/bin/sh umask 002 /usr/bin/svn.orig "$@"
EOF cat >> /usr/bin/svnserve << "EOF"#!/bin/sh umask 002 /usr/bin/svnserve.orig "$@"
EOF chmod 0755 /usr/bin/svn{,serve}
Si vous utilisez Apache pour travailler avec le dépôt par HTTP, même pour un accès anonyme, vous devriez envelopper /usr/sbin/httpd dans un script similaire.
Il y a de nombreuses manières d'initialiser un répertoire subversion. Il est recommandé de regarder le chapitre correspondant du Livre SVN. Un répertoire de base peut être initialisé avec les instructions ci-dessous.
Créez un nouveau dépôt Subversion avec les commandes suivantes (en
tant qu'utilisateur root
) :
install -v -m 0755 -d /srv/svn && install -v -m 0755 -o svn -g svn -d /srv/svn/repositories && svnadmin create /srv/svn/repositories/svntest
Maintenant que le dépôt est créé, vous devriez le remplir avec
quelque chose d'utile. Vous devrez avoir une disposition de
répertoires prédéfinie paramétrée comme ce à quoi vous voudriez
que votre dépôt ressemble. Par exemple, voici un modèle du
paramétrage de BLFS avec une racine de svntest/
. Vous devrez paramétrer une
arborescence de répertoire ressemblant à ce qui suit :
svntest/ # The name of the repository
trunk/ # Contains the existing source tree
BOOK/
bootscripts/
edguide/
patches/
scripts/
branches/ # Needed for additional branches
tags/ # Needed for tagging release points
Une fois que vous avez créé votre aménagement de répertoire, comme indiqué ci-dessus, vous êtes prêt à faire l'importation initiale :
svn import -m "Initial import." \
</path/to/source/tree>
\
file:///srv/svn/repositories/svntest
Maintenant modifiez les informations de propriétaire et de groupe
du dépôt et ajoutez un utilisateur non privilégié aux groupes
svn
et svntest
:
chown -R svn:svntest /srv/svn/repositories/svntest &&
chmod -R g+w /srv/svn/repositories/svntest &&
chmod g+s /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest -a <username>
svntest
est le groupe affecté au
dépôt svntest. Comme indiqué plus haut, cela facilite
l'administration de plusieurs dépôts lors de l'utilisation de
OpenSSH pour l'authentification.
En anticipant, vous devrez ajouter votre utilisateur non
privilégié et n'importe quel utilisateur supplémentaire auquel
vous pouvez vouloir donner accès en écriture au dépôt, aux
groupes svn
et svntest
.
En outre, vous remarquerez que le nouveau répertoire du dépôt
db
est set-groupID. Si le
raisonnement n'est pas immédiatement évident, quand on utilise
une méthode d'authentification externe (telle que ssh), le bit sticky est réglé
de sorte que tout les nouveaux fichiers appartiendront à
l'utilisateur, mais au groupe svntest
. Quiconque dans le groupe
svntest
peut créer des fichiers,
mais donnez encore l'accès en écriture à tout le groupe à ces
fichiers. Ceci évite d'exclure d'autres utilisateurs du dépôt.
Maintenant, repassez en accès pour utilisateur non privilégié, et jetez un œil sur le nouveau dépôt en utilisant svnlook :
svnlook tree /srv/svn/repositories/svntest/
Il se peut que vous deviez vous déconnecter et y revenir pour
rafraîchir vos appartenances de groupes. su <nom_utilisateur>
devrait aussi fonctionner.
Comme indiqué précédemment, ces instructions configureront le serveur pour n'utiliser que ssh pour un accès en écriture au dépôt et pour fournir un accès anonyme en utilisant svnserve. Il y a plusieurs autres manières de fournir un accès au dépôt. Ces configurations supplémentaires sont mieux expliquées sur https://svnbook.red-bean.com/.
La configuration de l'accès doit se faire pour chaque dépôt.
Créez le fichier svnserve.conf
pour
le dépôt svntest en utilisant les commandes suivantes :
cp /srv/svn/repositories/svntest/conf/svnserve.conf \
/srv/svn/repositories/svntest/conf/svnserve.conf.default &&
cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF
Il n'y a pas grand à chose du tout avoir avec le fichier de
configuration. Vous remarquerez que seule la section générale est
nécessaire. Jetez un œil sur le fichier svnserve.conf.default
pour des informations sur
l'utilisation de la méthode d'authentification de svnserve intégrée.
Pour démarrer le serveur au démarrage, installez l'unité
svnserve.service
du paquet
blfs-systemd-units-20240801 :
make install-svnserve
En outre, vous devriez régler umask 002 pendant que vous travaillez avec un dépôt pour que tous les nouveaux fichiers soient accessibles en écriture au propriétaire et au groupe. Ceci peut être accompli en créant un fichier de surcharge d'unité systemd en exécutant la commande suivante :
mkdir -p /etc/systemd/system/svnserve.service.d echo "UMask=0002" > /etc/systemd/system/svnserve.service.d/99-user.conf
Les options passées au démon svnserve peuvent être changées
dans /etc/default/svnserve
.