SonarQube

De Wiki de Jordan LE NUFF
< Outillage
Révision datée du 4 mai 2020 à 09:44 par Jordan (discussion | contributions) (Page créée avec « == Présentation == Cette page a pour but de décrire certains aspects de SonarQube utilisé par les bureaux d'études de Régaz. == Description == ''"SonarQube (précéd… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour but de décrire certains aspects de SonarQube utilisé par les bureaux d'études de Régaz.

Description

"SonarQube (précédemment Sonar) est un logiciel libre permettant de mesurer la qualité du code source en continu."

Le site officiel : https://www.sonarqube.org/

Authentification Active Directory

Introduction

La documentation concernant l'authentification dans SonarQube est accessible à : https://docs.sonarqube.org/latest/instance-administration/delegated-auth/

Un des aspects importants de cette documentation est le mappage de groupes, dont la traduction française de la documentation est la suivante :

"Lors de l'utilisation du mappage de groupe, les mises en garde suivantes s'appliquent, quelle que soit la méthode d'authentification déléguée utilisée :

  • l'appartenance à des groupes synchronisés remplacera toute appartenance configurée localement dans SonarQube à chaque connexion
  • l'appartenance à un groupe n'est synchronisée que si un groupe du même nom existe dans SonarQube
  • l'appartenance au groupe par défaut sonar-users reste (il s'agit d'un groupe système) même si le groupe n'existe pas dans le fournisseur d'identité

Lorsque le mappage de groupe est configuré, la source d'authentification déléguée devient le seul et unique endroit pour gérer l'appartenance à un groupe, et les groupes de l'utilisateur sont récupérés à chaque connexion."

Particularités Active Directory

L'imbrication de groupes consiste à dire que si un groupe A appartient à un groupe B, alors, l'utilisateur du groupe A appartient au groupe B.

Dans le cas du souhait d'utiliser la fonctionnalité d'imbrication de groupes dans l'Active Directory, il va falloir vérifier que que ce dernier ait cette fonctionnalité d'activée.

Pour vérifier ce comportement, voici la commande à lancer depuis un serveur Linux vers un serveur Active Directory :

ldapsearch -x -LLL -h ADServer -D QueryUser -w QueryPassword -b "DC=example,DC=local" "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=CN=MyUser,OU=CompanyUsers,DC=example,DC=local))" 1.1

Voici le détail des options :

  • ADServer
    • Nom du serveur Active Directory
  • QueryUser
    • Utilisateur qui a le droit d'interrogation de l'AD
  • QueryPassword
    • Mot de passe de l'utilisateur qui interroge l'AD
  • DC=example,DC=local
    • Base de recherche de l'AD
  • (&(objectClass=group)(member:1.2.840.113556.1.4.1941:=CN=MyUser,OU=CompanyUsers,DC=example,DC=local))
    • Filtre de recherche, dont l'association de plusieurs filtres sont possibles grâce au caractère "&"
    • objectClass=group
      • Filtre permettant de rechercher des objet de type groupe
    • member:1.2.840.113556.1.4.1941:=CN=MyUser,OU=CompanyUsers,DC=example,DC=local
      • Filtre permettant de rechercher les groupes imbriqués dans lesquels est l'utilisateur MyUser
      • member:1.2.840.113556.1.4.1941
      • CN=MyUser,OU=CompanyUsers,DC=example,DC=local
        • Utilisateur concerné par la recherche
  • 1.1
    • Option permettant de ne retourner que le DN des objets trouvés
    • En l'absence de cette option, le détail des objets trouvés sera affiché, rendant l'interprétation des résultats compliquée

Le résultat de cette requête doit retourner les groupes dont l'utilisateur appartient, y compris les groupes imbriqués. Si les groupes imbriqués n'apparaissent pas, cela signifie que la fonctionnalité n'est pas activée sur l'Active Directory.

Installation du plugin

Installation interactive

Se rendre dans le menu "Administration", puis dans le "Marketplace" et rechercher le plugin "LDAP" :

Marketplace - plugin LDAP

Cliquer sur Install pour l'installer, puis passer à l'étape de configuration du plugin.

En cas de problème lors de l'installation interactive, tenter une installation manuelle.

Installation manuelle

En cas de problème lors de l'installation interactive (par exemple, une version de SonarQube trop ancienne pour la version du plugin disponible sur le marketplace), il est possible de l'installer manuellement.

Pour ce faire, se rendre sur https://binaries.sonarsource.com/Distribution/sonar-ldap-plugin/, choisir la version du plugin désirée et la télécharger dans le dossier $SONARQUBE_HOME/extensions/plugins.

Exemple pour une ancienne version de SonarQube et la version 2.2.0.608 du plugin ldap :

cd /var/lib/sonar/sonarqube-6.7.5/extensions/plugins
wget https://binaries.sonarsource.com/Distribution/sonar-ldap-plugin/sonar-ldap-plugin-2.2.0.608.jar

Redémarrer SonarQube pour la prise en compte du plugin.

Configuration du plugin

Editer le fichier $SONARQUBE_HOME/conf/sonar.properties et y insérer/modifier les paramètres suivants :

# LDAP Plugin
sonar.security.realm=LDAP
sonar.authenticator.downcase=true
ldap.url=ldap://ADServer
ldap.bindDn=CN=QueryUser,OU=TechnicalUsers,DC=example,DC=local
ldap.bindPassword=QueryPassword
ldap.user.baseDn=DC=groupegdb,DC=local
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=displayName
ldap.group.baseDn=DC=groupegdb,DC=local
ldap.group.request=(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={dn}))

