A l'occasion d'un projet que j'ai eu a effectuer, j'ai du intergrer une machine sous linux dans un domaine avec environnement Active Directory.

J'ai creer le script ci-dessous pour l'intergration dans un domaine Active Directory. il se sert de zenity qui permet d'afficher des boîtes de dialogue depuis des scripts shell.
Ce script est un essai il n'est pas terminer ! il contient des bugs surtout au niveau de l'affichage des questions posé par les utilitaires utilisé dans le script.

Dependances:

  • Zenity

Bugs

  • Insertion des mot de passe de l'administrateur du domaine dans kinit

#!/bin/bash
 
faire_une_pause() {
zenity --question --text="Voulez-vous continuer ?"
case $? in
  0)
    echo "good";;
  1)
    exit 1;;
esac
}
question () {
 
if zenity --entry --title="renseignement" --text="$1"
then echo ""
else zenity --entry --title="renseignement" --text="$1"
fi
 
}
information () {
zenity --info --text="$texte"
 
}
#echo "USAGE : "$0" ServeurNTP Domaine"
 
 
(
echo "# Serveur NTP (Network Time Protocol)"
echo "10";sleep 5
 
SERVEUR_NTP=`question "entrer l'ip du serveur de temps"`
mv /etc/default/ntpdate /etc/default/ntpdate.bak
sed -e "s/^\(NTPSERVERS=\"\).*\(\"\)/\1"$SERVEUR_NTP"\2/" /etc/default/ntpdate.bak > /etc/default/ntpdate
 
echo "# Mise en place d'un nom de domaine pleinement qualifié"
echo "20";sleep 5
faire_une_pause
 
 
domaine=`question "Entrer le domaine (avec le .)"`
mv /etc/hosts /etc/hosts.bak
sed -e "s/^\(127\.0\.0\.1\s\).*$/\1\t"`hostname`"."$domaine"\t"`hostname`"/" /etc/hosts.bak > /etc/hosts 
echo  "# Installation des programmes nécessaires"
echo "30";sleep 5
 
echo "
"$domaine"
"$domaine"
" > krb5
apt-get -y install krb5-user < krb5
 
echo "# Intégration de la machine au domaine Active Directory"
 
faire_une_pause
 
echo "# Configuration de l'authentification"
mv /etc/krb5.conf /etc/krb5.conf.bak
 
DOMAINE=`echo $domaine | tr '[:lower:]' '[:upper:]'`
DOMAINE_court=`echo "$DOMAINE" |  awk -F "." '{ $2 = "" ; print $0 }'`
NOM_CONTROLEUR=`question "entrer le nom du controleur de domaine"`
 
echo "
[logging]
default = FILE10000:/var/log/krb5lib.log
 
[libdefaults]
ticket_lifetime = 24000
default_realm = "$DOMAINE"
default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5 aes256-cts arcfour-hmac-md5
default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5 aes256-cts arcfour-hmac-md5
 
[realms]
"$DOMAINE" = {
   kdc = "$NOM_CONTROLEUR"."$domaine"
   admin_server = "$NOM_CONTROLEUR"."$domaine"
   default_domain = "$DOMAINE"
}
 
[domain_realm]
."$domaine" = "$DOMAINE"
"$domaine" = "$DOMAINE"
" > /etc/krb5.conf
 
echo "# Tests de la configuration"
echo "30";sleep 5
faire_une_pause
utilisateur=`question "Taper un login present dans le domaine"`
motdepasse=`question "Entrer le mot de passe du login"`
faire_une_pause
 
texte="voir la fenetre shell pour taper le mot de passe"
information
 
kinit "$utilisateur"
 
zenity --info --text="`klist`"
 
faire_une_pause
 
 
echo "#Installation et configuration de Samba et WinBind"
echo "40";sleep 5
faire_une_pause
 
 
 
apt-get -y install samba winbind
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
echo "
[global]
security = ads
realm = "$DOMAINE"
password server = "$NOM_CONTROLEUR"."$domaine"
workgroup = "$DOMAINE_court"
winbind separator = +
idmap uid = 10000-29999
idmap gid = 10000-29999
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
 # empêche le client de devenir maitre explorateur
        domain master = no
        local master = no
        preferred master = no
        os level = 0
" > /etc/samba/smb.conf
 
sudo mkdir /home/$domaine
sudo chmod 777 /home/$domaine
 
/etc/init.d/samba restart
/etc/init.d/winbind restart
 
echo "# Intergration de `hostname` dans le domaine"
echo "50";sleep 5
faire_une_pause
 
texte="voir la fenetre shell pour taper le mot de passe"
information
zenity --info --text="`net join -U $utilisateur -S $NOM_CONTROLEUR`"
 
zenity --info --text=`hostname`" fait maintenant parti du domaine Windows 2003 : "$DOMAINE" !"
/etc/init.d/winbind restart
 
echo "# Configuration de l'authentification"
echo "60";sleep 5
faire_une_pause
 
mv /etc/nsswitch.conf /etc/nsswitch.conf.bak
echo "
passwd:      compat  winbind
group:      compat  winbind
shadow:      compat
hosts:      files dns wins
networks:   files
 
protocols:   db files
services:   db files
ethers:      db files
rpc:      db files
 
netgroup:   nis
" > /etc/nsswitch.conf
 
 
echo "# Configuration de PAM"
echo "70";sleep 5
faire_une_pause
 
mv /etc/pam.d/common-account /etc/pam.d/common-account.bak
echo "
account sufficient   pam_winbind.so
account sufficient   pam_unix.so
" > /etc/pam.d/common-account
 
mv /etc/pam.d/common-auth /etc/pam.d/common-auth.bak
echo "
auth   sufficient   pam_winbind.so
auth   sufficient   pam_unix.so  nullok_secure  use_first_pass
" > /etc/pam.d/common-auth
 
#mv /etc/pam.d/common-password /etc/pam.d/common-password.bak
#echo "
#password   required   pam_unix.so nullok obscure min=4 max=50 md5
#" > /etc/pam.d/common-password
 
mv /etc/pam.d/common-session /etc/pam.d/common-session.bak
echo "
session      required   pam_unix.so
session      required   pam_mkhomedir.so  umask=0022  skel=/etc/skel
" > /etc/pam.d/common-session
 
mv /etc/pam.d/sudo /etc/pam.d/sudo.bak
echo "
auth sufficient pam_winbind.so
auth required pam_unix.so use_first_pass
" > /etc/pam.d/sudo
 
 
echo "# Teste de connexion diverse"
echo "80";sleep 5
faire_une_pause
 
 
sudo /etc/init.d/samba restart
sudo /etc/init.d/winbind restart
echo "# Listes des utilisateurs :"
faire_une_pause
texte=`wbinfo -u`
information
echo "# Listes des groupes :"
faire_une_pause
texte=`wbinfo -g`
information
 
echo "# Tests du module nsswitch..."
faire_une_pause
sudo getent passwd
 
texte=`getent group`
information
echo "100";sleep 5
echo "# Redémarrage (à cause de certains services)"
faire_une_pause
sudo reboot
 
) |zenity --progress \
  --title="Mise à jour des journaux système" \
  --text="Analyse des journaux de mail..." \
  --percentage=0
 
if [ "$?" = -1 ] ; then
  zenity --error \
    --text="Mise à jour annulée."
fi