ViewVC sous Apache

De EjnTricks
Révision de 25 juin 2018 à 11:48 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Plusieurs modes de publication de ViewVC sous Apache sont disponibles et décrite dans le fichier INSTALL de la distribution. L'exemple présenté dans cet articule utilise la méthode de ScriptAlias.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Icon-Configuration-Settings.png Déploiement site sécurisé

La procédure décrite ci dessous permet de mettre à disposition l'application avec un accès sécurisé HTTPS avec utilisation d'un certificat fourni par Let's Encrypt et un tutoriel très bien réalisé.

L'application sera rendue disponible depuis un sous domaine du domaine principal en mode HTTP et HTTPS. Une authentification sera demandée pour le protocole HTTPS afin de filtrer les dépôts en fonction des informations de connexion. Pour le protocole HTTP, seul les dépôts public seront présentés et aucune authentification ne sera demandée.

Pour rappel, l'application est déployée dans le répertoire /var/opt/viewvc/viewvc.

System-Install-icon.png Préparation environnement

Certbot sera utilisé pour demander et renouveler le certificat du site. Dans son fonctionnement, le process essaye d'accéder à un .well-known à la racine du site. De plus, une bonne pratique consiste à fournir un répertoire racine pour les sites déployés sous Apache. Le répertoire /var/www/viewvc est alors créé, ainsi que le sous répertoire .well-known.

#sudo mkdir -p /var/www/viewvc/.well-known

Il est recommandé de placer un fichier index.html, avec un contenu vide, dans le répertoire racine, soit /var/www/viewvc.

<html>
<head>
</head>
<body>
</body>
</html>

Un fichier robots.txt y est placé avec les directives indiquant aux moteurs de recherche que tout est disponible.

User-agent: *
Disallow:

Les permissions mises en place donnent un accès uniquement aux compte du serveur, soit www-data.

#sudo find /var/www/viewvc -type f -exec chmod 0600 {} \;
#sudo find /var/www/viewvc -type d -exec chmod 0700 {} \;
#sudo chown -R www-data:www-data /var/www/viewvc

Configuration-icon.png Configuration HTTP

Dans un premier temps, une configuration est mise en place pour accéder de façon non sécurisé. Un fichier viewvc est créé dans le répertoire /etc/apache2/sites-available avec le contenu suivant.

<VirtualHost *:80>
    ServerAdmin contact-email@dummy.net
    ServerName www.viewvc.dummy.net
    DocumentRoot /var/www/viewvc
    DirectoryIndex index.html

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/viewvc_error.log
    CustomLog ${APACHE_LOG_DIR}/viewvc_access.log combined

    <Directory /var/www/viewvc>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    ScriptAlias /repos /var/opt/viewvc/viewvc/bin/cgi/viewvc.cgi
    <Location "/repos">
        Options -Indexes +FollowSymLinks
        Require all granted
    </Location>
</VirtualHost>

Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled.

#sudo ln -s /etc/apache2/sites-available/viewvc /etc/apache2/sites-enabled/008-viewvc.conf

Le nom du lien, à savoir 008-viewvc.conf, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache.

Il suffit de relancer la configuration d'Apache pour qu'elle soit prise en compte.

#sudo apache2ctl graceful

A noter, l'outil de recherche n'est pas configuré car il présente un problème avec les dépôts privés. L'accès aux dépôts s'effectuera à l'aide de l'URL .../repos.

Certificate Server icon.png Certificat

L'application est à présent disponible avec l'URL http://www.viewvc.dummy.net. Un certificat va être demandé à l'aide de Certbot.

#sudo certbot certonly --webroot -w /var/www/viewvc -d www.viewvc.dummy.net --email contact-email@dummy.net
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.viewvc.dummy.net
Using the webroot path /var/www/viewvc for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.viewvc.dummy.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.viewvc.dummy.net/privkey.pem
   Your cert will expire on 2018-05-13. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Le certificat est stocké dans le répertoire /etc/letsencrypt/live/www.viewvc.dummy.net/.

Lock-icon.png Configuration HTTPS

