Nous allons réaliser ici la première étape pour intégrer des stations Linux dans un domaine Microsoft Active Directory de niveau fonctionnel 2003. L’intégration dans un domaine AD de niveau 2008 et plus sera abordé une prochaine fois.
Conditions de départ de l’expérience :
- Station : Ubuntu Linux 13.10, installation de base 64bits sans paquet supplémentaire.
- Serveur : Microsoft Windows 2003 R2, domaine Active Directory activé, niveau de fonctionnalité 2003.
- Domaine : MONRESEAU.NET
La documentation ci-dessous s’appuie beaucoup sur l’article ‘koo.fi blog – Ubuntu 12.04 Active Directory Authentication‘.
Plan :
- Station – Installer et configurer Kerberos
- Station – Installer et configurer Samba
- Station – Création du fichier Keytab
- Station – Régénération automatique du ticket Kerberos
- Station – Installer et configurer LDAP
- Serveur – Configurer les comptes utilisateurs AD
- Station – Configurer NSS
- Station – Configurer PAM
- Fin
- Liens
- Annexes
Sur la station, toutes les commandes sont lancées en tant que root ou, mieux, via sudo.
1. Station – Installer et configurer Kerberos
La station a pour nom de machine STATION01
.
Le réseau et les dépôts de paquets doivent être fonctionnels.
Ajouter les paquets nécessaires à Kerberos :
aptitude install libpam-krb5 krb5-user kstart ntp
Le domaine AD est définit en MONRESEAU.NET
. Le domaine DNS associé est mondomain.net
. L’UID des utilisateurs dans l’AD est définit à partir de 5000, ils ne seront pas reconnus avec une valeur inférieure. Il y a deux controleurs de domaine AD : dc1.monreseau.net
et dc2.monreseau.net
.
Modifier le fichier /etc/krb5.conf
:
[appdefaults] pam = { realm = MONRESEAU.NET ticket_lifetime = 1d renew_lifetime = 1d forwardable = true proxiable = false retain_after_close = false minimum_uid = 5000 try_first_pass = true ignore_root = true } [libdefaults] default_realm = MONRESEAU.NET default_keytab_name = FILE:/etc/krb5.keytab krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = false v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] MONRESEAU.NETÂ = { kdc = dc1 kdc = dc2 admin_server = dc1 default_domain = monreseau.net auth_to_local = DEFAULT } [domain_realm] .monreseau.net = MONRESEAU.NET monreeau.net = MONRESEAU.NET [login] krb4_convert = true krb4_get_tickets = false
On demande un ticket Kerberos à un controleur de domaine AD. Le ticket est demandé pour un compte qui a le droit d’ajouter une nouvelle station dans le domaine AD, typiquement un administrateur. Ce droit va servir pour la configuration de Samba.
Utiliser la commande :
kinit administrateur@MONRESEAU.NET
On peut vérifier à tout moment que l’on a bien un ticket valide avec :
klist
2. Station – Installer et configurer Samba
Ajouter les paquets nécessaires à Samba :
aptitude install smbclient
Modifier le fichier de configuration /etc/samba/smb.conf
:
[global] workgroup = MONRESEAU netbios name = STATION01 realm = MONRESEAU.NET server string = %h dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d security = ADS kerberos method = system keytab encrypt passwords = true passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = yes [printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes guest ok = no read only = yes create mask = 0700 [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no
Joindre la station au domaine AD avec la commande :
net ads join -k
Il se peut qu’il y ai une erreur « DNS update failed« . Ce n’est pas grave, l’ajout au domaine AD marche quand même.
Voir la documentation de Samba concernant kerberos method.
3. Station – Création du fichier Keytab
Nous avons dit à Kerberos d’utiliser le fichier /etc/krb5.keytab mais celui-ci n’existe pas, il faut le créer. Lancer la commande :
net ads keytab create
On peut vérifier que tout se passe bien jusqu’ici :
kinit -V -k "STATION01$"
Le fichier de Keytab contient une clé qu’il va falloir protéger :
chown root.root /etc/krb5.keytab
chmod 600 /etc/krb5.keytab
4. Station – Régénération automatique du ticket Kerberos
Le ticket Kerberos de la machine n’a qu’une validité de 24 heures, il doit être régégéré régulièrement. On choisit de le régénérer toutes les heures via cron.
Ajouter à /etc/crontab
:
2 *   * * *  root   kinit -k "STATION01$" -c /tmp/krb5cc_host ; chmod 644 /tmp/krb5cc_host
Revoir la protection de /tmp/krb5cc_host …
Pour régénerer le ticket de l’utilsiateur, on ajout un petit script à l’ouverture de session.
Créer le fichier /usr/share/upstart/sessions/krenew.conf
avec :
description "User TGT KRB5" author "Stephane DENDIEVEL" start on starting xsession-init respawn exec krenew -K 60
5. Station – Installer et configurer LDAP
Ajouter les paquets nécessaires à OpenLDAP :
aptitude install ldap-utils libsasl2-modules-gssapi-mit
Modifier le fichier /etc/ldap.conf
:
use_sasl on sasl_auth_id STATION01$ krb5_ccname FILE:/tmp/krb5cc_host base dc=monreseau,dc=net uri ldap://dc1.monreseau.net ldap://dc2.monreseau.net ldap_version 3 sizelimit 10000 timelimit 10 bind_timelimit 5 network_timeout 3 tls_checkpeer no referrals no bind_policy soft scope sub nss_base_passwd dc=monreseau,dc=net?sub nss_base_shadow dc=monreseau,dc=net?sub nss_base_group dc=monreseau,dc=net?sub nss_map_objectclass posixAccount User nss_map_objectclass shadowAccount User nss_map_objectclass posixGroup Group nss_map_attribute uid uid nss_map_attribute uidNumber uidNumber nss_map_attribute gidNumber gidNumber nss_map_attribute loginShell loginShell nss_map_attribute gecos name nss_map_attribute userPassword msSFU30Password nss_map_attribute homeDirectory unixHomeDirectory nss_map_attribute shadowLastChange pwdLastSet nss_map_attribute uniqueMember msSFU30PosixMember nss_map_attribute cn cn pam_login_attribute msSFU30Name pam_filter objectclass=User pam_password ad nss_initgroups_ignoreusers avahi,avahi-autoipd,backup,bin,colord,daemon,dirmngr,dnsmasq,festival,games,gdm,gnats,hplip,irc,kdm,kernoops,libuuid,lightdm,list,lp,mail,man,messagebus,news,ntp,proxy,pulse,root,rtkit,saned,speech-dispatcher,sync,sys,syslog,usbmux,uucp,whoopsie,www-data
Copier /etc/ldap.conf
vers /etc/ldap/ldap.conf
.
La configuration peut être vérifiée simplement avec la commande :
ldapsearch
6. Serveur – Configurer les comptes utilisateurs AD
Dans une console ADUC, activer l’affichage étendu. On peut passer aussi par l’ADSIedit. enfin, on peut scripter par Powershell.
Pour chaque utilisateur, ajouter les propriétés :
uid = username
C’est le nom que doit saisir l’utilisateur pour s’identifier. Typiquement égual ÃsAMAccountName
.uidNumber = 10001
Doit être unique et non existant par défaut sur les stations Linux.gidNumber = 100
Soit l’équivalent du groupeusers
sous Linux.HomeUnixDirectory = /home/username
Là ou sera créé et utilisé le répertoire de l’utilisateur.loginShell = /bin/bash
Le shell par défaut de l’utilisateur.
Il n’est pas nécessaire d’installer des outils pour gérer les comptes UNIX dans Windows 2003 R2 dans notre cas.
7. Station – Configurer NSS
Ajouter les paquets nécessaires à NSS :
aptitude install libnss-ldap libpam-ldap libnss-myhostname
Modifier le fichier /etc/nsswitch.conf
:
passwd: compat ldap group:Â Â Â Â Â Â Â Â Â compat ldap shadow:Â Â Â Â Â Â Â Â compat ldap hosts:Â Â Â Â Â Â Â Â Â files mdns4_minimal [NOTFOUND=return] dns mdns4 networks:Â Â Â Â Â Â files protocols:Â Â Â Â Â db files services:Â Â Â Â Â Â db files ethers:Â Â Â Â Â Â Â Â db files rpc:Â Â Â Â Â Â Â Â Â Â Â db files netgroup:Â Â Â Â Â Â nis
8. Station – Configurer PAM
Ajouter les paquets suplémentaires à PAM :
aptitude install libpam-ccreds
Modifier le fichier /etc/pam.d/common-auth
:
auth   [success=3 default=ignore]   pam_krb5.so minimum_uid=5000 auth   [success=2 default=ignore]   pam_unix.so nullok_secure try_first_pass auth   [success=1 default=ignore]   pam_ldap.so use_first_pass auth   requisite   pam_deny.so auth   required   pam_permit.so auth   optional   pam_cap.so
Modifier le fichier /etc/pam.d/common-account
:
account   [success=2 new_authtok_reqd=done default=ignore]   pam_unix.so account   [success=1 default=ignore]   pam_ldap.so account   requisite  pam_deny.so account   required   pam_permit.so account   required   pam_krb5.so minimum_uid=5000
Modifier le fichier /etc/pam.d/common-password
:
password   [success=3 default=ignore]   pam_krb5.so minimum_uid=5000 password   [success=2 default=ignore]   pam_unix.so obscure use_authtok try_first_pass sha512 password   [success=1 user_unknown=ignore default=die]   pam_ldap.so use_authtok try_first_pass password   requisite   pam_deny.so password   required   pam_permit.so password   optional   pam_gnome_keyring.so
Modifier le fichier /etc/pam.d/common-session
:
session   [default=1]   pam_permit.so session   requisite   pam_deny.so session   required   pam_permit.so session optional   pam_umask.so session   optional   pam_krb5.so minimum_uid=5000 session   required   pam_unix.so session required   pam_mkhomedir.so skel=/etc/skel/ umask=0077 session   optional   pam_ldap.so session   optional   pam_systemd.so session   optional   pam_ck_connector.so nox11
9. Fin
Un petit redémarrage et la connexion en tant qu’utilisateur de l’AD devrait fonctionner.
Au besoin, on peut vérifier aussi en console (taper [Ctrl]-[Alt]-[F1] ) ou via SSH.
On peut vérifier ce qui remonte de l’AD sur une station avec les commandes :
getent passwd
getent shadow
getent group
Il y a surement des choses à améliorer, mais on a une bonne base de travail.
Pour le gestionnaire de connexion, j’ai recherché lequel permettait de saisir un identifiant (de l’AD) tout en restant assez sexy. Je me suis arrêté sur KDM.
Thunderbird plante au bout de quelques secondes de fonctionnement. C’est semble-t-il un problème spécifique avec les comptes utilisateurs sur LDAP, cà d non locaux. Installer nscd
pour résoudre ce problème.
Avec Gnome, cinnamon et Unity la déconnexion et le changement d’utilisateur posent parfois problème. Ce problème n’apparait pas sous afterstep, blackbox, enlightenment, fluxbox, flwm, icewm, KDE, LXDE, twm, tinywm, vtwm, windowmaker ou XFCE. Cela semble lié à GTK…
10. Liens
- https://help.ubuntu.com/community/Kerberos
- http://guide.ubuntu-fr.org/server/kerberos-ldap.html
- http://koo.fi/blog/2013/01/06/ubuntu-12-04-active-directory-authentication/
- http://technet.microsoft.com/fr-fr/library/understanding-active-directory-functional-levels%28v=ws.10%29.aspx
- http://fr.wikipedia.org/wiki/Kerberos_%28protocole%29
- http://www.samba.org/
- http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html#KERBEROSMETHOD
- http://fr.wikipedia.org/wiki/Cron
- http://www.openldap.org/
- http://fr.wikipedia.org/wiki/Name_Service_Switch
- http://fr.wikipedia.org/wiki/Pluggable_Authentication_Modules
- http://technet.microsoft.com/fr-fr/library/cc773240%28v=ws.10%29.aspx#BKMK_UNIXIdentity
11. Annexes
Voici un script install.sh
de déploiement rapide à lancer avec le compte d’installation de la station Linux fraichement installée :
#!/bin/bash # ---------------------------------------------------------------------------- # Script de préparation des stations Ubuntu Linux. SCRIPTVERSION='20140304' # ---------------------------------------------------------------------------- SCRIPTNAME="install.sh" [ -f $SCRIPTNAME ] && chmod a+x $SCRIPTNAME # Reconnexion en tant que root. echo "Connecté en tant que $USER." [ "$(id -u)" != 0 ] && echo "sudo ./$SCRIPTNAME" && sudo bash -c ./$SCRIPTNAME && return 0 sleep 1 [ "$(id -u)" != 0 ] && exit 0 echo "($SCRIPTVERSION)" # Variables. HOSTNAME="" # Définit plus tard. Nom de la machine. ADMNAME="" # Définit plus tard. Nom du compte administrateur de l'AD. ADMPASS="" # Définit plus tard. Mot de passe du compte admin de l'AD. ADSERV1="dc1" # Premier controleur de domaine AD. ADSERV2="dc2" # Deuxième controleur de domaine AD. ADDN="dc=monreseau,dc=net" # DN LDAP dans l'AD. ADDOM="MONRESEAU.NET" # Domaine AD. ADWKG=$(echo $ADDOM | cut -d '.' -f 1) # Détermine le workgroup. Ne pas modifier. ADDNS=$(echo $ADDOM | tr '[:upper:]' '[:lower:]') # Détermine le domaine DNS. Ne pas modifier. ADMINUID="5000" # Valeur minimum de UID accepté pour les comptes AD. DNSSERV1="192.168.0.10" # Adresse IP du premier serveur DNS. DNSSERV2="192.168.0.11" # Adresse IP du deuxième serveur DNS. DNSSEARCH="monreseau.net" # Domaine de recherche DNS par défaut. IPADDR="" # définit plus tard. Adresse IP de la machine. IPBASEADDR="192.168." # Base de l'adresse IP. IPMASK="16" # Masque de réseau, forme numérique. IPLMASK="255.255.0.0" # Masque de réseau, forme longue. IPGATE="" # définit plus tard. Adresse IP de la passerelle par défaut du réseau. IFACE=$(cat /proc/net/dev | cut -d ':' -f 1 | grep -v '|' | grep -v lo | sed 's/ //g' | head -1) # Prend la première interface définit dans le noyau. Ne pas modifier. UBUNTU="saucy" # Version de la distri Ubuntu utilisée. # Remplissage par l'admin des valeurs de base de cette station. echo "-------------------------------------------------------------------------------" read -p "Nom de machine : " HOSTNAMEtmp HOSTNAME=$(echo -n $HOSTNAMEtmp | tr '[:lower:]' '[:upper:]' | tr -dc "A-Z0-9-") read -p "Adresse IP : $IPBASEADDR" IPADDRtmp IPADDR=$(echo -n "$IPBASEADDR$IPADDRtmp" | tr -dc "0-9.") echo " " echo "Domaine ActiveDirectory : $ADDOM" read -p "Code administrateur AD : " ADMNAME read -s -p "MdP administrateur AD : " ADMPASS echo " " # Mise en place du nom de machine. echo "-------------------------------------------------------------------------------" echo "Mise en place du nom de machine : $HOSTNAME" hostname $HOSTNAME echo -n "$HOSTNAME" > /etc/hostname cat > /etc/hosts << EOF 127.0.0.1 localhost 127.0.1.1 $HOSTNAME ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters EOF echo " " # Mise en place du réseau. echo "-------------------------------------------------------------------------------" echo "Désactivation du NetworkManager." cat > /etc/NetworkManager/NetworkManager.conf << EOF [main] plugins=ifupdown,keyfile,ofono dns=dnsmasq [ifupdown] managed=true EOF sleep 2 nmcli nm enable false echo "Mise en place de l'adresse IP sur $IFACE : $IPADDR/$IPMASK" ifconfig $IFACE $IPADDR/$IPMASK sleep 5 IPGATE="$(echo $IPADDR | cut -d '.' -f 1).0.0.1" [ "$IPMASK" == 16 ] && IPGATE="$(echo $IPADDR | cut -d '.' -f 1-2).0.1" [ "$IPMASK" == 24 ] && IPGATE="$(echo $IPADDR | cut -d '.' -f 1-3).1" echo "Mise en place de la route par défaut : $IPGATE" route del default 2>&- route add default gw $IPGATE echo " " echo "Test de la connectivité réseau en cours..." ping -c 1 -W 1 $IPGATE >&- 2>&- [ "$(arp -an | grep $IPGATE | grep incomplete)" != "" ] && echo "ERREUR de réseau !!!" && sleep 5 && exit 0 echo "Réseau OK." echo " " echo "Ecriture de la configuration." cat > /etc/network/interfaces << EOF auto lo iface lo inet loopback auto $IFACE iface $IFACE inet static address $IPADDR netmask $IPLMASK gateway $IPGATE EOF echo " " # Mise en place du DNS. echo "-------------------------------------------------------------------------------" echo "Mise en place du DNS." echo "Serveur DNS1 : $DNSSERV1" echo "nameserver $DNSSERV1" > /etc/resolv.conf echo -n " dns-nameservers $DNSSERV1" >> /etc/network/interfaces if [ "$DNSSERV2" != "" ] then echo "Serveur DNS2 : $DNSSERV2" echo "nameserver $DNSSERV2" >> /etc/resolv.conf echo -n " $DNSSERV2" >> /etc/network/interfaces fi echo "Domaine de recherche par défaut : $DNSSEARCH" echo "search $DNSSEARCH" >> /etc/resolv.conf echo " " >> /etc/network/interfaces echo " dns-search $DNSSEARCH" >> /etc/network/interfaces > /etc/resolvconf/resolv.conf.d/base > /etc/resolvconf/resolv.conf.d/head echo " " echo "Test de la résolution de nom en cours..." [ "$(host $ADSERV1 | grep address)" == "" ] && echo "ERREUR de résolution de noms !!!" && sleep 5 && exit 0 echo "DNS OK." echo " " # Mise à l'heure. echo "-------------------------------------------------------------------------------" echo "Mise à l'heure..." [ -f /etc/init.d/ntp ] && /etc/init.d/ntp stop ntpdate ntp date echo " " # Mise en place des dépôts. echo "-------------------------------------------------------------------------------" echo "Mise en place des dépôts." echo "deb http://fr.archive.ubuntu.com/ubuntu/ $UBUNTU main restricted universe multiverse" > /etc/apt/sources.list echo "deb http://fr.archive.ubuntu.com/ubuntu/ $UBUNTU-updates main restricted universe multiverse" >> /etc/apt/sources.list echo "deb http://security.ubuntu.com/ubuntu $UBUNTU-security main restricted universe multiverse" >> /etc/apt/sources.list [ -f /etc/apt/apt.conf ] && rm /etc/apt/apt.conf export DEBIAN_FRONTEND=noninteractive echo " " echo "Mise à jour de la liste des paquets..." apt-get -qq update echo " " echo "Mise à jour du système..." apt-get -y -qq dist-upgrade apt-get -y -qq dist-upgrade dpkg --configure -a [ "$?" != "0" ] && echo "ERREUR de mise à jour des paquets !!!" && sleep 5 && exit 0 echo " " echo "Mise en place de paquets par défaut..." apt-get -y -qq install aptitude ntp smbclient libpam-krb5 krb5-user ldap-utils libsasl2-modules-gssapi-mit libnss-ldap libpam-ldap cifs-utils kstart libnss-myhostname libpam-ccreds nscd echo " " echo "Nettoyage des paquets..." apt-get -y -qq autoremove dpkg --configure -a dpkg --configure -a dpkg --configure -a [ "$?" != "0" ] && echo "ERREUR de configuration des paquets !!!" && sleep 5 && exit 0 apt-get clean export DEBIAN_FRONTEND= echo " " # Mise en place du démon NTP. echo "-------------------------------------------------------------------------------" echo "Mise en place de la configuration NTP." cat > /etc/ntp.conf << EOF driftfile /var/lib/ntp/ntp.drift statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable server 0.ubuntu.pool.ntp.org server 1.ubuntu.pool.ntp.org server 2.ubuntu.pool.ntp.org server 3.ubuntu.pool.ntp.org restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery restrict 127.0.0.1 restrict ::1 EOF service ntp restart date echo " " # Mise en place du démon KRB. echo "-------------------------------------------------------------------------------" echo "Mise en place de la configuration KRB." cat > /etc/krb5.conf << EOF [appdefaults] pam = { realm = $ADDOM ticket_lifetime = 1d renew_lifetime = 1d forwardable = true proxiable = false retain_after_close = false minimum_uid = $ADMINUID try_first_pass = true ignore_root = true } [libdefaults] default_realm = $ADDOM default_keytab_name = FILE:/etc/krb5.keytab krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = false # default_tgs_enctypes = des3-hmac-sha1 # default_tkt_enctypes = des3-hmac-sha1 # permitted_enctypes = des3-hmac-sha1 v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] $ADDOM = { kdc = $ADSERV1 EOF if [ "$ADSERV2" != "" ] then cat >> /etc/krb5.conf << EOF kdc = $ADSERV2 EOF fi cat >> /etc/krb5.conf << EOF admin_server = $ADSERV1 default_domain = $ADDNS auth_to_local = DEFAULT } [domain_realm] .$ADDNS = $ADDOM $ADDNS = $ADDOM [login] krb4_convert = true krb4_get_tickets = false EOF sleep 2 echo "Vérification de la configuration Kerberos." kinit $ADMNAME@$ADDOM << EOF $ADMPASS EOF [ "$(klist | grep krbtgt)" == "" ] && echo "ERREUR impossible de récupérer un ticket Kerberos de l'AD !!!" && sleep 5 && exit 0 sleep 2 echo "Kerberos OK." echo " " # Mise en place du démon SAMBA. echo "-------------------------------------------------------------------------------" echo "Mise en place de la configuration SAMBA." cat > /etc/samba/smb.conf << EOF [global] workgroup = $ADWKG netbios name = $HOSTNAME realm = $ADDOM server string = %h dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d security = ADS kerberos method = system keytab encrypt passwords = true passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = yes [printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes guest ok = no read only = yes create mask = 0700 [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no EOF echo "Création du compte AD de la machine." net ads join -k sleep 2 echo "Création du fichier keytab." net ads keytab create [ ! -f /etc/krb5.keytab ] && echo "ERREUR impossible de générer le fichier keytab !!!" && sleep 5 && exit 0 echo "Fichier keytab OK." sleep 2 echo "Vérification de la connexion à l'AD." kinit -V -k "$HOSTNAME$" [ "$?" != "0" ] && echo "ERREUR de connexion !!!" && sleep 5 && exit 0 echo "Connexion AD OK." echo " " # Mise en place de la régénération périodique de tickets. echo "-------------------------------------------------------------------------------" echo "Mise en place de la configuration CRON." cat > /etc/crontab << EOF SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 11 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 11 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 11 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) # Cnx AD MONRESEAU 2 * * * * root kinit -k "$HOSTNAME$" -c /tmp/krb5cc_host ; chmod 644 /tmp/krb5cc_host EOF service cron restart echo "Mise à jour du fichier rc.local ." cat > /etc/rc.local << EOF #!/bin/sh -e kinit -k "$HOSTNAME$" -c /tmp/krb5cc_host chmod 644 /tmp/krb5cc_host # Ne pas enlever !!! exit 0 EOF echo "Mise à jour du renouvellement de ticket utilisateur." cat > /usr/share/upstart/sessions/krenew.conf << EOF description "User TGT KRB5" author "sden" start on starting xsession-init respawn exec krenew -K 60 EOF echo " " # Mise en place de la configuration LDAP. echo "-------------------------------------------------------------------------------" echo "Mise en place de la configuration LDAP." cat > /etc/ldap.conf << EOF use_sasl on sasl_auth_id $HOSTNAME$ krb5_ccname FILE:/tmp/krb5cc_host base $ADDN uri ldap://$ADSERV1.$DNSSEARCH ldap://$ADSERV2.$DNSSEARCH ldap_version 3 #port 389 sizelimit 10000 #timelimit 30 timelimit 10 #bind_timelimit 30 bind_timelimit 5 network_timeout 3 tls_checkpeer no referrals no bind_policy soft #idle_timelimit 3600 #pam_filter objectclass=account #pam_login_attribute uid #pam_lookup_policy yes #pam_check_host_attr yes #pam_check_service_attr yes #pam_groupdn cn=PAM,ou=Groups,dc=padl,dc=com #pam_member_attribute uniquemember #pam_min_uid 0 #pam_max_uid 0 #pam_login_attribute userPrincipalName #pam_template_login_attribute uid #pam_template_login nobody #pam_password_prohibit_message Please visit http://internal to change your password. scope sub nss_base_passwd $ADDN?sub nss_base_shadow $ADDN?sub nss_base_group $ADDN?sub #nss_base_hosts ou=Hosts,dc=padl,dc=com?one #nss_base_services ou=Services,dc=padl,dc=com?one #nss_base_networks ou=Networks,dc=padl,dc=com?one #nss_base_protocols ou=Protocols,dc=padl,dc=com?one #nss_base_rpc ou=Rpc,dc=padl,dc=com?one #nss_base_ethers ou=Ethers,dc=padl,dc=com?one #nss_base_netmasks ou=Networks,dc=padl,dc=com?ne #nss_base_bootparams ou=Ethers,dc=padl,dc=com?one #nss_base_aliases ou=Aliases,dc=padl,dc=com?one #nss_base_netgroup ou=Netgroup,dc=padl,dc=com?one nss_map_objectclass posixAccount User nss_map_objectclass shadowAccount User nss_map_objectclass posixGroup Group nss_map_attribute uid uid nss_map_attribute uidNumber uidNumber nss_map_attribute gidNumber gidNumber nss_map_attribute loginShell loginShell nss_map_attribute gecos name nss_map_attribute userPassword msSFU30Password nss_map_attribute homeDirectory unixHomeDirectory nss_map_attribute shadowLastChange pwdLastSet nss_map_attribute uniqueMember msSFU30PosixMember nss_map_attribute cn cn pam_login_attribute msSFU30Name pam_filter objectclass=User pam_password ad #ssl on #sslpath /etc/ssl/certs #ssl start_tls #tls_cacertfile /etc/ssl/ca.cert #tls_cacertdir /etc/ssl/certs #tls_randfile /var/run/egd-pool #tls_ciphers TLSv1 #tls_cert #tls_key #sasl_secprops maxssf=0 #pam_sasl_mech DIGEST-MD5 nss_initgroups_ignoreusers avahi,avahi-autoipd,backup,bin,colord,daemon,dirmngr,dnsmasq,festival,games,gdm,gnats,hplip,irc,kdm,kernoops,libuuid,lightdm,list,lp,mail,man,messagebus,news,ntp,proxy,pulse,root,rtkit,saned,speech-dispatcher,sync,sys,syslog,usbmux,uucp,whoopsie,www-data EOF cat /etc/ldap.conf > /etc/ldap/ldap.conf echo "Test de la connexion au serveur LDAP..." # Laisser le sudo. [ "$(sudo ldapsearch 2>&- | wc -l)" -lt 100 ] && echo "ERREUR de connexion !!!" && sleep 5 && exit 0 echo "LDAP OK" echo " " # Mise en place de la configuration NSswitch. echo "-------------------------------------------------------------------------------" echo "Mise en place de la configuration NSswitch." cat > /etc/nsswitch.conf << EOF passwd: compat ldap group: compat ldap shadow: compat ldap hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis EOF echo " " # Mise en place de la configuration PAM. echo "-------------------------------------------------------------------------------" echo "Mise en place de la configuration de PAM." cat > /etc/pam.d/common-auth << EOF auth [success=3 default=ignore] pam_krb5.so minimum_uid=$ADMINUID auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass auth [success=1 default=ignore] pam_ldap.so use_first_pass auth requisite pam_deny.so auth required pam_permit.so auth optional pam_cap.so EOF cat > /etc/pam.d/common-account << EOF account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 default=ignore] pam_ldap.so account requisite pam_deny.so account required pam_permit.so account required pam_krb5.so minimum_uid=$ADMINUID EOF cat > /etc/pam.d/common-password << EOF password [success=3 default=ignore] pam_krb5.so minimum_uid=$ADMINUID password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass password requisite pam_deny.so password required pam_permit.so password optional pam_gnome_keyring.so EOF cat > /etc/pam.d/common-session << EOF session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session optional pam_umask.so session optional pam_krb5.so minimum_uid=$ADMINUID session required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0077 session optional pam_ldap.so session optional pam_systemd.so session optional pam_ck_connector.so nox11 EOF echo " " echo "-------------------------------------------------------------------------------" echo "Réactivation du NetworkManager." nmcli nm enable true echo " " echo "-------------------------------------------------------------------------------" echo "Script d'installation terminé normalement." # Nettoyage ADMNAME="" ADMPASS=""
Petite correction du script final.
Si la machine change de nom, la création du fichier keytab ne passe pas, il faut ajouter cette ligne au moment du changement de nom :
hostname $HOSTNAME
Et ça marche!