[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/bin/bash 2 3 # Script de changement du shell des utilisateurs 4 # Stephane Boireau (Animateur TICE sur le Secteur de Bernay/Pont-Audemer (27)) 5 # Le 04/02/2006 6 7 # 8 ## $Id: se3_chgt_shell.sh 7744 2013-03-31 23:47:51Z keyser $ ## 9 10 11 if [ "$1" == "--help" -o "$1" == "-h" ] 12 then 13 echo "Script de changement du shell des utilisateurs" 14 echo "Pas d'option" 15 echo "--help cette aide" 16 17 exit 18 fi 19 20 21 #Couleurs 22 COLTITRE="\033[1;35m" # Rose 23 COLPARTIE="\033[1;34m" # Bleu 24 25 COLTXT="\033[0;37m" # Gris 26 COLCHOIX="\033[1;33m" # Jaune 27 COLDEFAUT="\033[0;33m" # Brun-jaune 28 COLSAISIE="\033[1;32m" # Vert 29 30 COLCMD="\033[1;37m" # Blanc 31 32 COLERREUR="\033[1;31m" # Rouge 33 COLINFO="\033[0;36m" # Cyan 34 35 ERREUR() 36 { 37 echo -e "$COLERREUR" 38 echo "ERREUR!" 39 echo -e "$1" 40 echo -e "$COLTXT" 41 exit 0 42 } 43 44 POURSUIVRE() 45 { 46 REPONSE="" 47 while [ "$REPONSE" != "o" -a "$REPONSE" != "n" ] 48 do 49 echo -e "$COLTXT" 50 echo -e "Peut-on poursuivre? ($COLCHOIX}o/n$COLTXT}) $COLSAISIE\c" 51 read REPONSE 52 done 53 54 if [ "$REPONSE" != "o" ]; then 55 ERREUR "Abandon!" 56 fi 57 } 58 59 clear 60 echo -e "$COLTITRE" 61 echo "************************" 62 echo "* SCRIPT DE CHANGEMENT *" 63 echo "* DE 'SHELL' *" 64 echo "************************" 65 66 REPLISTE="" 67 while [ "$REPLISTE" != "1" -a "$REPLISTE" != "2" -a "$REPLISTE" != "3" ] 68 do 69 echo -e "$COLTXT" 70 echo -e "Voulez-vous:" 71 echo -e " ($COLCHOIX}1$COLTXT}) Modifier le shell de tous les utilisateurs." 72 echo -e " ($COLCHOIX}2$COLTXT}) Modifier le shell d'un utilisateur particulier." 73 echo -e " ($COLCHOIX}3$COLTXT}) Modifier le shell des membres d'un groupe particulier." 74 echo -e "Votre choix: $COLSAISIE\c" 75 read REPLISTE 76 done 77 78 # Question: Quel shell imposer... 79 echo -e "$COLINFO" 80 echo -e "Vous devez proposer un shell avec son chemin." 81 echo -e "Voici quelques exemples de shells:" 82 echo -e " /bin/bash" 83 echo -e " /bin/true" 84 echo -e " /bin/false" 85 86 REPONSE="" 87 while [ "$REPONSE" != "1" ] 88 do 89 echo -e "$COLTXT" 90 echo -e "Quel shell souhaitez-vous mettre en place pour ces utilisateurs?" 91 echo -e "Shell: [$COLDEFAUT}/bin/bash$COLTXT}] $COLSAISIE\c" 92 cd / 93 read -e CHOIXSHELL 94 95 if [ -z "$CHOIXSHELL" ]; then 96 CHOIXSHELL="/bin/bash" 97 fi 98 99 echo -e "$COLTXT" 100 echo -e "Vous avez-choisi $COLINFO}$CHOIXSHELL$COLTXT}" 101 echo -e "Souhaitez vous poursuivre ($COLCHOIX}1$COLTXT}) ou préférez-vous corriger ($COLCHOIX}2$COLTXT})? $COLSAISIE\c" 102 read REPONSE 103 done 104 105 echo -e "$COLINFO" 106 echo "Sauvegarde initiale du LDAP." 107 echo "Le serveur LDAP va être arrêté puis redémarré." 108 echo -e "$COLTXT" 109 echo "Appuyez sur ENTREE pour poursuivre..." 110 read PAUSE 111 112 echo -e "$COLCMD\c" 113 ladate=$(date +"%Y.%m.%d-%H.%M.%S"); 114 tmp=/root/tmp/$ladate 115 mkdir -p $tmp 116 117 ROOTDN=$(cat /etc/ldap/slapd.conf | grep '^rootdn' | tr '\n' ' ' | cut -d'"' -f2) 118 BASEDN=$(cat /etc/ldap/ldap.conf | grep '^BASE' | tr "\n" " " | sed -e "s/ \{2,\}/ /g" | cut -d" " -f2) 119 120 echo -e "$COLTXT" 121 echo "Sauvegarde avec ldapsearch..." 122 echo -e "$COLCMD\c" 123 ldapsearch -xLLL -D "$ROOTDN" -w "$(cat /etc/ldap.secret)" > $tmp/ldapsearch_$ladate}.ldif 124 125 echo -e "$COLTXT" 126 echo "Arrêt du serveur LDAP..." 127 echo -e "$COLCMD\c" 128 /etc/init.d/slapd stop 129 sleep 5 130 if ps aux | grep slapd | grep -v grep > /dev/null ;then 131 echo -e "$COLERREUR" 132 echo "ERREUR: Le serveur LDAP n'est semble-t-il pas arrêté." 133 echo " Par précaution, le script s'arrête là." 134 echo -e "$COLTXT" 135 exit 136 else 137 echo -e "$COLTXT" 138 echo "Le serveur LDAP est arrêté." 139 fi 140 141 echo -e "$COLTXT" 142 echo "Sauvegarde avec slapcat..." 143 echo -e "$COLCMD\c" 144 # Problème: Avec le LDAP sur Sarge, le /var/lib/ldap peut enfler de façon fantastique. 145 # Il se peut alors qu'il n'y ait pas la place dans /root/... pour sauvegarder le LDAP avec tar. 146 #tar -czf $tmp/var_lib_ldap_${ladate}.tar.gz /var/lib/ldap 147 slapcat > $tmp/slapcat_$ladate}.ldif 148 149 echo -e "$COLTXT" 150 echo "Redémarrage du serveur LDAP..." 151 echo -e "$COLCMD\c" 152 /etc/init.d/slapd start 153 sleep 5 154 155 if ps aux | grep slapd | grep -v grep > /dev/null ;then 156 echo -e "$COLTXT" 157 echo "Le serveur LDAP est redémarré." 158 else 159 echo -e "$COLERREUR" 160 echo "ERREUR: Le serveur LDAP n'est semble-t-il pas redémarré." 161 echo " Par précaution, le script s'arrête là." 162 echo " Vous devez redémarrer le serveur LDAP à la main." 163 echo -e "$COLTXT" 164 exit 165 fi 166 167 echo -e "$COLINFO" 168 echo "Le dossier $tmp contient des sauvegardes de l'annuaire au cas où..." 169 170 # Modification du shell: 171 case $REPLISTE in 172 1) 173 echo -e "$COLTXT" 174 echo -e "Vous allez modifier le shell de $COLERREUR}tous$COLTXT} les utilisateurs dans la branche ou=People." 175 echo -e "(excepté 'admin')" 176 177 POURSUIVRE 178 179 echo -e "$COLCMD" 180 ldapsearch -xLLL -b ou=People,$BASEDN uid | grep "^uid: " | sed -e "s/^uid: //" | while read login 181 do 182 if [ "$login" != "ldapadm" -a "$login" != "smbadm" -a "$login" != "samba" -a "$login" != "root" -a "$login" != "admin" ]; then 183 # ... 184 echo "dn: uid=$login,ou=People,$BASEDN" > $tmp/modif_shell_$login}.ldif 185 echo "changetype: modify" >> $tmp/modif_shell_$login}.ldif 186 echo "replace: loginShell" >> $tmp/modif_shell_$login}.ldif 187 echo "loginShell: $CHOIXSHELL" >> $tmp/modif_shell_$login}.ldif 188 echo "" >> $tmp/modif_shell_$login}.ldif 189 190 echo -e "$COLTXT\c" 191 echo "Modification du shell pour $login..." 192 echo -e "$COLCMD\c" 193 ldapmodify -x -D "$ROOTDN" -w "$(cat /etc/ldap.secret)" -f $tmp/modif_shell_$login}.ldif 194 fi 195 done 196 ;; 197 2) 198 echo -e "$COLTXT" 199 echo -e "Pour quel utilisateur souhaitez-vous modifier le shell? $COLSAISIE\c" 200 read login 201 202 echo -e "$COLCMD" 203 if [ ! -z "$(ldapsearch -xLLL uid=$login | grep 'uid:')" ]; then 204 echo "dn: uid=$login,ou=People,$BASEDN" > $tmp/modif_shell_$login}.ldif 205 echo "changetype: modify" >> $tmp/modif_shell_$login}.ldif 206 echo "replace: loginShell" >> $tmp/modif_shell_$login}.ldif 207 echo "loginShell: $CHOIXSHELL" >> $tmp/modif_shell_$login}.ldif 208 echo "" >> $tmp/modif_shell_$login}.ldif 209 210 echo -e "$COLTXT\c" 211 echo "Modification du shell pour $login..." 212 echo -e "$COLCMD\c" 213 ldapmodify -x -D "$ROOTDN" -w "$(cat /etc/ldap.secret)" -f $tmp/modif_shell_$login}.ldif 214 else 215 ERREUR "L'utilisateur $login n'apparait pas dans l'annuaire." 216 fi 217 ;; 218 3) 219 echo -e "$COLTXT" 220 echo -e "Pour quel groupe souhaitez-vous modifier le shell? $COLSAISIE\c" 221 read groupe 222 223 echo -e "$COLCMD" 224 if [ ! -z "$(ldapsearch -xLLL -b ou=Groups,$BASEDN cn=$groupe | grep 'cn:')" ]; then 225 if ldapsearch -xLLL -b ou=Groups,$BASEDN cn=$groupe | grep "objectClass: posixGroup" > /dev/null; then 226 ldapsearch -xLLL -b ou=Groups,$BASEDN cn=$groupe | grep "memberUid: " | sed -e "s/^memberUid: //" | while read login 227 do 228 if [ "$login" != "ldapadm" -a "$login" != "smbadm" -a "$login" != "samba" -a "$login" != "root" -a "$login" != "admin" ]; then 229 echo "dn: uid=$login,ou=People,$BASEDN" > $tmp/modif_shell_$login}.ldif 230 echo "changetype: modify" >> $tmp/modif_shell_$login}.ldif 231 echo "replace: loginShell" >> $tmp/modif_shell_$login}.ldif 232 echo "loginShell: $CHOIXSHELL" >> $tmp/modif_shell_$login}.ldif 233 echo "" >> $tmp/modif_shell_$login}.ldif 234 235 echo -e "$COLTXT\c" 236 echo "Modification du shell pour $login..." 237 echo -e "$COLCMD\c" 238 ldapmodify -x -D "$ROOTDN" -w "$(cat /etc/ldap.secret)" -f $tmp/modif_shell_$login}.ldif 239 fi 240 done 241 else 242 ldapsearch -xLLL -b ou=Groups,$BASEDN cn=$groupe | grep "member: " | sed -e "s/^member: uid=//" | cut -d"," -f1 | while read login 243 do 244 if [ "$login" != "ldapadm" -a "$login" != "smbadm" -a "$login" != "samba" -a "$login" != "root" -a "$login" != "admin" ]; then 245 echo "dn: uid=$login,ou=People,$BASEDN" > $tmp/modif_shell_$login}.ldif 246 echo "changetype: modify" >> $tmp/modif_shell_$login}.ldif 247 echo "replace: loginShell" >> $tmp/modif_shell_$login}.ldif 248 echo "loginShell: $CHOIXSHELL" >> $tmp/modif_shell_$login}.ldif 249 echo "" >> $tmp/modif_shell_$login}.ldif 250 251 echo -e "$COLTXT\c" 252 echo "Modification du shell pour $login..." 253 echo -e "$COLCMD\c" 254 ldapmodify -x -D "$ROOTDN" -w "$(cat /etc/ldap.secret)" -f $tmp/modif_shell_$login}.ldif 255 fi 256 done 257 fi 258 else 259 ERREUR "Le groupe $groupe n'apparait pas dans l'annuaire." 260 fi 261 ;; 262 esac 263 264 echo -e "$COLTITRE" 265 echo "Terminé" 266 echo -e "$COLTXT" 267
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |