You are not logged in.
J'ai pas mal galéré pour mettre en place du SSO pour glpi, j'ai testé à peu près toutes les méthodes disponibles (sur le forum, sur le wiki, sur internet...)
Soit le tutorial ne marchait pas (ou en tout cas je n'arrivais pas à le faire fonctionner), soit il ouvrait d'énormes failles de sécurité (je pense à ce post dans le forum par exemple: http://www.glpi-project.org/forum/viewt … p?id=27203 )
Je suis finalement arrivé à Kerberos, qui est trivialement simple à mettre en place et à priori parfaitement sécurisé.
La méthode part du principe que glpi est installé sur un serveur Debian 6, et doit parler avec un active directory, mais de minimes adaptations doivent suffire pour s'en servir sur du n'importe quel linux.
Je citerais volontiers les différents blogs dont je me suis inspiré, mais comme j'ai mis ça en place y'a 6 mois, je n'ai plus les détails sous la main.
Je recopie notre wiki interne qui est en anglais:
How it works
Single Sign On in GLPI works that way: The browser sends its session informations to Apache, which Apache authenticates against the Active Directory using Kerberos.
When the logon is successfull, Apache sets the $_SERVER['REMOTE_USER'] variable to the username it received from the browser.
GLPI uses this variable as the logged-on username.
Voila, Single Sign On!
1/ Initial Set-up
What follows must only be done once. We'll talk about what needs to be done to add a new client afterwards.
a) Required packages
We'll assume you are setting it up on a debian machine.
This is the command needed to install the required packages, as of Debian squeeze:
aptitude install heimdal-clients heimdal-kdc libhdb9-heimdal libkadm5clnt7-heimdal libkadm5srv8-heimdal libkdc2-heimdal libsl0-heimdal
b) /etc/krb5.conf
This file needs to be edited to tell Kerberos how to authenticate against the multiples Domain Controllers.
This is an example configuration that allows authentication against DOM1 and DOM2 domains:
[libdefaults]
default_realm = DOM1.GRP
[domain_realm]
.DOM1.grp = DOM1.GRP
.DOM2.grp = DOM2.GRP
[realms]
DOM1.GRP = {
admin_server = DOM1DC.DOM1.grp
kdc = DOM1DC.DOM1.grp
}
DOM2.GRP = {
admin_server = DOM2DC.DOM2.grp
kdc = DOM2DC.DOM2.grp
#
# If using Windows2003 write
#
# kdc = tcp/DOM2DC.DOM2.grp
#
# instead.
}
When this part is done, you should be able to test the authentication against any of the AD using this:
kinit user@DOM1.GRP
klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: user@DOM1.GRPIssued Expires Principal
Sep 18 14:58:21 Sep 19 00:57:46 krbtgt/DOM1.GRP@DOM1.GRP
Note: The use of lowercase/capital letters is VERY important when using Kerberos. Please follow the examples thoroughly!
c) Apache
First, let's create a directory where all the keytab files will be stored:
mkdir /etc/apache2/keytab
Now, we'll configure the apache website definition to use kerberos authentication:
Edit the file
/etc/apache2/sites-enabled/glpi
And add this to the virtualhost definition:
Alias /topsecret/ "/var/www/glpi"
<Directory "/var/www/glpi">
AuthType Kerberos
KrbAuthRealms DOM1.GRP
KrbServiceName HTTP
Krb5Keytab /etc/apache2/keytab/glpi.krb5keytab
KrbMethodNegotiate on
KrbMethodK5Passwd off
require valid-user
</Directory>
2/ Set-up for new clients
On the AD domain controller, create a new user. We'll call it "SvcGlpiSso" and use "long!$longp2ass3word" as a password in this example.
You can create such a user with this small script:
import-module ActiveDirectory
$password = "long!$longp2ass3word"
$type= "svc"
$nom = "GlpiSSO"
$FullName = $type+" "+$nom
$OU = "OU=Services,OU=Accounts,OU=LGC,DC=$Env:lgctrigram,DC=grp"
NEW-ADUser -name "SvcGlpiSso" -path $OU -samaccountname "SvcGlpiSso" -AccountPassword (ConvertTo-SecureString -AsPlainText "$password" -Force) -Givenname $type -surname $nom -displayname $FullName -Enabled $true -PasswordNeverExpires $true
Open a CMD window, and type this command (obviously you'll need to correct it to make it correspond to the new domain...)
ktpass -princ HTTP/GLPIHOSTNAME@DOM2.GRP -mapuser SvcGlpiSso@DOM2.GRP -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass long!$longp2ass3word -out c:\temp\DOM2.krb5keytab
This will give you a kerberos keytab file that you must send to the webserver (GLPIHOSTNAME)
I suggest you use Winscp for this purpose
Once the keytab is on the webserver, you need to copy it to /etc/apache2/keytab/
You then need to add this keytab to the keytab used by Glpi:
ktutil copy DOM2.krb5keytab glpi.krb5keytab
You then must make sure the keytab is readable only by the webserver user:
chown www-data:www-data DOM2.krb5keytab
chmod 400 DOM2.krb5keytab
Offline
Merci ..! J'essayerai de l'adapter pour une centos à l'occasion.
Offline
Bonjour,
j'ai implémenté la solution décrite pa r Edzilla,
tout semble fonctionner, sauf que à la relance de apache2 j'ai le message suivant:
* Starting web server apache2 Syntax error on line 44 of /etc/apache2/sites-enabled/000-default:
Invalid command 'KrbAuthRealms', perhaps misspelled or defined by a module not included in the server configuration
Action 'start' failed.
The Apache error log may have more information.
Auriez-vous une idée de ce qui peu provoquer cette situation ?
J'ai implémenté une solution GLPI 0.83.7 motorisée par ubuntu 12.04 LTS
Celle-ci fonctionne en prod avec la solution décrite dans le post http://www.glpi-project.org/forum/viewt…p?id=27203
Qui me pose des problèmes d'affichage sous IE.
Merci
Last edited by Lestatdelioncour (2013-03-27 20:03:59)
Offline
As tu activé le module auth_kerb? (a2enmod auth_kerb sous debian)
Offline
Bonjour EDZILLA,
Je rencontre un problème lors de la mise en place de ton tuto.
Lorsque sur le poste client (Windows 7) celui-ci tente de se connecter au serveur, j'ai le message d'erreur suivant : 500 Internal Server Error.
Dans le log d'Apache j'ai le message suivant :
[error] [client 192.168.126.2] gss_acquire_cred() failed : Unspecified GSS failure. Minor code may provide more information (Key table entry not found)
Ce n'est pas le premier tuto sur Apache-Kerberos(AD)-SSO ou le tuto se conclut par cette erreur.
As-tu une idée ?
En te remerciant par avance.
Ps : Mon poste de test est un Windows 7, dans la gestion des polices j'ai donc autorisé l’interprétation du ticket Kerberos en RC4. Mon serveur est un 2008R2.
Last edited by le-dahu (2013-06-04 14:26:10)
Offline
J'ai déjà eu cette erreur, de mémoire, c'est quand le keytab ne correspond pas à ce que tu envois.
Dans les trucs à vérifier aussi:
- le servicename dans le fichier de conf apache/la création du user.
- que pour le serveur qui héberge apache, dans son fichier /etc/hosts soit associé le nom de domaine sur lequel se trouve glpi, et l'ip qui est utilisé pour se connecter à ce nom de domaine.
Ca peut paraitre con, mais j'ai eu droit à des erreurs assez mystiques avec ce deuxième point...
Offline
Merci pour ta réponse edzilla,
Dans mon fichier /etc/hosts j'ai bien :
127.0.0.1 localhost
192.168.126.77 glpi.exadirectory.lan glpi
Je comprend pas la notion de service name dans Apache (je suis novice dans Linux )
Selon toi est ce que le serveur Linux doit être membre du domaine AD (via une jonction Winbind ?)
Last edited by le-dahu (2013-06-04 15:49:15)
Offline
En admettant que tu restes assez proche de mon example:
Ton nom de domaine est DOM.GRP
ton glpi est accessible sur glpi.toto.com
Ton fichier de configuration de site (/etc/apache2/sites-enabled/glpi) doit mentionner
KrbAuthRealms DOM.GRP
KrbServiceName HTTP
Une fois ton utilisateur activedirectory créé, tu dois lui créer un keytab:
ktpass -princ HTTP/glpi.toto.com@DOM.GRP -mapuser SvcGlpiSso@DOM.GRP -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass long!$longp2ass3word -out c:\temp\DOM2.krb5keytab
Il est vraiment impératif que tout corresponde bien, en particulier à la création de ton user par rapport aux valeurs dans le fichier de conf apache, et à ce que tu rentres pour te connecter à ton glpi
Offline
Selon toi est ce que le serveur Linux doit être membre du domaine AD (via une jonction Winbind ?)
Non, dans ce scénario la ça n'a pas d’intérêt (c'est même tout le côté ultra commode)
Offline
Pour être un peu plus précis, je teste le SSO Kerberos de façon générale et non spécifiquement pour GLPI. Je vais donc un VI de /etc/apache2/sites-enabled/000-default et je rajoute à la fin de ce fichier les informations suivantes :
Alias /topsecret/ "/var/ww w/secret"
<Directory "/var/w ww/secret">
AuthType Kerberos
KrbAuthRealms EXADIRECTORY.LAN
KrbServiceName HTTP
Krb5Keytab /etc/apache2/keytab/glpi.krb5keytab
Krbmethodnegotiate on
KrbmethodeK5Passwd off
require valid-user
</Directory>
Last edited by le-dahu (2013-06-04 16:57:05)
Offline
Au niveau du keytab, j'ai fait la ligne de code suivante :
ktpass -princ HTTP/glpi.exadirectory.lan@EXADIRECTORY.LAN -mapuser SvcGlpiSso@EXADIRECTORY.LAN -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass long!$longp2ass3word -out c:\glpi.krb5keytab
J'ai utilisé WinScp pour faire le transfert de la clé vers /etc/apache2/keytab, puis modification des droits pour ww w-data:ww w-data avec les droits 777.
Redémarrage du service Apache2.
Offline
Maintenant j'ai une nouvelle erreur côté client "401 - Autorization Required" car il me prompt pour un login et un mot de passe, et même en saisissant une information correcte visiblement il authentifie pas.
En revanche si directement sur le serveur web je fais un kinit de mon utilisateur, celui-ci me crée correctement le ticket.
Au niveau du log d'Apache l'erreur est désormais : gss_accept_sec_context() failed : An unsupported mechanism was requested (unknown error).
Dans le doute, j'ai créé un nouvel utilisateur dans mon AD, j'ouvre une session et la : Après la purge du cache IE quand l'utilisateur j'ouvre l'URL http://glpi.exadirectory.lan/topsecret il me demande une authentification utilisateur/password. Si je saisie un login et mot de passe de mon compte AD alors la variable remonte correctement, page PHP :
<?
echo $_SERVER['REMOTE_USER'];
?>
Donc l'authentification Kerberos fonctionne mais pas automatiquement.
Ps : Désolé pour le multi-post et les espaces entre les "W", mais le forum à une restriction idiote (même en mettant les informations entre balise code) ...
Offline
bonjour
J'ai suivi toutes les étapes et le message d'erreur suivant et ne peux pas vous connecter GLPI:
[Thu Aug 22 17:20:11 2013] [debug] src/mod_auth_kerb.c(1939): [client 10.138.2.200] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Aug 22 17:20:11 2013] [debug] src/mod_auth_kerb.c(1939): [client 10.138.2.200] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Aug 22 17:20:11 2013] [debug] src/mod_auth_kerb.c(1278): [client 10.138.2.200] Acquiring creds for HTTP@sedecentos101.cmloures.pt
[Thu Aug 22 17:20:11 2013] [debug] src/mod_auth_kerb.c(1138): [client 10.138.2.200] GSS-API major_status:000d0000, minor_status:000186a8
[Thu Aug 22 17:20:11 2013] [error] [client 10.138.2.200] gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, )
[Thu Aug 22 17:21:17 2013] [debug] src/mod_auth_kerb.c(1939): [client 10.138.2.200] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Aug 22 17:21:17 2013] [debug] src/mod_auth_kerb.c(1278): [client 10.138.2.200] Acquiring creds for HTTP@sedecentos101.cmloures.pt
[Thu Aug 22 17:21:17 2013] [debug] src/mod_auth_kerb.c(1138): [client 10.138.2.200] GSS-API major_status:000d0000, minor_status:000186a8
[Thu Aug 22 17:21:17 2013] [error] [client 10.138.2.200] gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, )
merci
Last edited by nelson_nunes (2013-08-22 18:22:59)
Offline
ce et ma configuration krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = CMLOURES.PT
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
# EXAMPLE.COM = {
# kdc = kerberos.example.com
# admin_server = kerberos.example.com
# }
LOURES.PT = {
kdc = sededc03.cmloures.pt
kdc = sededc04.cmloures.pt
}
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
.loures.pt = LOURES.PT
loures.pt = LOURES.PT
quand je lance la commande " kinit -k -t /etc/keytab/LOURES.keytab HTTP/sedecentos.loures.pt@LOURES.PT" obtenu l'erreur suivante:
kinit: KDC has no support for encryption type while getting initial credentials
comment puis-je corriger cette erreur?
J'ai l'AD en 2008R2
Offline
Bonjour,
Merci pour votre experience partagé.
Cependant je n'arrive pas à la mettre en place.
Dans le fichier /etc/apache2/sites-available/default
J'ai bien rajouté toutes les informations concernant kerberos (il met inutile pour moi de créer un nouveau site car glpi est présent dans le fichier de conf default).
Quand je met KrbServiceName HTTP/glpi.domain.local@domain.LOCAL (trouvé sur des autres forum). Je tombe sur la page d'identification de glpi.
Quand je met KrbServiceName HTTP , j'ai une erreur Internal Server Error sur ma page internet avec comme log dans /var/log/apache2/error.log gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, Key table entry not found)
Avez vous une idée?
Merci a vous
Last edited by Feasson Yohann (2013-10-01 16:47:42)
Offline
Pas d'idées?
Merci à vous.
Offline
Bonjour,
Merci pour votre experience partagé.
Cependant je n'arrive pas à la mettre en place.
Dans le fichier /etc/apache2/sites-available/default
J'ai bien rajouté toutes les informations concernant kerberos (il met inutile pour moi de créer un nouveau site car glpi est présent dans le fichier de conf default).
Quand je met KrbServiceName HTTP/glpi.domain.local@domain.LOCAL (trouvé sur des autres forum). Je tombe sur la page d'identification de glpi.
Quand je met KrbServiceName HTTP , j'ai une erreur Internal Server Error sur ma page internet avec comme log dans /var/log/apache2/error.log gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, Key table entry not found)
Avez vous une idée?
Merci a vous
A priori ce genre d'erreur provient du fait qu'il n'arrive pas à trouver de correspondance entre le contenu du keytab et le domaine qui essaie de s'authentifier.
KrbServiceName HTTP/glpi.domain.local@domain.LOCAL => doit correspondre à votre domaine active directory
Offline
Merci edzilla ce petit tuto m'a bien aidé.
Tout marche parfaitement bien.
A noter que la partie keytab peut être faite directement depuis la machine client dans le domaine AD:
net ads keytab create -U admin
net ads -U admin keytab add HTTP
Idem pour joindre la machine au domaine:
net ads join -U admin
Offline
J'ai un problème sur le tuto, c'est quoi comme, fichier le glpi de /etc/apache2/sites-enabled/glpi ?
Car je suis sur Centos7 et que mon apache c'est Apache/HTTPD et que je ne trouve nul part un répertoire sites-enabled.
Offline
J'ai un problème sur le tuto, c'est quoi comme, fichier le glpi de /etc/apache2/sites-enabled/glpi ?
Car je suis sur Centos7 et que mon apache c'est Apache/HTTPD et que je ne trouve nul part un répertoire sites-enabled.
Je ne connais pas particulièrement centos, je bosse uniquement sur du debian/ubuntu, mais c'est le fichier où tu configures ton virtualhost
Offline
Désolé je suis vraiment un débutant sur Linux, tu aurais pas une idée d'où peut être ce fichier de conf ? ou d'avoir une parti de ton fichier conf pour le comparer au mien et plus facilement le trouver ? ou meme une ligne de commande pouvant m'indiquer quelle est le fichier de conf de virtualhost ?
j'ai trouvé ça comme commande : apachectl -S mais j'ai du mal à comprendre ce que ça fait.
Last edited by JenkinsTanneur (2017-01-20 16:49:11)
Offline
Et comment il est censé être crée le fichier glpi.krb5keytab ? car je ne le trouve pas
Offline
Ok j'ai enfin trouver le fichier virtualHost (c'est mon fichier GLPI.conf situer dans etc/httpd/conf.d/glpi.conf) mais imposible de mettre la main sur glpi.krb5keytab.
On doit le crée nous meme ?
Offline
Ok finalement reusis pour mon premier domaine, les utilisateur de DOM1.GROUP peuvent se co de façon automatique a GLPI.
Mais j'ai un deuxieme domaine (DOM2.GROUP), je doit modifier comment les fichiers afin que le deuxième soit prit en compte en meme temps ?
Offline
Ok j'ai reusis, c'étais tout con en faite.
Offline