Sonar comes out of the box with a complete mechanism to manage security. Configuring security in Sonar enables to cover two main use cases:
When installing Sonar, a unique user gets created:
A user is a set of basic information: login, password, name and email.
To create a new user, go to Configuration > Users > Add new user:

Log in and click on your name (the top right of the screen).
Enter the old password, the new one and confirm it:

When the LDAP plugin is installed and activated, it is no longer possible for users to change their password. Then, only system administrators can do so through Settings > Security > Users. |
The way authorization is implemented in Sonar is pretty standard. It is possible to create as many users and groups of users as required in the system. The users can then be attached (or not) to (multiple) groups. Groups and / or users are then given (multiple) roles. The roles grant access to projects, services and functionalities in Sonar.
A group is a set of users.
To create a new group, go to Configuration > Groups > Add new group:

To add/remove users to/from a group:


Two groups have a special status in Sonar:
There are 4 roles in Sonar, 1 is global, the 3 others are defined at project level:
It is possible to configure the system so that when a new project is created, some users/groups are automatically granted roles on this project.
In the example below, once a new project has been created:


In order to leverage existing infrastructures, Sonar provides the capability of delegating authentication and authorization to external systems through plugins:
Encryption of settings is available since release 3.0.1. |
Encryption is mostly used to remove clear passwords from settings, ie the database or SCM credentials. The implemented solution is based on a symetric key algorithm. The keypoint is that the secret key is stored in a secured file on disk. This file must be readable and owned by only the system account that executes the different Java process (Maven Plugin, Ant task, continuous integration server, sonar server, ...).
The algorithm is AES 128 bits. Note that 256 bits cipher is not used because it's not supported by default on all Java Virtual Machines (see this article).
An unique secret key is shared between all the parts of the Sonar infrastructure (server and code analyzers). It is generated online with the administration console (Configuration > General Settings > Encryption). Follow the instructions to store the key in a secured file on the server, generally in ~/.sonar/sonar-secret.txt. If the file is elsewhere, then declare its path with the property sonar.secretKeyPath in conf/sonar.properties and restart the server.
If you want to encrypt properties that are used by code analyzers, then copy the file on all the required machines. Use the same property sonar.secretKeyPath to change the default location.
bIOVA1TybepjqLH+uYxuNh== |
When this is done, you can start encrypting settings.
The administration console used to generate the secret key allows also to encrypt text values. Simply copy the encrypted texts in the appropriate locations.
<profile>
<id>sonar</id>
<properties>
<sonar.jdbc.url>jdbc:oracle:thin:@172.16.199.130/XE</sonar.jdbc.url>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>{aes}CCGCFg4Xpm6r+PiJb1Swfg==</sonar.jdbc.password>
<!-- optional - override if secret key is not stored in ~/.sonar/sonar-secret.txt -->
<sonar.secretKeyPath>/path/to/secret.key</sonar.secretKeyPath>
</properties>
</profile> |
sonar.jdbc.url= jdbc:oracle:thin:@172.16.199.130/XE
sonar.jdbc.username= sonar
sonar.jdbc.password= {aes}CCGCFg4Xpm6r+PiJb1Swfg==
# optional - override if secret key is not stored in ~/.sonar/sonar-secret.txt
sonar.secretKeyPath= /path/to/secret.key |
See the Security section of the FAQ.