Ajuster les paramètres comme suit :

  • LDAP
    • Type d'authentification à utiliser
  • ADServer
    • Nom du serveur Active Directory
  • CN=QueryUser,OU=TechnicalUsers,DC=example,DC=local
    • DN de l'utilisateur qui a le droit d'interrogation de l'AD
  • QueryPassword
    • Mot de passe de l'utilisateur qui interroge l'AD
  • DC=example,DC=local
    • Base de recherche de l'AD
    • A renseigner impérativement pour "ldap.group.baseDn"" dans le cas d'un souhait de gestion d'accès par groupe
  • (&(objectClass=user)(sAMAccountName={login}))
    • Filtre de recherche, dont l'association de plusieurs filtres sont possibles grâce au caractère "&"
    • objectClass=user
      • Filtre permettant de rechercher des objet de type user
    • sAMAccountName={login}
      • Mappage du login avec le champ correspondant dans l'AD
      • Variable {login} produite par le plugin contenant l'identifiant que l'utilisateur a rentré en tentant de s'authentifier
  • displayName
    • Mappage avec le champ contenant le nom convivial dans l'AD
  • (&(objectClass=group)(member:1.2.840.113556.1.4.1941:={dn}))
    • Filtre de recherche, dont l'association de plusieurs filtres sont possibles grâce au caractère "&"
    • objectClass=group
      • Filtre permettant de rechercher des objet de type groupe
    • member:1.2.840.113556.1.4.1941:={dn}
      • Filtre permettant de rechercher les groupes imbriqués dans lesquels est l'utilisateur qui tente de s'authentifier
      • member:1.2.840.113556.1.4.1941
      • {dn}
        • Utilisateur concerné par la recherche, variable produite par le plugin contenant le DN de l'utilisateur qui tente de s'authentifier

Redémarrer SonarQube pour la prise en compte du plugin.

Voici un exemple de connexion réussie au LDAP dans les logs de SonarQube :

Putty icon.png Console SSH

Configuration de la gestion d'accès

Une fois la configuration du plugin LDAP terminée, il est alors possible de définir des droits d'accès en fonction de l'identifiant et/ou des groupes d'appartenance de l'utilisateur.

Définir un groupe d'administrateurs

Pour ce faire, s'authentifier en tant qu'utilisateur admin et aller dans "Administration -> Security -> Global Permissions" :

Astuces

Réinitialiser le mot de passe administrateur

Selon les versions, la méthode d'implémentation des mots de passe applicatifs au sein de SonarQube diffère. De ce fait, chaque version a sa méthode de réinitialisation.

Version 6.7.x

La méthode est accessible sur la documentation officielle : https://docs.sonarqube.org/6.7/Authentication.html#src-11634809_Authentication-Ilosttheadminpassword

Se connecter à la base de données avec un utilisateur ayant les droits d'écriture sur les tables de SonarQube et lancer la commande suivante :

update users set crypted_password = '88c991e39bb88b94178123a849606905ebf440f5', salt='6522f3c5007ae910ad690bb1bdbf264a34884c6d' where login = 'admin'

Cela aura pour effet de réinitialiser le mot de passe de l'utilisateur "admin" à 'admin'.

Ensuite, bien évidement penser à se connecter en tant qu'admin et changer son mot de passe à une valeur plus sécurisée.