#!/bin/bash
# By Mickaël Reis (tigermickrs@hotmail.com) & thomas Sarboni (max-k@post.com)

[ `id -u` -ne 0 ] && echo "Merci d'exécuter ce script en root (ou avec \"sudo sh domaine.sh\")" && exit;

######################## Vérification de la version Ubuntu
echo -e "\\033[1;32m Vérification de votre version ubuntu : \\033[0;39m"
version=`cat /etc/issue | cut -c1-11 | head -1`
if [ "$version" = "Ubuntu 6.10" ]
then
echo -e "\\033[1;32m [OK] \\033[0;39m"
else
echo -e "\033[1;31m [ECHOUE]
Votre système n'est pas ubuntu 6.10 Edgy, par conséquent ce script ne fonctionnera pas et va être quitté.\033[0;39m"
exit 1;
fi

######################## Fonction confirmation des paramètres entrés par l'utilisateur
confirmer() {
   echo -e "\033[1;31m Voulez-vous continuer avec cette valeur : "$1" (o/N) \033[0;39m"
   read confirmation
}

######################## Variables :

confirmation="n"
while [ "$confirmation" != "o" ] 
do
echo "Entrer l'adresse IP de votre serveur NTP (en général, le serveur de domaine) :"
read SERVEUR_NTP
confirmer $SERVEUR_NTP
done

confirmation="n"
while [ "$confirmation" != "o" ] 
do
echo "Entrer le nom DNS de votre serveur AD (juste le nom de machine du serveur) :"
read CONTROLEUR_DE_DOMAINE
confirmer $CONTROLEUR_DE_DOMAINE
done

confirmation="n"
while [ "$confirmation" != "o" ] 
do
echo "Entrer l'IP de votre serveur AD"
read IPcd
confirmer $IPcd
done

confirmation="n"
while [ "$confirmation" != "o" ] 
do
echo "Entrer le nom de votre domaine en minuscule (exemple : ingetic.com ou ingetic.net ou ingetic.priv...) :"
read domaine
confirmer $domaine
done

confirmation="n"
while [ "$confirmation" != "o" ] 
do
echo "Entrer le nom court de votre domaine (exemple : INGETIC) :"
read WORKGROUP
#WORKGROUP=$DOMAINE
confirmer $WORKGROUP
done

confirmation="n"
while [ "$confirmation" != "o" ] 
do
echo "Entrer le nom de votre machine Cliente:"
read hote
confirmer $hote
done
######################## Création de la variable DOMAINE à partir de domaine
#DOMAINE=`echo $domaine |tr -s a-z A-Z`
DOMAINE=`echo $domaine |tr 'a-z' 'A-Z'`

######################## Création des variables CDD et CDd à partir des infos de l'utilisateurs
CDD=$CONTROLEUR_DE_DOMAINE"."$DOMAINE
CDd=$CONTROLEUR_DE_DOMAINE"."$domaine

######################## Fonction informant l'utilisateur de la section où il se trouve dans le
######################## script
section() {
   echo -e "* \033[4m"$1"...\033[0m"
}

######################## Fonction informant l'utilisateur de la partie où il se trouve dans le
######################## script
partie() {
   echo -e "\033[1m"$1"\033[0m"
}

######################## Fonction permettant de demander confirmation pour continuer à 
######################## l'utilisateur
faire_une_pause() {
   echo -n "Continuer [O/n] ? "
   read lettre
   case $lettre in
      "n" | "N") exit 1;;
      *);;
   esac
}

##################################### Démarrage du script##########################################

partie "Mise en place de l'authentification Kerberos"

######################## Vérification de la présence de ntpdate
if [ `apt-cache policy ntpdate | grep Installed | cut -c14-19` = "(none)" ]
then
echo -e "\033[1m Il semble que le paquet ntpdate n'ait pas été installé ; Installation du paquet : \033[0m" && sudo apt-get install ntpdate
marqeur=1
elif [ `apt-cache policy ntpdate | grep Installé | cut -c16-22` = "(aucun)" ]
then
echo -e "\033[1m Il semble que le paquet ntpdate n'ait pas été installé ; Installation du paquet : \033[0m" && sudo apt-get install ntpdate
marqeur=1
else
echo "le paquet ntpdate est bien installé"
fi

