authentification machine pour wpa/802.1x
L'utilisation du wp_supplicant permet l'auth sur le wifi ou en filaire.
Dans les deux cas on définit l'interface dans /etc/network/interfaces :
auto enp2s0
iface enp2s0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant_wired.conf
allow-hotplug wlp0s20f3
iface wlp0s20f3 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant_wifi.conf
en filaire :
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=2
ap_scan=0
network={
key_mgmt=IEEE8021X
eap=PEAP
identity="host/prof-226.diderot.org"
password=hash:AAAAAAAAAAAAAAAAAAAAAAAAAAA
phase1="peaplabel=1"
phase2="auth=MSCHAPV2"
eapol_flags=0
}
en wifi :
ctrl_interface=DIR=/var/run/wpa_supplicant
network={
ssid="diderot-secure"
scan_ssid=1
key_mgmt=WPA-EAP
eap=PEAP
identity="host/prof-226.diderot.org"
password=hash:AAAAAAAAAAAAAAAAAAAAAAAAAAA
phase1="peaplabel=1"
phase2="auth=MSCHAPV2"
}
le problème c'est d'arriver à récupérer le hash du mot de passe pour le faire à partir du mdp en clair :
echo -n MySecretPassword | iconv -t utf16le | openssl md4
Il est sensé être présent dans le keytab kerberos, mais cela ne fonctionne pas, il faut le mettre au bon format ?
Principe
Voici la méthode, à automatiser : il faut ajouter dans le smb.conf :
kerberos method = secrets and keytab
dedicated keytab file = /etc/krb5.keytab
kinit admin
créer le keytab machine :
net ads keytab create -k
puis avec https://github.com/sosdave/KeyTabExtract/raw/master/keytabextract.py
./keytabextract.py /etc/krb5.keytab| grep "NTLM HASH" | sed "s/^.*: \([a-f0-9]*\)/\1/"
On obtient le hash qui permet de s'authentifier en mschapv2 machine. Ne marche pas...
automatisation
Il faut un compte sans mot de passe pour récupérer le keytab..., ou alors le faire côté serveur. C'est probablement le plus simple. www-admin peut-il extraire un keytab arbitraire pour une machine ?
Uniquement sur l'ad, donc
- soit on le fait en ssh lors de l'installation du paquet comme pour www-admin sur le se4fs, et on le met directement dans le sambaedu.conf local:
ssh -i /etc/sambaedu/id_rsa root@se4ad pdbedit -Lw prof-226$ | cut -d ":" -f4
Fonctionne parfaitement mais root@client est root sur l'AD avec la clé ssh. aïe ! on peut limiter le risque en poussant le hash depuis le se4fs, mais cela veut dire qu'il faudrait avoir un évenement sur le se4fs qui provoque la copie du hash.
curl http://se4/config/domaine.php?host=xxxx
exec("ssh root@xxx configure_wpa $(ssh root@se4ad...)")
ne fonctionne pas :
- soit on génère le keytab avec admin%passwd en local ( plus safe mais ne fonctione pas)
net ads keytab create -U $config_admin_name%$config_admin_password
le script python peut être modifié pour donner directement le hash, et mis dans le paquet.
On met le hash dans la conf, pour réutilisation ultérieure.
Conf 802.1x
La conf doit être faite dès l'ipxe. il faut donc passer une option wired_auth en preseed.