Création utilisateurs Zabbix
Sauter à la navigation
Sauter à la recherche
(Page créée avec « ==Présentation== Cette page a pour objet de présenter un script PHP permettant de créer automatiquement des utilisateurs précédemment récupérés depuis un Active Di... ») |
|||
Ligne 1 : | Ligne 1 : | ||
==Présentation== | ==Présentation== | ||
Cette page a pour objet de présenter un script PHP permettant de créer automatiquement des utilisateurs précédemment récupérés depuis un Active Directory dans Zabbix. | Cette page a pour objet de présenter un script PHP permettant de créer automatiquement des utilisateurs précédemment récupérés depuis un Active Directory dans Zabbix. | ||
+ | |||
+ | Ce script s'appuie sur l'utilisation du script "[[Technique/PHP/Scripts/Synchronisation_Active_Directory|get_ADusers.php]]". | ||
==Script== | ==Script== |
Version du 20 septembre 2019 à 08:24
Présentation
Cette page a pour objet de présenter un script PHP permettant de créer automatiquement des utilisateurs précédemment récupérés depuis un Active Directory dans Zabbix.
Ce script s'appuie sur l'utilisation du script "get_ADusers.php".
Script
Le script, pouvant se nommer SynchADusers_zabbix.php
, contient, à ce jour, le contenu suivant :
<?php
// Inclusion du script get_ADusers.php pour récupérer les utilisateurs depuis l'AD
include('./get_ADusers.php');
// Groupes AD dont les utilisateurs devront être récupérés
$groups = array(
'GG_DSI_ADMINS',
'GG_DSI_ADMINS_TOOLS',
);
// Appel du script pour récupérér les utilisateurs AD
$ADusers = get_ADusers($groups);
///////////////////////////////
// Déclaration des variables //
///////////////////////////////
// Variable contenant la liste des utilisateurs Zabbix
$ZBXusers = array();
//////////////////////////////////////
// Fin de déclaration des variables //
//////////////////////////////////////
////////////////
// Paramètres //
////////////////
// Password par défaut (non utilisé dans l'outil car LDAP)
$defautl_password = "2f0a4ec693d34d90e50982d77bb2bfd7";
// Serveur MySQL
$mysql_server = "localhost";
// Utilisateur MySQL
$mysql_username = "zabbix_user";
// Mot de passe utilisateur MySQL
$mysql_password = "xxxxxxxxxxxxxxx";
// Base de données MySQL
$mysql_dbname = "zabbix_db";
// Port MySQL
$mysql_port = "3306";
// Socket MySQL
$mysql_socket = "/local/mysql/current/mysql.sock";
// ID du groupe Exploitation dans Zabbix (pourra être récupéré dynamiquement ultèrieurement)
$ZBXgroupId = "13";
////////////////////////
// Fin des paramètres //
////////////////////////
///////////////////////////////////////
// Ouverture de la connexion à MySQL //
///////////////////////////////////////
// Etablissement de la connexion au serveur MySQL
$mysql_cnx = new mysqli($mysql_server, $mysql_username, $mysql_password, $mysql_dbname, $mysql_port, $mysql_socket);
// Si présence d'erreur
if ($mysql_cnx->connect_errno)
{
echo "Error: Échec d'établir une connexion MySQL, voici pourquoi : \n";
echo "Errno: " . $mysql_cnx->connect_errno . "\n";
echo "Error: " . $mysql_cnx->connect_error . "\n";
die;
}
////////////////////////////////////////////////
// Fin de l'ouverture de la connexion à MySQL //
////////////////////////////////////////////////
//////////////////////////////////////////
// Récupération des utilisateurs Zabbix //
//////////////////////////////////////////
// Requête MySQL pour récupérer la liste des utilisateurs existants dans Zabbix
$mysql_query = "SELECT * FROM zabbix_db.users";
// Lancement de la requête et arrêt si erreur
if (!$mysql_result = $mysql_cnx->query($mysql_query)) {
echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :\n";
echo "Query: " . $mysql_query . "\n";
echo "Errno: " . $mysql_cnx->errno . "\n";
echo "Error: " . $mysql_cnx->error . "\n";
die;
}
// Si aucun résultat
if ($mysql_result->num_rows === 0) {
echo "Aucun résultat retourné.";
die;
}
// Pour chaque utilisateur trouvé
while ($ZBXuser = $mysql_result->fetch_assoc())
// Ajout de cet utilisateur dans un tableau
$ZBXusers[] = $ZBXuser;
// Vidage des résultats
$mysql_result->free();
/////////////////////////////////////////////////
// Fin de récupération des utilisateurs Zabbix //
/////////////////////////////////////////////////
///////////////
// Fonctions //
///////////////
// L'arrêt du SELECT si erreur est toujours géré de la même manière
function stopSelectIfError($mysql_query) {
// Récupération de la connexion
global $mysql_cnx;
// Lancement de la requête et arrêt si erreur
if (!$mysql_result = $mysql_cnx->query($mysql_query)) {
echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :\n";
echo "Query: " . $mysql_query . "\n";
echo "Errno: " . $mysql_cnx->errno . "\n";
echo "Error: " . $mysql_cnx->error . "\n";
die;
}
//Renvoi du résultat
return $mysql_result;
}
// L'arrêt de l'INSERT si erreur est toujours géré de la même manière
function stopInsertIfError($mysql_query) {
// Récupération de la connexion
global $mysql_cnx;
// Lancement de la requête et arrêt si erreur
if (!$mysql_cnx->query($mysql_query)) {
echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :\n";
echo "Query: " . $mysql_query . "\n";
echo "Errno: " . $mysql_cnx->errno . "\n";
echo "Error: " . $mysql_cnx->error . "\n";
die;
}
}
// La table des utilisateurs n'étant pas en AUTO_INCREMENT, il faut créer une fonction pour récupérer l'id
function getUserIdDispo() {
// Récupération de la connexion
global $mysql_cnx;
// Requête pour récupérer le dernier id utilisé
$mysql_query = "SELECT MAX(userid) AS last_userid FROM zabbix_db.users";
// Lancement de la requête et arrêt si erreur
$mysql_result = stopSelectIfError($mysql_query);
// Récupération du résultat
$row = $mysql_result->fetch_assoc();
//Renvoi du résultat
return $row['last_userid'] + 1;
}
// La table des groupes n'étant pas en AUTO_INCREMENT, il faut créer une fonction pour récupérer l'id
function getUsersGroupsIdDispo() {
// Récupération de la connexion
global $mysql_cnx;
// Requête pour récupérer le dernier id utilisé
$mysql_query = "SELECT MAX(id) AS last_users_groupsid FROM zabbix_db.users_groups";
// Lancement de la requête et arrêt si erreur
$mysql_result = stopSelectIfError($mysql_query);
$row = $mysql_result->fetch_assoc();
return $row['last_users_groupsid'] + 1;
}
///////////////////////
// Fin des fonctions //
///////////////////////
//////////////////////////////
// Traitement des résultats //
//////////////////////////////
// Pour chaque utilisateur de l'AD
foreach($ADusers as $ADuser)
// Si l'utilisateur possède tous les champs requis (cn, name, surname, mail (optionnel))
if ((isset($ADuser['cn']) && isset($ADuser['name']) && isset($ADuser['surname']) && isset($ADuser['mail'])))
{
// Si l'utilisateur n'existe pas déjà dans Zabbix
if (!in_array($ADuser['cn'], array_column($ZBXusers, 'alias')))
{
// Récupération du prochain id utilisateur disponible
$userIdDispo = getUserIdDispo();
// Récupération du prochain id groupe disponible
$usersGroupsIdDispo = getUsersGroupsIdDispo();
// Requête pour ajouter l'utilisateur dans Zabbix
$mysql_query = "INSERT INTO zabbix_db.users VALUES ('$userIdDispo', '".$ADuser['cn']."', '".$ADuser['name']."', '".$ADuser['surname']."', '$defautl_password', '', '1', '0', 'en_GB', '30s', '1', 'default', '0', '', '0', '50')";
// Exécution de la requête
stopInsertIfError($mysql_query);
// Récupération de l'id de l'utilisateur précédemment créé
$last_userid = getUserIdDispo() - 1;
// Requête pour ajouter l'utilisateur dans le groupe Zabbix désiré
$mysql_query = "INSERT INTO zabbix_db.users_groups VALUES ('$usersGroupsIdDispo', '$ZBXgroupId', '$last_userid')";
// Exécution de la requête
stopInsertIfError($mysql_query);
}
}
/////////////////////////////////////
// Fin du traitement des résultats //
/////////////////////////////////////
// Fermeture de la connexion au serveur MySQL
$mysql_cnx->close();
?>