######################## Vérification de l'installation de ntpdate s'il n'était pas installé
if [ `apt-cache policy ntpdate | grep Installed | cut -c14-19` = "(none)" ] && [ "$marqueur" -eq "1" ]
then
echo -e "\033[1m Il semble que le paquet ntpdate n'a pas été installé ; soit vous n'avez pas de connection internet, soit apt est mal configuré, soit vous êtes derrière un proxy ; dans ce dernier cas, il vous suffit de modifier le fichier /etc/apt/apt.conf afin qu'apt utilise votre proxy. 
Le script va désormais être quitté ; veuillez le redémarrer une fois que vos problèmes de connection seront résolues \033[0m" && exit 1;
elif [ `apt-cache policy ntpdate | grep Installé | cut -c16-22` = "(aucun)" ] && [ "$marqueur" -eq "1" ]
then
echo -e "\033[1m Il semble que le paquet ntpdate n'a pas été installé ; soit vous n'avez pas de connection internet, soit apt est mal configuré, soit vous êtes derrière un proxy ; dans ce dernier cas, il vous suffit de modifier le fichier /etc/apt/apt.conf afin qu'apt utilise votre proxy. 
Le script va désormais être quitté ; veuillez le redémarrer une fois que vos problèmes de connection seront résolues \033[0m" && exit 1;
elif [ "$marqueur" = "1" ]
then
echo "le paquet ntpdate a bien été installé"
fi

######################## Configuration ntpdate
section "Serveur NTP (Network Time Protocol)"
faire_une_pause
sudo mv /etc/default/ntpdate /etc/default/ntpdate.bak
sed -e "s/^\(NTPSERVERS=\"\).*\(\"\)/\1"$SERVEUR_NTP"\2/" /etc/default/ntpdate.bak > /etc/default/ntpdate
sudo ntpdate $SERVEUR_NTP

######################## Configuration /etc/hosts
section "Mise en place d'un nom de domaine pleinement qualifié"
faire_une_pause
sudo mv /etc/hosts /etc/hosts.bak
sed -e "s/^\(127\.0\.0\.1\).*$/\1\tlocalhost.localdomain\tlocalhost\t"$hote"\."$domaine"\t"$hote"/" /etc/hosts.bak > /etc/hosts


section "Installation des programmes nécessaires"
faire_une_pause

######################## Test des dépots apt
if grep ^d.*universe.* /etc/apt/sources.list
then
echo "Les dépots semblent correctement configurés"
else
echo "
deb http://fr.archive.ubuntu.com/ubuntu edgy universe multiverse
deb-src http://fr.archive.ubuntu.com/ubuntu edgy universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ edgy-updates universe multiverse
deb-src http://fr.archive.ubuntu.com/ubuntu edgy-updates universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ edgy-security universe multiverse
deb-src http://fr.archive.ubuntu.com/ubuntu edgy-security universe multiverse
">>/etc/apt/sources.list
fi

sudo apt-get update
sudo apt-get install krb5-user

######################### Vérification de l'installation de krb5-user
if [ `apt-cache policy krb5-user | grep Installed | cut -c14-19` = "(none)" ]
then
echo -e "\033[1m Il semble que le paquet krb5-user n'ait pas été installé ; soit vous n'avez pas de connection internet, soit apt est mal configuré, soit vous êtes derrière un proxy ; dans ce dernier cas, il vous suffit de modifier le fichier /etc/apt/apt.conf afin qu'apt utilise votre proxy. 
Le script va désormais être quitté ; veuillez le redémarrer une fois que vos problèmes de connection seront résolues \033[0m" && exit 1;
elif [ `apt-cache policy krb5-user | grep Installé | cut -c16-22` = "(aucun)" ]
then
echo -e "\033[1m Il semble que le paquet krb5-user n'ait pas été installé ; soit vous n'avez pas de connection internet, soit apt est mal configuré, soit vous êtes derrière un proxy ; dans ce dernier cas, il vous suffit de modifier le fichier /etc/apt/apt.conf afin qu'apt utilise votre proxy. 
Le script va dèsormais être quitté ; veuillez le redémarrer une fois que vos problèmes de connection seront résolues \033[0m" && exit 1;
else
echo "le paquet krb5-user a bien été installé"
fi


partie "Intégration de la machine au domaine Active Directory"

######################### Configuration krb5.conf
section "Configuration de l'authentification"
faire_une_pause
mv /etc/krb5.conf /etc/krb5.conf.bak
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 = "$CDd"
   admin_server = "$CDd"
   default_domain = "$DOMAINE"
}

[domain_realm]
."$domaine" = "$DOMAINE"
"$domaine" = "$DOMAINE"
" > /etc/krb5.conf

######################### Test de la configuration effectué ci-dessus
section "Tests de la configuration"
faire_une_pause
echo -n "Tapez un login : "
read utilisateur
echo "   1) kinit "$utilisateur" sera fait, mdp vous sera demandé : s'il y a un prompt demandant le mot de passe, alors le domaine a bien été joint."
faire_une_pause
kinit $utilisateur

echo "   2) klist sera fait. Aucun mot de passe ne sera demandé. Vérifier si le nom de votre ordinateur client apparaît bien dans active directory sur le domaine."
faire_une_pause
klist

######################### Installation et configuration de Samba et Winbind
section "Installation de Samba et WinBind"
faire_une_pause
sudo apt-get install samba winbind
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
echo "
[global]
security = ADS
realm = "$DOMAINE"
password server = "$CDd"
workgroup = "$WORKGROUP"
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
#domain master = no
#server string =
#wins server = 
" > /etc/samba/smb.conf

######################### Création du répertoire de profil dans /home/
sudo mkdir /home/$WORKGROUP
sudo chmod 777 /home/$WORKGROUP

sudo /etc/init.d/samba stop
sudo /etc/init.d/samba start
sudo /etc/init.d/winbind start
faire_une_pause

######################### enregistrement de l'ordinateur dans le domaine
echo -n "Tapez un login administrateur : "
read Administrateur
sudo net ads join -U $Administrateur

echo $hote" fait maintenant parti du domaine Windows 2000/2003 : "$DOMAINE" !"
faire_une_pause

######################### configuration de nsswitch.conf
mv /etc/nsswitch.conf /etc/nsswitch.conf.bak
echo "
passwd:      compat  winbind
group:       compat  winbind
shadow:      compat  winbind
hosts:       files dns wins
networks:    files dns

protocols:   db files
services:    db files
ethers:      db files
rpc:         db files

#netgroup:   nis
" > /etc/nsswitch.conf


######################### Configuration de PAM
partie "Mise en place de l'identification"
section "Configuration de PAM"
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
cp /etc/pam.d/sudo /etc/pam.d/gksudo

######################### Test final de la configuration
section "Tests de connexion"
faire_une_pause
echo "   - Redémarrage des services..."
sudo /etc/init.d/samba stop
sudo /etc/init.d/samba start
sudo /etc/init.d/winbind stop
sudo /etc/init.d/winbind start
echo "   - Listes des utilisateurs :"
faire_une_pause
wbinfo -u
echo "   - Listes des groupes :"
faire_une_pause
wbinfo -g
echo "   - Tests du module nsswitch..."
faire_une_pause
sudo getent passwd
sudo getent group

partie "Redèmarrage (a cause de certains services, fin du script)"
faire_une_pause
echo "désirez vous : 
1. effectuer un redémarrage partiel (interface graphique uniquement) 
2. effectuer un redémarrage total (redémarrage de l'ordinateur (réponse par défaut)"
read choix

if [ "$choix" -eq "1" ]
then
sudo /etc/init.d/gdm restart
else
sudo shutdown -r now
fi
