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 groupeuserssous 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 $HOSTNAMEEt ça marche!