You are not logged in.
Pages: 1
.
Last edited by eboniface (2009-03-13 14:55:36)
Offline
Bonjour,
j'ai découvert en observant mes journaux un étrange phénomène:
J'ai dans ma configuration GLPI un certain nombre de profil dont:
- Un profil admin qui a accès à presque tout sauf la configuration de GLPI, entre autres, il a accès à la liste des utilisateurs en écriture. Le but étant qu'ils puissent ajouter des utilisateurs sans casser toute la configuration de GLPI...
- Un profil super-admin, qui a accès à tout... (je pense que je n'ai pas besoin de vous le présenter celui la... )
Ce matin, un profil admin s'est connecté, a modifié un compte profil super-admin pas utilisé, et s'est connecté sur ce compte... (il a modifié son mot de passe.)
En essayant moi même, j'ai en effet constaté:
-En tant qu'admin, je ne peux pas affecter le profil super-admin à moi même ou à un autre utilisateur. (normal)
-Par contre, toujours en tant qu'admin, on peut parfaitement modifier les informations d'un utilisateur existant possédant le profil super-admin, y compris son mot de passe!
A noter que l'utilisateur qui s'est fait chourrer son compte avait d'autres profils que super-admin.
J'ai patcher le code pour corriger mon problème:
Dans le fichier inc/user.function.php, j'ai ajouter la fonction suivant:
/** Modif Axido: return false if the user have less rigth than the user $ID
* @param $ID user to test ID
*/
function haveUserProfileRigth($ID) {
global $DB;
$prof=new Profile();
$query= "SELECT glpi_users_profiles.ID FROM glpi_users_profiles inner join glpi_profiles on glpi_users_profiles.FK_profiles = glpi_profiles.ID ";
$query.= "WHERE glpi_users_profiles.FK_users='". $ID ."' AND glpi_users_profiles.ID NOT IN (";
$query.= "SELECT glpi_users_profiles.ID FROM glpi_users_profiles inner join glpi_profiles on glpi_users_profiles.FK_profiles = glpi_profiles.ID ";
$query.= "WHERE glpi_users_profiles.FK_users='". $ID ."' " .$prof->getUnderProfileRetrictRequest("AND" )." )";
$res = $DB->query($query);
return !($DB->numrows($res));
}
Je l'appelle dans la méthode showForm de la classe User (ligne 777 du fichier inc/user.class.php)
$strict_entities=getUserEntities($ID,false);
if (!haveAccessToOneOfEntities($strict_entities)&&!$view_all){
$canedit=false;
}
$canedit=haveUserProfileRigth($ID); //Modif Axido
Last edited by eboniface (2009-03-13 14:55:26)
Offline
Pas évident à limiter....
Je verrais bien une notification à l'utilisateur pour le prévenir (comme si c'est abusif, il peut réagir)
Voir même un bouton "envoyer un nouveau mot de passe à l'utilisateur"
+
Dév. Fedora 29 - PHP 5.6/7.0/7.1/7.2/7.3/7.4 - MariaDB 10.3 - GLPI master
Certifié ITILv3 - RPM pour Fedora, RHEL et CentOS sur https://blog.remirepo.net/
Offline
Pages: 1