Comment sécuriser votre base de données OrientDB sur Ubuntu 16.04

introduction

OrientDB est une base de données NoSQL multimodèle prenant en charge les bases de données de documents et de graphes. C'est une application Java et peut être exécuté sur n'importe quel système d'exploitation. C’est également une plainte ACID intégrant la prise en charge de la réplication multi-maîtres.

A l’origine, OrientDB a une très bonne sécurité en ce sens que la connexion à l’instance de serveur et la connexion à une base de données nécessitent une authentification. D'autres systèmes de sécurité, tels que l'authentification Kerberos et les utilisateurs LDAP, sont également pris en charge, mais ils impliquent la configuration de systèmes logiciels supplémentaires.

Dans cet article, nous allons plutôt nous concentrer sur la sécurisation d’une installation de l’édition OrientDB Community en utilisant uniquement les ressources disponibles par défaut. Plus précisément, vous allez chiffrer la base de données OrientDB, restreindre l’accès au serveur Web OrientDB et à l’instance de serveur et gérer les comptes de la base de données OrientDB à partir de l’interface utilisateur Web et de la console.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants:

Cet article suppose qu'OrientDB est installé dans le répertoire/opt/orientdb, comme dans l'article d'installation d'origine. /opt est l'emplacement traditionnel pour installer des applications tierces sous Linux.

[[step-1 -—- restricting-access-to-the-orientdb-web-server]] == Étape 1 - Restreindre l'accès au serveur Web OrientDB

OrientDB est une application de serveur Web standard, mais elle n'est pas destinée à être exposée à Internet ou aux réseaux publics. L'accès de gestion à celui-ci doit être limité au réseau local.

La première étape de l’exécution d’une application sécurisée OrientDB consiste à sécuriser le système d’exploitation sur lequel elle est exécutée. Vous devriez exécuter un pare-feu. Si vous ne l’êtes pas, suivez lesInitial Server Setup on Ubuntu 16.04 guide pour configurer UFW. Le guide d'installation original d'OrientDB permet d'accéder à OrientDB Studio à partir du réseau public à des fins de test en permettant de porter2480 à travers le pare-feu.

Si vous voulez vous assurer que l'accès d'Internet à OrientDB Studio et à la console est toujours refusé, quels que soient les paramètres du pare-feu, il vous suffit d'apporter quelques modifications au fichier de configuration,/opt/orientdb/config/orientdb-server-config.xml.

Ouvrez ce fichier pour le modifier.

sudo nano /opt/orientdb/config/orientdb-server-config.xml

Recherchez ensuite la baliselisteners:

/opt/orientdb/config/orientdb-server-config.xml

. . .

  
  
  . . .

. . .

Et changez les paramètresip-address de0.0.0.0 à127.0.0.1.

/opt/orientdb/config/orientdb-server-config.xml


. . .
  
  
  . . .

. . .

Enregistrez et fermez le fichier.

Lorsqu'une modification est apportée au fichier de configuration alors que le démon OrientDB est en cours d'exécution, veillez à le redémarrer:

sudo systemctl restart orientdb

Cela coupe toutes les connexions au Studio de l’Internet public. Essayez maintenant de vous connecter au Studio en visitant à nouveauhttp://your_server_ip:2480 dans votre navigateur. Cette fois, la connexion sera refusée.

Dans cette étape, vous vous êtes concentré sur la sécurité du réseau externe. Dans l'étape suivante, l'instance de serveur OrientDB sera davantage sécurisée en interne.

[[step-2 -—- securing-the-orientdb-server-instance]] == Étape 2 - Sécurisation de l'instance du serveur OrientDB

Ici, vous apprendrez comment supprimer le compte invité et modifier les autorisations du fichier de configuration d’OrientDB.

Une chose que vous pouvez faire pour renforcer la sécurité du serveur est de donner un accès en lecture-écriture au répertoireconfigonly à l'utilisateur OrientDB. L’autorisation par défaut de ce répertoire est755, mais il n’est même pas nécessaire que le bit d’exécution soit défini.

sudo chmod 600 /opt/orientdb/config

Et pour donner un peu plus de poids, durcissez la permission du fichier de configuration lui-même.

sudo chmod 600 /opt/orientdb/config/orientdb-server-config.xml

[.Remarque]##

Note: ces autorisations seront définies sur600 par défaut dansa future version of OrientDB. Cependant, au moment de la publication, ces étapes sont toujours nécessaires.

Le reste des astuces de sécurité de ce tutoriel se feront via la console OrientDB, alors connectez-vous maintenant.

sudo /opt/orientdb/bin/console.sh

Chaque instance de serveur OrientDB peut prendre en charge plusieurs bases de données OrientDB. Prêt à l'emploi, chaque instance de serveur est livrée avec deux comptes utilisateur:guest etroot. Vous avez eu la possibilité de définir le mot de passe du compte root lors de la première installation et du premier lancement du serveur OrientDB. La forme hachée du mot de passe est stockée dans le fichier de configuration OrientDB,/opt/orientdb/config/orientdb-server-config.xml. La forme hachée du mot de passe généré automatiquement pour le compte invité est également stockée dans ce fichier.

Depuis la console OrientDB, vous pouvez afficher des informations sur les deux comptes en tapant:

list server users

[.Remarque]##

Note: il y a actuellementa bug in OrientDB qui provoquera l'erreur suivante lorsque vous essayez d'exécuterlist server users:

OutputError: com.orientechnologies.orient.core.exception.OConfigurationException: Cannot access to file ../config/orientdb-server-config.xml

Si vous recevez cette erreur, vous pouvez la contourner en quittant la console OrientDB et en vous reconnectant après avoir déplacé vers le répertoirebin.

cd /opt/orientdb/bin
sudo ./console.sh

Ensuite, vous pouvez exécuterlist server users et cela fonctionnera comme prévu.

La sortie vous indiquera les autorisations dont disposent les deux comptes. Le compteguest a des privilèges limités, mais l'utilisateurroot est autorisé à effectuer toutes les tâches. C’est ce que l’astérisque à la place de ses autorisations indique:

OutputSERVER USERS

- 'guest', permissions: connect,server.listDatabases,server.dblist
- 'root', permissions: *

Même avec des privilèges limités, vous ne voudrez peut-être pas conserver le compte invité. Pour le supprimer de la console, utilisez la commandedrop.

drop server user guest

La prochaine fois que vous serezlist server usersà partir de la console OrientDB, il affichera uniquement l'utilisateurroot. Si vous regardez à l'intérieur du fichier/opt/orientdb/config/orientdb-server-config.xml, vous verrez que le compteguest a été supprimé du tag users.

Maintenant que l'instance de serveur est plus sécurisée, vous allez maintenant renforcer la sécurité de la base de données.

[[step-3 -—- restricting-access-to-the-orientdb-database]] == Étape 3 - Restreindre l'accès à la base de données OrientDB

La prochaine étape pour sécuriser votre installation OrientDB consiste à rendre très difficile l’obtention d’un accès non autorisé à la base de données elle-même.

Par défaut, chaque base de données OrientDB que vous créez possède trois comptes intégrés avec les noms d’utilisateur suivants:admin,reader etwriter, chacun avec un mot de passe identique au nom d’utilisateur. C'est bon pour les tests, mais pas pour un système de production. À tout le moins, vous devriez changer les mots de passe des trois comptes. Mieux encore, vous devez supprimer ou suspendre tout ce dont vous n’avez pas besoin.

La manière dont vous choisissez de gérer ces comptes dépend de vos besoins et de votre environnement. Pour ce didacticiel, vous apprendrez à modifier le mot de passe du compteadmin, à suspendre le comptewriter et à supprimer le comptereader. Vous pouvez effectuer l’une de ces trois actions à partir de la console OrientDB et du logiciel OrientDB Studio basé sur un navigateur.

