[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/sbin/ -> se3_chgt_shell.sh (source)

   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  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1