Le certificat étant disponible, la configuration HTTPS peut être mise en place. Un fichier viewvc-dummy-ssl est créé dans le répertoire /etc/apache2/sites-available avec le contenu suivant.

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin contact-email@dummy.net
    ServerName www.viewvc.dummy.net
    DocumentRoot /var/www/viewvc
    DirectoryIndex index.html

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/viewvc_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/viewvc_ssl_access.log combined

    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    SSLEngine on
    SSLCertificateFile         /etc/letsencrypt/live/www.viewvc.dummy.net/cert.pem
    SSLCertificateKeyFile      /etc/letsencrypt/live/www.viewvc.dummy.net/privkey.pem
    SSLCertificateChainFile    /etc/letsencrypt/live/www.viewvc.dummy.net/chain.pem
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCompression off
    SSLOptions +StrictRequire
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

    <Directory /var/www/viewvc>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    ScriptAlias /repos /var/opt/viewvc/viewvc/bin/cgi/viewvc.cgi
    <Location "/repos">
        Options -Indexes +FollowSymLinks
        AuthType Basic
        AuthName "ViewVC access"
        AuthBasicProvider ldap
        AuthLDAPURL ldap://localhost:389/ou=people,dc=ejnserver,dc=fr?uid
        require valid-user
    </Location>
</VirtualHost>
</IfModule>

A noter que le fichier robots.txt n'est pas modifié pour interdire les accès car une connexion est nécessaire.

Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled.

#sudo ln -s /etc/apache2/sites-available/viewvc-dummy-ssl /etc/apache2/sites-enabled/009-viewvc-ssl.conf

Le nom du lien, à savoir 009-viewvc-ssl.conf, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache.

La configuration HTTP, sur le port 80, n'est pas modifiée pour laisser un accès aux dépôts publiques.

Il suffit de relancer la configuration d'Apache pour que les modifications soient prises en compte.

#sudo apache2ctl graceful


Warning-icon.png Configuration simple

Ce mode de configuration permet de mettre à disposition l'application dans une configuration de site existant, en s'inspirant de celle de Mediawiki par exemple.

Par contre, les modes présentés ne mettent pas en évidence l'utilisation de certificat et sont effectué sur des accès HTTP simple.

Configuration-icon.png Apache 2.2.X

Ayant pour hypothèse l'installation de ViewVC a été réalisée sour /usr/local/viewvc-1.1.7, la procédure est la suivante, sous Ubuntu: Modification du fichier /etc/apache2/sites-enabled/000-default, par ajout des deux lignes:

<VirtualHost *:80>
	ServerAdmin webmaster@localhost

	DocumentRoot /var/www
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ScriptAlias /viewvc/repos /usr/local/viewvc-1.1.7/bin/cgi/viewvc.cgi	
        <Location "/viewvc/repos">
           #Options Indexes FollowSymLinks
           #AllowOverride None
           #Order deny,allow
        </Location>
	ScriptAlias /viewvc/query /usr/local/viewvc-1.1.7/bin/cgi/query.cgi

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

La mise en place de la configuration Location "/viewvc/repos" va permettre de spécifier des paramètres d'accès à l'URL.

Dans ce cas, les outils seront accessibles depuis les URLs:

http://server/viewvc/repos
http://server/viewvc/query



Configuration-icon.png Apache 2.4.6

Lors d'une mise à jour du serveur Ubuntu, Apache a été mis à jour en version 2.4.6. Cependant, l'impact est assez conséquent, car il y a eu une refonte de la gestion des droits d'accès. Des messages d'erreurs étant constatés dans les logs de Apache:

[Thu Dec 26 13:48:04.976876 2013] [authz_core:error] [pid 8692] [client 82.230.154.123:58512] AH01630: client denied by server configuration: /var/opt/viewvc/bin/cgi/viewvc.cgi

La configuration a donc été modifiée afin d'être de nouveau opérationnelle:

<VirtualHost *:80>
	ServerAdmin webmaster@localhost

	DocumentRoot /var/www
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		# Old configuration for APACHE 2.2
		# Order allow,deny
		# Allow from all
		Require all granted
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		# Old configuration for APACHE 2.2
		# Order allow,deny
		# Allow from all
		Require all granted
	</Directory>

	ScriptAlias /viewvc/repos /usr/local/viewvc-1.1.7/bin/cgi/viewvc.cgi	
        <Location "/viewvc/repos">
           #Options Indexes FollowSymLinks
           #AllowOverride None
           #Order deny,allow
           Require all granted
        </Location>
	ScriptAlias /viewvc/query /usr/local/viewvc-1.1.7/bin/cgi/query.cgi

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
		# Old configuration for APACHE 2.2
		# Order allow,deny
		# Allow from all
		Require all granted
    </Directory>

</VirtualHost>