Gestion des comptes d'utilisateurs depuis la console OrientDB

Pour modifier les comptes utilisateur à partir de la console, vous devez vous connecter à la base de données dont vous souhaitez gérer les comptes. Cet exemple se connecte à la base de donnéesGratefulDeadConcerts, une base de données exemple fournie avec chaque installation d'OrientDB, en utilisant l'utilisateur deadmin et le mot de passe par défaut (admin):

connect remote:127.0.0.1/GratefulDeadConcerts admin admin

Vous pouvez également vous connecter avec le compte et le mot de passeroot du serveur OrientDB. Dans les deux cas, l’invite doit changer pour indiquer que vous êtes connecté à une base de données spécifique.

OutputConnecting to database [remote:127.0.0.1/GratefulDeadConcerts] with user 'admin'...OK
orientdb {db=GratefulDeadConcerts}>

Pour répertorier les utilisateurs de la base de données, tapez ce qui suit. ouser est l'enregistrement OrientDB où les mots de passe utilisateur sont stockés:

select from ouser

La sortie complète devrait être comme suit. Notez que les trois comptes ont un statutACTIVE.

Output+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
|#   |@RID|@CLASS|name  |password                                                                                                                     |status|roles |
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+
|0   |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}6668FC52BF1D2883BEB4DC3A0468F734EA251E6D5B13AC51:39B1E812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE|[#4:0]|
|1   |#5:1|OUser |reader|{PBKDF2WithHmacSHA256}1168D930D370A0FB1B6FA11CAFF928CCB412A153C127C25F:0C287793DF156FB72E6E2D9D756E616995BBAC495D4A1616:65536|ACTIVE|[#4:1]|
|2   |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}22D3068CC3A39C08A941B4BF8B4CEB09D2609C20661529E3:8D6DA7FB4AF329234CA643663172EE913764E3096F63D007:65536|ACTIVE|[#4:2]|
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+

3 item(s) found. Query executed in 0.736 sec(s).

Pour modifier le mot de passe de l'utilisateuradmin, utilisez la commande suivante:

update ouser set password = 'new_account_password' where name = 'admin'

Pour désactiver l'utilisateurwriter, modifiez l'état deACTIVE àSUSPENDED.

update ouser set status= 'SUSPENDED' where name = 'writer'

Pour supprimer entièrement le comptereader de la base de données, utilisez:

drop user reader

Si vous avez effectué toutes les opérations ci-dessus et que vous avez à nouveau consulté la liste des comptes, vous verrez apparaître le résultat suivant. Un des comptes est manquant et un autre est suspendu:

Output+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+
|#   |@RID|@CLASS|name  |password                                                                                                                     |status   |roles |
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+
|0   |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}6668FC52BF1D2883BEB4DC3A0468F734EA251E6D5B13AC51:39B1E812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE   |[#4:0]|
|1   |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}22D3068CC3A39C08A941B4BF8B4CEB09D2609C20661529E3:8D6DA7FB4AF329234CA643663172EE913764E3096F63D007:65536|SUSPENDED|[#4:2]|
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+

Une fois toutes les tâches de gestion des utilisateurs terminées, vous pouvez vous déconnecter de la base de données (c'est-à-dire la fermer) en tapant:

disconnect

Gestion des comptes d'utilisateur OrientDB à partir d'OrientDB Studio

Dans cette section, vous apprendrez à gérer les comptes d’utilisateur OrientDB à partir d’OrientDB Studio. Pour commencer, lancez le studio en visitanthttp://your_server_ip:2480 dans votre navigateur. Si vous avez restreint l’accès au Studio à l’étape 1, vous devrez le réautoriser.

Le premier écran que vous verrez est un écran de connexion. Connectez-vous en utilisantroot et le mot de passe vous lorsque vous avez installé OrientDB. Une fois connecté, cliquez sur l'ongletSecurity. Sur cette page, vous verrez les trois utilisateurs par défaut.

Pour changer le mot de passe du compteadmin:

  1. Cliquez surEDIT sous sa colonneActions, ce qui fera apparaître une petite fenêtreEdit User.

  2. Modifiez le mot de passe dans le champpassword.

  3. Cliquez surSAVE USER.

Pour supprimer le comptereader:

  1. Cliquez sur le boutonDELETE dans la colonneActions du compte.

Pour suspendre le comptewriter:

  1. Cliquez surEDIT sous sesActions, ce qui fera apparaître une petite fenêtreEdit User.

  2. Dans le menu déroulantStatus, sélectionnezSUSPENDED.

  3. Cliquez surSAVE USER.

Dans l’étape suivante, vous apprendrez à chiffrer une base de données OrientDB au repos.

[[step-4 -—- encrypting-the-orientdb-database]] == Étape 4 - Crypter la base de données OrientDB

OrientDB prend en charge les bases de données cryptées, vous permettant une sécurité supplémentaire sur vos données stockées. Vous pouvez uniquement écrire une base de données OrientDB lors de sa création; si vous avez besoin de chiffrer une base de données existante, vous devrez l’exporter et l’importer dans une base de données chiffrée. Pour cette section, nous allons spécifier que la base de données doit être chiffrée au moment de la création.

OrientDB prend en charge les algorithmes de chiffrement AES et DES, mais AES est préféré car il est plus puissant. Nous devrons définir la clé de cryptage, créer la base de données et spécifier la méthode de cryptage (AES ou DES). Notez que la longueur de la clé de chiffrement doit être de 24 caractères et que les deux derniers caractères doivent être==.

Pour générer une clé de chiffrement, vous pouvez utiliserpwgen, un outil de génération de mot de passe.

sudo apt-get install pwgen

Générez ensuite une clé unique de 24 caractères se terminant par== avec la commande suivante:

echo `pwgen 22 1`==

N'oubliez pas de stocker cette clé dans un endroit sûr, comme un mot de passe. Pour définir la clé de cryptage d'une nouvelle base de données à créer, tapez ce qui suit dans la console OrientDB:

config set storage.encryptionKey Ohjojiegahv3tachah9eib==

Créez ensuite la base de données cryptée à l'aide de cette clé. Cela crée la base de données chiffrée basée sur des documents dans le système de fichiers local (plocal).

create database plocal:/opt/orientdb/databases/name_of_encrypted_db root root_password plocal document -encryption=aes

Vous serez automatiquement connecté à la nouvelle base de données et l'invite changera pour refléter cela. Pour vous déconnecter de la base de données, tapez simplement:

encrypted-db}>'>disconnect

N'oubliez pas que la clé de chiffrement utilisée pour chiffrer une base de données OrientDB n'est pas stockée sur le système. Lorsque vous souhaitez interagir avec la base de données à partir de la console, vous devez taper la même commande que celle utilisée pour définir la clé de cryptage.

config set storage.encryptionKey Ohjojiegahv3tachah9eib==

Ensuite, pour ouvrir la base de données, vous devez taper:

connect plocal:/opt/orientdb/databases/name_of_encrypted_db admin admin_password

Notez que vous pouvez créer une nouvelle base de données à partir de OrientDB Studio, mais vous ne pouvez pas en créer une chiffrée. Au moment de la publication, vous ne pouvez créer une base de données chiffrée qu'à partir de la console.

Conclusion

Dans ce didacticiel, vous avez restreint l’accès à une installation d’OrientDB, géré les comptes d’utilisateur à partir de la console et de l’UI Web, et également chiffré une base de données OrientDB au repos. Ce sont des configurations de sécurité élémentaires mais importantes que vous pouvez effectuer pour renforcer le profil de sécurité de votre serveur OrientDB et de ses bases de données.

Pour l'instant, vous pouvez accéder à des informations supplémentaires sur la sécurité OrientDB en visitantthis OrientDB documentation sur ce sujet.