#!/bin/bash # ##### Script permettant de rejoindre un client edubuntu au serveur SE3##### # # Auteur : Mickaël POIRAULT Mickael.Poirault@ac-poitiers.fr # ## $Id: rejoint_se3_ubuntu-7.10.sh 3657 2009-04-07 23:02:41Z keyser $ ## # Tests effectués avec une Edubuntu 7.10 SE3_SERVER="###SE3_SERVER###" SE3_IP="###SE3_IP###" BASE_DN="###BASE_DN###" LDAP_SERVER="###LDAP_SERVER###" NTPSERVERS="###NTPSERVERS###" NTPOPTIONS="###NTPOPTIONS###" TLS="###TLS###" # valeurs systèmes DEBIAN_PRIORITY="critical" DEBIAN_FRONTEND="noninteractive" export DEBIAN_FRONTEND export DEBIAN_PRIORITY #Couleurs COLTITRE="\033[1;35m" COLPARTIE="\033[1;34m" COLTXT="\033[0;37m" COLCHOIX="\033[1;33m" COLDEFAUT="\033[0;33m" COLSAISIE="\033[1;32m" COLCMD="\033[1;37m" COLERREUR="\033[1;31m" COLINFO="\033[0;36m" if [ "$1" == "--help" -o "$1" == "-h" ]; then echo -e "$COLINFO" echo "Permet de faire rejoindre un client edubuntu au serveur SE3." echo "Les tests ont été effectués avec une ubuntu 7.10" echo "Ce script est à lancer sur le client en root." echo "Les données du serveur SE3 sont :" echo " $SE3_SERVER : nom du serveur Se3" echo " $SE3_IP : ip du serveur Se3" echo " $BASE_DN : base dn de l'annuaire" echo " $LDAP_SERVER : addresse du serveur ldap" echo " $NTPSERVERS : serveur de temps pour ntpdate" echo " $NTPOPTIONS : options pour ntpdate" echo "Usage : ./$0" echo "Ce script est distribué selon les termes de la licence GPL" echo "--help cette aide" echo -e "$COLTXT" exit fi # comment rendre le script "cretin-résistant", par Christian Westphal TEST_CLIENT=`ifconfig | grep ":$SE3_IP "` if [ ! -z "$TEST_CLIENT" ]; then echo "Malheureux... Ce script est a executer sur les clients Linux, pas sur le serveur." exit fi [ -e /var/www/se3 ] && echo "Malheureux... Ce script est a executer sur les clients Linux, pas sur le serveur." && exit 1 # Récupération de la date et de l'heure pour la sauvegarde des fichiers DATE=$(date +%D_%Hh%M | sed -e "s§/§_§g") # Modification du fichier /etc/apt/sources.list echo -e "$COLPARTIE" echo "Modification du /etc/apt/sources.list" echo -e "$COLCMD\c" cp /etc/apt/sources.list /etc/apt/sources_sauve_$DATE.list perl -pi -e "s&deb cdrom&# deb cdrom&" /etc/apt/sources.list # Mise à jour de la machine echo -e "$COLPARTIE" echo "Mise à jour de la machine..." echo -e "$COLCMD\c" # Résolution du probleme de lock if [ -e "/var/lib/dpkg/lock" ]; then rm -f /var/lib/dpkg/lock fi # On lance une maj apt-get update apt-get dist-upgrade # On rechange le sources.list perl -pi -e 's&^#.*deb http://(.*)universe$&deb http://$1 universe&' /etc/apt/sources.list perl -pi -e 's&^# deb-src http://(.*)universe$&deb-src http://$1 universe&' /etc/apt/sources.list perl -pi -e 's&^#.*deb http://(.*)restricted$&deb http://$1 restricted&' /etc/apt/sources.list apt-get update # Installation des paquets nécessaires echo -e "$COLPARTIE" echo "Installation des paquets nécessaires:" echo -e "$COLTXT" echo "Ne rien remplir, les fichiers sont configurés/modifiés automatiquement après..." echo -e "$COLCMD\c" apt-get install --assume-yes libnss-ldap libpam-ldap lsof libpam-mount smbfs samba-common ntpdate ocsinventory-agent # Suppression de gnome-mount pour que le montage des clés usb soit possible apt-get remove --assume-yes gnome-mount apt-get install --assume-yes pmount # Configuration des fichiers echo -e "$COLPARTIE" echo "Configuration des fichiers..." # Configuration du fichier /etc/hosts" echo -e "$COLTXT" echo "Configuration du fichier /etc/hosts" echo -e "$COLCMD\c" cp /etc/hosts /etc/hosts_sauve_$DATE OK_SE3=`cat /etc/hosts | grep $SE3_SERVER` if [ -z "$OK_SE3" ]; then echo "$SE3_IP $SE3_SERVER" >> /etc/hosts fi TLS_OK="$TLS" if [ "$TLS_OK" = "1" ]; then REPONSE="" while [ "$REPONSE" != "o" -a "$REPONSE" != "n" ] do echo -e "$COLTXT" echo "Souhaitez vous activer TLS sur LDAP?" echo "(non testé avec la distrib Edubuntu...)" echo -e "Votre serveur semble le permettre [${COLCHOIX}o/n${COLTXT}]" read REPONSE done fi # Configuration du fichier /etc/ldap.conf echo -e "$COLTXT" echo "Configuration du fichier /etc/ldap.conf" echo -e "$COLCMD\c" cp /etc/ldap.conf /etc/ldap_sauve_$DATE.conf echo " # /etc/ldap.conf # Configuration pour Sambaedu3 host $LDAP_SERVER base $BASE_DN ldap_version 3 port 389 bind_policy soft pam_password md5" > /etc/ldap.conf if [ "$REPONSE" = "o" -o "$REPONSE" = "O" ] then echo " ssl start_tls tls_checkpeer no" >> /etc/ldap.conf fi # Configuration du fichier /etc/nsswitch.conf echo -e "$COLTXT" echo "Configuration du fichier /etc/nsswitch.conf" echo -e "$COLCMD\c" cp /etc/nsswitch.conf /etc/nsswitch_sauve_$DATE.conf echo " # /etc/nsswitch.conf # Configuration pour SambaEdu3 passwd: files ldap group: files ldap shadow: files ldap hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis" > /etc/nsswitch.conf # Configuration du fichier /etc/pam.d/login echo -e "$COLTXT" echo "Configuration du fichier /etc/pam.d/login" echo -e "$COLCMD\c" cp /etc/pam.d/login /etc/pam.d/login_sauve_$DATE echo " # /etc/pam.d/login # Configuration pour SambaEdu3 auth requisite pam_securetty.so auth requisite pam_nologin.so session required pam_env.so readenv=1 @include common-auth @include common-account @include common-session session required pam_limits.so #session optional am_lastlog.so session optional pam_lastlog.so session optional pam_motd.so session optional pam_mail.so standard @include common-password" > /etc/pam.d/login # Configuration du fichier /etc/pam.d/common-auth echo -e "$COLTXT" echo "Configuration du fichier /etc/pam.d/common-auth" echo -e "$COLCMD\c" cp /etc/pam.d/common-auth /etc/pam.d/common-auth_sauve_$DATE echo " # /etc/pam.d/common-auth # Configuration pour SambaEdu3 auth optional pam_group.so auth optional pam_mount.so auth sufficient pam_ldap.so use_first_pass auth required pam_unix.so use_first_pass" > /etc/pam.d/common-auth # Configuration du fichier /etc/pam.d/common-account echo -e "$COLTXT" echo "Configuration du fichier /etc/pam.d/common-account" echo -e "$COLCMD\c" cp /etc/pam.d/common-account /etc/pam.d/common-account_sauve_$DATE echo " # /etc/pam.d/common-account # Configuration pour SambaEdu3 account sufficient pam_ldap.so use_first_pass account required pam_unix.so use_first_pass" > /etc/pam.d/common-account # Configuration du fichier /etc/pam.d/common-session echo -e "$COLTXT" echo "Configuration du fichier /etc/pam.d/common-session" echo -e "$COLCMD\c" cp /etc/pam.d/common-session /etc/pam.d/common-session_sauve_$DATE echo " # /etc/pam.d/common-session # Configuration pour SambaEdu3 session optional pam_mount.so session required pam_unix.so use_first_pass" > /etc/pam.d/common-session # Configuration du fichier /etc/pam.d/common-password echo -e "$COLTXT" echo "Configuration du fichier /etc/pam.d/common-password" echo -e "$COLCMD\c" cp /etc/pam.d/common-password /etc/pam.d/common-password_sauve_$DATE echo " # /etc/pam.d/common-password # Configuration pour SambaEdu3 password required pam_unix.so nullok obscure min=8 md5" > /etc/pam.d/common-password # Configuration du fichier /etc/pam.d/sudo echo -e "$COLTXT" echo "Configuration du fichier /etc/pam.d/sudo" echo -e "$COLCMD\c" cp /etc/pam.d/sudo /etc/pam.d/sudo_sauve_$DATE echo " # /etc/pam.d/sudo # Configuration pour SambaEdu3 auth required pam_unix.so nullok_secure @include common-account" > /etc/pam.d/sudo # Configuration du fichier /etc/security/group.conf echo -e "$COLTXT" echo "Configuration du fichier /etc/security/group.conf" echo -e "$COLCMD\c" cp /etc/security/group.conf /etc/security/group_sauve_$DATE.conf echo " # /etc/security/group.conf # Configuration pour SambaEdu3 gdm;*;*;Al0000-2400;floppy,cdrom,audio,video,plugdev kdm;*;*;Al0000-2400;floppy,cdrom,audio,video,plugdev" > /etc/security/group.conf TROUVE_DOSSIER(){ retour="" for dossier in /bin /sbin /usr/bin /usr/sbin do ls $dossier/$1 2> /dev/null 1>&2 if [ "$?" = "0" ]; then retour=$dossier fi done echo "$retour" } chemin_lsof=$(TROUVE_DOSSIER lsof) chemin_losetup=$(TROUVE_DOSSIER losetup) chemin_mount=$(TROUVE_DOSSIER mount) chemin_umount=$(TROUVE_DOSSIER umount) chemin_smbmount=$(TROUVE_DOSSIER smbmount) chemin_smbumount=$(TROUVE_DOSSIER smbumount) chemin_fsck=$(TROUVE_DOSSIER fsck) chemin_mount_cifs=$(TROUVE_DOSSIER mount.cifs) # Configuration du fichier /etc/security/pam_mount.conf echo -e "$COLTXT" echo "Configuration du fichier /etc/security/pam_mount.conf" echo -e "$COLCMD\c" cp /etc/security/pam_mount.conf /etc/security/pam_mount_sauve_$DATE.conf echo " # /etc/security/pam_mount.conf # Configuration pour SambaEdu3 debug 0 mkmountpoint 1 fsckloop /dev/loop7 options_allow nosuid,nodev,loop,encryption,fsck options_require nosuid,nodev lsof $chemin_lsof/lsof %(MNTPT) fsck $chemin_fsck/fsck -p %(FSCKTARGET) losetup $chemin_losetup/losetup -p0 \"%(before=\\\"-e\\\" CIPHER)\" \"%(before=\\\"-k\\\" KEYBITS)\" %(FSCKLOOP) %(VOLUME) unlosetup $chemin_losetup/losetup -d %(FSCKLOOP) #cifsmount /bin/mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o \"username=%(USER)%(before=\\\",\\\" OPTIONS)\" cifsmount $chemin_mount_cifs/mount.cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o \"username=%(USER)%(before=\\\",\\\" OPTIONS)\" #smbmount /usr/bin/smbmount //%(SERVER)/%(VOLUME) %(MNTPT) -o \"username=%(USER)%(before=\\\",\\\" OPTIONS)\" #ncpmount /usr/bin/ncpmount %(SERVER)/%(USER) %(MNTPT) -o \"pass-fd=0,volume=%(VOLUME)%(before=\\\",\\\" OPTIONS)\" #smbumount /usr/bin/smbumount %(MNTPT) #ncpumount /usr/bin/ncpumount %(MNTPT) # Linux supports lazy unmounting (-l). May be dangerous for encrypted volumes. # May also break loopback mounts because loopback devices are not freed. # Need to unmount mount point not volume to support SMB mounts, etc. umount /usr/sbin/umountH.sh %(MNTPT) # On OpenBSD try \"/usr/local/bin/mount_ehd\" (included in pam_mount package). #lclmount /bin/mount -p0 -t %(FSTYPE) %(VOLUME) %(MNTPT) \"%(before=\\\"-o\\\" OPTIONS)\" #cryptmount /bin/mount -t crypt \"%(before=\\\"-o\\\" OPTIONS)\" %(VOLUME) %(MNTPT) #nfsmount /bin/mount %(SERVER):%(VOLUME) %(MNTPT) \"%(before=\\\"-o\\\" OPTIONS)\" # For BSD: mntagain mount_null %(PREVMNTPT) %(MNTPT) # For Solaris: mntagain mount -F lofs %(PREVMNTPT) %(MNTPT) #mntcheck /bin/mount # For BSD's (don't have /etc/mtab) #pmvarrun /usr/sbin/pmvarrun -u %(USER) -d -o %(OPERATION) #volume * cifs $SE3_SERVER netlogon /home/netlogon mapchars,serverino,nobrl,iocharset=iso8859-15 - - volume * cifs $SE3_SERVER & /home/& uid=&,gid=root,mapchars,serverino,nobrl,iocharset=iso8859-15 - - volume * cifs $SE3_SERVER Classes /home/&/Desktop/Classes uid=&,gid=root,mapchars,serverino,nobrl,noperm,iocharset=iso8859-15 - - volume * cifs $SE3_SERVER Progs /home/&/Progs uid=&,gid=root,mapchars,serverino,nobrl,noperm,iocharset=iso8859-15 - - volume * cifs $SE3_SERVER Docs /home/&/Desktop/Partages uid=&,gid=root,mapchars,serverino,nobrl,noperm,iocharset=iso8859-15 - - " > /etc/security/pam_mount.conf # Création du script de démontage des lecteurs réseaux : umountH.sh echo -e "$COLTXT" echo "Création du script de démontage des lecteurs réseaux : umountH.sh" echo -e "$COLCMD\c" touch /usr/sbin/umountH.sh chmod +x /usr/sbin/umountH.sh echo " #!/bin/bash # ##### Script permettant de démonter correctement le /home/user##### # # Auteur : Mickaël POIRAULT Mickael.Poirault@ac-poitiers.fr # if [ \"\$1\" == \"--help\" -o \"\$1\" == \"-h\" ] then echo \"Permet de démonter correctement le /home/user\" echo \"Ce script est lancé automatiquement par pam_mount\" echo \"Usage : /usr/sbin/umountH.sh /home/user\" echo \"Ce script est distribué selon les termes de la licence GPL\" echo \"--help cette aide\" exit fi killall trackerd 2>/dev/null killall bluetooth-applet 2>/dev/null # Détermination du répertoire à démonter homeUSER=\$1 # Attendre la fin des processus qui utilisent le répertoire à démonter until [ ``\`$chemin_lsof/lsof \$homeUSER | wc -l\``` = \"0\" ] do sleep 1 done # Démontage du repertoire /bin/umount \$homeUSER" > /usr/sbin/umountH.sh # Configuration du fichier /etc/default/ntpdate echo -e "$COLTXT" echo "Configuration du fichier /etc/default/ntpdate" echo -e "$COLCMD\c" cp /etc/default/ntpdate /etc/default/ntpdate_sauve_$DATE echo " # /etc/default/ntpdate # Configuration pour SambaEdu3 # servers to check. (Separate multiple servers with spaces.) #NTPSERVERS=\"$NTPSERVERS\" NTPSERVERS=\"$SE3_SERVER\" # additional options for ntpdate $NTPOPTIONS" > /etc/default/ntpdate # conf ocs-inventory perl -pi -e "s&.*&$SE3_IP:909&" /etc/ocsinventory-client/ocsinv.conf # On remonte l'inventaire /usr/bin/ocsinventory-client.pl # On reload crond /etc/init.d/cron reload # Fin de la configuration echo -e "$COLTITRE" echo "Fin de l'installation." echo -e "$COLINFO" echo "ATTENTION : Seul les comptes ayant un shell peuvent se connecter" echo "" echo "Vous devez configurer les locale pour être compatible avec Se3" echo "pour cela faire un apt-get install locales et lire la doc sur www.sambaedu.org" echo "" echo "Les clients LTSP du serveur Edubuntu peuvent aussi se connecter" echo "sur le domaine SE3" echo "(voir documentation sur la configuration DHCP si les SE3 fait déjà DHCP)." echo -e "$COLTXT" DEBIAN_PRIORITY="high" DEBIAN_FRONTEND="dialog" export DEBIAN_PRIORITY export DEBIAN_FRONTEND exit 0