Sécurité et Gestion des utilisateurs
En savoir plus : http://istsos.org/en/latest/doc/security.html#use-cases
Securité
IstSOS expose trois points d'accès :
Path | Type |
---|---|
/istsos/{service_name} | SOS server |
/istsos/wa | REST API |
/istsos/{admin} | HTML Files |
- Le «serveur SOS» expose la bibliothèque istSOS. Cet exposition permet d'utiliser les services SOS permettant d'integrer et d'interroger les capteurs.
- L '«API REST» expose l'interface WAlib REST, permet de faire facilement toutes les demandes d'administration avancées.
- Les "Fichiers HTML" sont juste le lieu où tous les fichiers HTML, CSS, JavaScript, Images, etc. sont stockés et utilisés par les interfaces d'administration Web et de modules.
Il existe différents niveaux de protection en fonction des besoins des utilisateurs. Dans les paragraphes suivants, nous présenterons 4 cas d'utilisation parmi lesquels vous pouvez choisir pour protéger votre serveur istSOS. Bien sûr, si vous êtes familiarisé avec la fonctionnalité d'authentification Apache, vous pouvez configurer istSOS pour des cas plus spécifiques.
Totalement ouvert
Ce cas est le plus simple et c'est la façon dont istSOS est installé par défaut. Aucune protection n'est appliquée, tout est ouvert.
Attention Soyez prudent! Laisser votre istSOS ouvert sur le web permettra à tout le monde de jouer avec votre base de données, et de plus permettra la création de procédures virtuelles. Cela expose votre serveur à des menaces d'injection de code malveillant. Utilisez donc cette configuration uniquement dans des réseaux vraiment fiables.
Here an example on how to configure the file (/etc/apache2/sites-enabled/000-default.conf):
<VirtualHost *:80>
ServerName istsos.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
WSGIScriptAlias /istsos /usr/local/istsos/application.py
Alias /istsos/admin /usr/local/istsos/interface/admin
Alias /istsos/modules /usr/local/istsos/interface/modules
<LocationMatch /istsos>
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride all
Require all granted
</LocationMatch>
</VirtualHost>
Fermé
Le mode fermé bloque toutes les demandes non authentifiées à istSOS lib, WAlib et les fichiers HTML.
Here an example on how to configure the file (/etc/apache2/sites-enabled/000-default.conf):*
<VirtualHost *:80>
ServerName istsos.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
WSGIScriptAlias /istsos /usr/local/istsos/application.py
Alias /istsos/admin /usr/local/istsos/interface/admin
Alias /istsos/modules /usr/local/istsos/interface/modules
<Location /istsos>
AuthType Basic
AuthName "Welcome to istSOS"
AuthBasicProvider wsgi
WSGIPassAuthorization On
WSGIAuthUserScript /usr/local/istsos/auth.py
Require valid-user
</Location>
</VirtualHost>
Fermé avec la page d'acceuil ouverte
Le mode fermé bloque toutes les requêtes non authentifiées à istSOS lib et WAlib. La partie HTML reste ouverte affichant la page d'accueil avec quelques informations.
Here an example on how to configure the file (/etc/apache2/sites-enabled/000-default.conf):
note: Un nom d'utilisateur (= admin) et un mot de passe (= istsos) par défaut seront créés. N'oubliez pas de modifier le mot de passe de votre utilisateur administrateur (voir la section "Gérer les utilisateurs").
<VirtualHost *:80>
ServerName istsos.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
WSGIScriptAlias /istsos /usr/local/istsos/application.py
Alias /istsos/admin /usr/local/istsos/interface/admin
Alias /istsos/modules /usr/local/istsos/interface/modules
<Location /istsos>
SetEnvIf Request_URI "/istsos/admin" noauth=1
AuthType Basic
AuthName "Welcome to istSOS"
AuthBasicProvider wsgi
WSGIPassAuthorization On
WSGIAuthUserScript /usr/local/istsos/auth.py
<RequireAny>
Require env noauth
Require valid-user
</RequireAny>
</Location>
</VirtualHost>
Hybrid
Le mode hybride bloque toute interaction non autorisée avec le HTML et le WaLib (API REST), mais ouvre complètement l'accès à l'api istSOS lib (Sensor Observation Service).
note: Avec le mode hybride, l'utilisateur non autorisé pourra enregistrer de nouveaux capteurs et envoyer des données à l'aide des requêtes POST InsertObservation et RegisterSensor.
Here an example on how to configure the file (/etc/apache2/sites-enabled/000-default.conf):
<VirtualHost *:80>
ServerName istsos.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
WSGIScriptAlias /istsos /usr/local/istsos/application.py
Alias /istsos/admin /usr/local/istsos/interface/admin
Alias /istsos/modules /usr/local/istsos/interface/modules
<Location /istsos>
# The name of the service to leave open
SetEnvIf Request_URI "/istsos/demo" noauth=1
AuthType Basic
AuthName "Welcome to istSOS"
AuthBasicProvider wsgi
WSGIPassAuthorization On
WSGIAuthUserScript /usr/local/istsos/auth.py
<RequireAny>
Require env noauth
Require valid-user
</RequireAny>
</Location>
</VirtualHost>
Hybrid avec la fermeture des resquètes d'écritures SOS
Le mode hybride sans InsertObservation et RegisterSensor empêche les utilisateurs non authentifiés d'enregistrer de nouveaux capteurs et d'envoyer des observations. Toutes les autres demandes de capteur d'observation de capteur restent ouvertes au public.
To enable this advanced mode you have to configure your /etc/apache2/sites-enabled/000-default.conf file like in the simple mode, but you have also to change the /usl/local/istsos/config.py.
Recherchez la variable hybrid dans le fichier config.py et définissez-la sur True:
hybrid = True
Here an example on how to configure the file (/etc/apache2/sites-enabled/000-default.conf).
<VirtualHost *:80>
ServerName istsos.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
WSGIScriptAlias /istsos /usr/local/istsos/application.py
Alias /istsos/admin /usr/local/istsos/interface/admin
Alias /istsos/modules /usr/local/istsos/interface/modules
<Location /istsos>
# The name of the service to leave open
SetEnvIf Request_URI "/istsos/demo" noauth=1
AuthType Basic
AuthName "Welcome to istSOS"
AuthBasicProvider wsgi
WSGIPassAuthorization On
WSGIAuthUserScript /usr/local/istsos/auth.py
<RequireAny>
Require env noauth
Require valid-user
</RequireAny>
</Location>
</VirtualHost>
Notes générales :
-
le fichier d'apache2 n'est pas accessible par l'utilisateur istsos. Pour réaliser des modifications, vous pouvez soit passer par un editeur dans le terminal (ex: vi/vim) soit en ouvrant le fichier avec l'éditeur graphique "gedit" avec la commande suivante :
sudo gedit /etc/apache2/sites-enabled/000-default.conf
-
ne pas oublier de bien vérifier les chemins mentionnés dans le fichier de configuration de apache2 afin qu'ils soient conformes avec le dossier d'installation de istsos.
-
Une fois le fichier de configuration modifié, relancer apache2 pour que les modifications soient prise en compte. Pour cela, dans le terminal, tapez la commande suivante :
sudo service apache2 restart
Exercice 1:
- Passer le serveur IstSOS en mode hybride
- Contrôler le passage du mode hybride en se connectant sur le client.
- Inserer un nouveau capteur via Postman : "RegisterSensor -Capteur_Test_Auth"
- Observer le message de retour.
- Inserer les identifiants administrateur (id:admin, mdp:istsos) via les paramètres d'authentification de la requète sur Postman. Il est possible d'ajouter l'authentification basicAuth dans les requetes POST en encodant l'utilisateur et mot de passe en base64 avec la commande suivante :
echo -n 'admin:istsos' | openssl base64
. - Essayer de nouveau l'insertion d'un capteur avec les paramètres d'authentification
- Contrôler la présence du capteur avec une requète describeSensor "Capteur_Test_Auth"
Gestion des rôles utilisateurs
Description des rôles disponbiles et gestion
Il y a quatre rôles possibles sur IstSOS donnant droit à des privilèges différents:
- admin : les utilisateurs avec le rôle d'administrateur peurvent avoir accès à toutes les fonctionnalités de IstSOS.
- datamanager : le datamanager peut modifier des mesures, les mettre à jour ainsi que changer les métadonnées des procédures.
- viewer : il s'agit du niveau le plus bas, l'utilisateur avec ce type de profile peut simplement consulter les mesures.
L'authentification est désactivée par default, elle nécéssite de modifier les paramètres de securité du serveur basé sur apache2 et son mode WSGI.
Lors de l'activation de l'authentification et des sécurités précisées après, l'utilisateur "admin" est automatiquement créé avec le mode de passe "istsos".
La création d'un utilisateur assigné à un rôle est effectuée par le biais d'un script python3.
Le script est accessible dans le dossier d'installation de istsos :
python3 scripts/user.py
notes:
- avec l'installation par defaut en .deb, le dossier d'installation se situe sur le chemin /usr/share/istsos
- ce script ne fonctionnera pas avant la création du fichier d'authentification situé ici : /services/istsos.passwd. Il se créé automatiquement lors de la sécurisation de l'accès au serveur istsos avec l'un des modes entrevus plus haut.
- l'ensemble des dossiers et fichiers sont uniquement executables avec l'utilisateur root. Pour executer un script en python vous ne pouvez pas utiliser la commande "sudo". Il est vous est nécéssaire de passer par l'utilisateur root afin d'executer le script avec le commande suivante : sudo su
Quelques commandes à connaitre
Lister les opérations/paramètres possibles :
python3 scripts/user.py -h
usage: user.py [-h] [-r] [-l] [-user user name] [-password password]
[-role role name] [-s services name]
[-p procedures name [procedures name ...]]
Use this script to manage user authentication and authorization
optional arguments:
-h, --help show this help message and exit
-r Remove the user
-l List users
-user user name The user name to add or remove
-password password Password for new user or update existing
-role role name Add a role to the given user, options: admin (or a),
networkmanager (or n), datamanager (or d), viewer (or
v). Mandatory params: -user, -role, -service
(optional, default *), -procedure (optional, default
*)
-s services name Add accessible service to a user role, options:
"admin", "datamanager", "viewer", default: "*"
-p procedures name [procedures name ...]
Define which procedure can be accessed, default: "*"
Lister les utilisateurs enregistés :
python3 scripts/user.py -l
Création d'un nouvel utilisateur :
python3 scripts/user.py -user foobar -password 1234 -role datamanager
note: dans cet exemple, l'utilisateur est "foobar" et le mot de passe est "1234", auquel on lui attribut le rôle de datamanager.
Limitier l'accès de la gestion d'un service à un utilisateur avec le paramètre -s lors de la création d'un utilisateur :
python3 scripts/user.py -user foo -password bar -role datamanager -s demo
note: dans cet exemple, l'utilisateur est "foo" et le mot de passe est "bar", auquel on lui attribut le rôle de datamanager sur le service "demo".
Ajouter un accès au service sur un utilisateur existant :
python3 scripts/user.py -user foo -role datamanager -s otherservice
Modifier le mot de passe d'un utilisateur :
python3 scripts/user.py -user admin -password batman
note: dans cet exemple, l'utilisateur "admin" voit son mot de passe modifié par "batman".
Supprimer un utilisateur :
python3 scripts/user.py -r -user foo
note: dans cet exemple, l'utilisateur "foo" est supprimé.
Exercice 2: Création d'un compte avec le rôle viewer
- Aller dans le dossier d'installation de istSOS :
cd /usr/share/istsos
- Executer la commande pour créer un utilisateur "viewer" avec l'id "porte" et le mot de passe "fenetre".
- Lister les comptes enregistrés et vérifier que que le compte "porte" existe.
- Connecter vous sur le client avec le compte viewer. (vider l'historique de votre navigateur afin de pouvoir changer d'utilisateur si cela est nécéssaire)
- Observer les accès que vous offre le compte viewer sur le client IstSOS.
- Supprimer le compte que vous venez de créer.