Ceci est une ancienne révision du document !


Script

#!/bin/ksh

# Ce script effectue des taches d'administration #

# Declaration de variables utilisees dans le script PASSWD=“/etc/passwd” GROUP=“/etc/group” HOME=“/home” OPASSWD=“/etc/passwd” BINPATH=“/usr/sbin”

# Cette fonction genere une pause ecran function pause {

      printf "\nAppuyer sur la touche \"Entree\" ou \"Return\" pour continuer...\n"
      read x

}

function existe {

      while getopts "ug" option
      do
              case "$option" in
                      u)      grep -i "^$2:" $PASSWD > /dev/null && return 0
                              return 1
                              ;;
                      g)      grep -i "^$2:" $GROUP > /dev/null && return 0
                              return 1
                              ;;
                      *)      echo "Option incorrecte."
                              ;;
              esac
      done

}

function saisie {

      while getopts "ug" option
      do
              case $option in
                      u)      printf "\nNom de l'utilisateur : "
                              read user
                              print
                              ;;
                      g) printf "\nNom du groupe : "
                              read groupe
                              print
                              ;;
                      *)      echo "Option incorrecte."
                              ;;
              esac
      done

}

################################################################### # GESTION DES GROUPES ################################################################### # # Cette fonction cree un groupe function cree_group {

      while (true) ; do
              # Saisie du nom du groupe
              saisie -g
              # Verifier que le groupe n'existe pas
              if ! existe -g $groupe ; then
                # Saisie securisee du numero du groupe (GID)
                while(true) ; do
                      printf "\nNum.ro GID : "
                      read gid
                      expr ":$gid:" : ':[0-9]\{2,5\}:' > /dev/null
                      if (( $? != 0 )) ; then
                              print "Mauvaise saisie. Recommencer"
                      else
                              # Verifier que le GID n'existe pas dans /etc/group
                              grep "^.*:x:$gid:" $GROUP > /dev/null
                              if       (( $? == 0 ))
                              then
                                      print "$gid existe dans $GROUP"
                                      print "Saisir un autre numero."
                              else
                                      #su -l root -s /bin/bash -c \
                                      $BINPATH/groupadd -g $gid $groupe > /dev/null 2>&1
                                      if (( $? == 0 )) ; then
                                              printf "\nLe groupe $groupe a bien ete cree"
                                      else
                                              printf "\nEchec de creation de $groupe"
                                      fi
                                      break
                              fi
                      fi
                      done
              break
      else
              printf "\n$groupe existe dans $GROUP"
              printf "\nSaisir un autre nom\n"
      fi

done }

# Cette fonction modifie un groupe function modif_group {

      while (true) ; do
              # Saisie du nom du groupe
              saisie -g
              # Verifier que le groupe existe
              if existe -g $groupe ; then
                      ligne=`grep -i "^$groupe:" $GROUP`
                      IFS=:
                      set $ligne
                      printf "\nListe des champs a modifier \
                      \n\t 1. Nom du groupe : $1\
                      \n\t 2. Numero du groupe: $3\n"
                      while (true) ; do
                              printf "\nSaisir votre choix : "
                              read choix
                              expr "$choix" : '[12]\{1\}' > /dev/null 2>&1
                              if (( $? != 0 )) ; then
                                      printf "Saisie incorrecte. Recommencer."
                              else
                                if (( $choix == 1 )) ; then
                                      saisie -g
                                      $BINPATH/groupmod -n $groupe $1 > /dev/null
                                      if (( $? != 0 )) ; then
                                              printf "\nEchec de modification.Recommencer"
                                             else
                                                      printf "\nModification reussie"
                                                      break
                                              fi
                                      elif (( $choix == 2 )) ; then
                                              printf "\nSaisir le numero de groupe : "
                                              read gid
                                              $BINPATH/groupmod -g $gid $1
                                              if (( $? != 0 )) ; then
                                                printf "\nEchec de modification."
                                              else
                                                      printf "\nModification reussie"
                                                      break
                                              fi
                                      fi
                              fi
                      done
                      break
              else
                      printf "\n$groupe n'existe pas."
              fi
      done

}

# Cette fonction supprime un groupe function delete_group {

      while (true) ; do
              # Saisie du nom du groupe
              saisie -g
              # Verifier que le groupe existe
              if existe -g $groupe ; then
                      $BINPATH/groupdel $groupe
                      if (( $? == 0 )) ; then
                              printf "\n$groupe a ete supprime avec succes"
                              break
                      else
                              printf "\nEchec de suppression du groupe. Recommencer"
                      fi
              else
                      printf "\n$groupe n'existe pas dans $GROUP"
                      pause
              fi
      done

}

# Cette fonction affiche des informations sur un groupe function affiche_group {

      while (true) ; do
              # Saisie du nom du groupe
              saisie -g
              # Verifier que le groupe existe
              if existe -g $groupe ; then
                      ligne=`grep -i "^$groupe:" $GROUP`
                      IFS=:
                      set $ligne
                      printf "\nNom du groupe : $1"
                      printf "\nNumero du groupe : $3"
                      printf "\nListe des membres du groupe : \n"
                      grep ".*:x:[0-9]*:$3:" $PASSWD > membres
                      gawk -F: '{print $1}' membres
                      rm membres
                      break
              else
                      printf "\n$groupe n'existe pas dans $GROUP"
              fi
      done

}

################################################################### # GESTION DES UTILISATEURS # ###################################################################

# Cette fonction affiche les informations sur un compte function affiche_user {

      # Saisie du nom du compte
      saisie -u
      # Verifier que le compte existe
      if ! existe -u $user ; then
              printf "\n$user n'existe pas dans /etc/passwd"
      else
              ligne=`grep -i "^$user:" $PASSWD`
              printf "\nInformations sur le compte $user\n"
              IFS=:
              set $ligne
              printf "Nom de connexion : $1\n"
              printf "Numero de l'utilisateur : $3\n"
              printf "Numero du groupe : $4\n"
              printf "Nom du shell de connexion : $7\n"
              printf "Nom du repertoire de connexion : $6\n"
      fi

}

# Cette fonction cree un compte utilisateur function cree_user {

while(true) ; do
              # Saisie du nom du compte
              saisie -u
              # Verifier que le compte n'existe pas deja
              if ! existe -u $user ; then
                      # Saisie securisee du numero du compte (UID)
                      while(true) ; do
                              printf "\nNumero UID : "
                              read uid
                              expr ":$uid:" : ':[0-9]\{3,5\}:' > /dev/null
                              if [ $? != 0 ] ; then
                                      print "Saisie incorrecte. Recommencer"
                              else
                                      # Verifier que l'UID n'existe pas dans /etc/passwd
                              grep "^.*:x:$uid:" $PASSWD > /dev/null
                                      if       (( $? == 0 ))
                                      then
                                              print "$uid existe dans $PASSWD"
                                              print "Saisir un autre numero."
                                      else
                                              break
                                      fi
                              fi
                      done
                      # Saisie du numero du groupe (GID)
                      while (true) ; do
                              printf "\nNumero GID : "
                              read gid
                              expr ":$gid:" : ':[0-9]\{3,5\}:$' > /dev/null
                              if (( $? != 0 )) ; then
                                      print "Saisie incorrecte. Recommencer"
                              else
                                      # Verifier que le GID existe dans /etc/group
                                      # Sinon, le creer
                                      grep "^.*:x:$gid:$" $GROUP > /dev/null
                                      if (( $? != 0 )) ; then
                                              print "$gid n'existe pas dans $GROUP"
                                              print "Creation de $gid"
                                              # Appel de cree_group
                                              cree_group
                                      fi
                                      break
                              fi
                      done
                      # Nom du repertoire de connexion
                      rep="$HOME/$user"
                      # Saisie du shell
                      while (true) ; do
                              printf "\nNom du shell parmi la liste suivante :

                              print "$(cat /etc/shells)"
                              print
                              printf "\nVotre choix : "
                              read shell
                              grep "^$shell$" /etc/shells > /dev/null
                              if (( $? != 0 )) ; then
                                      print "Saisie incorrecte. Recommencer"
                              else
                                      break
                              fi
                      done
                      # Mot de passe
                      printf "\nMot de passe : "
                      read mdp
                      # Rajouter le nouvel utilisateur
                      #su -l root -c "
                      $BINPATH/useradd -u $uid -g $gid -d $rep -m -s $shell \
                  -p $mdp $user > /dev/null
                      if [ $? == 0 ] ; then
                              printf "\n$user a bien ete cree "
                      else
                              printf "\nEchec de creation de $user"
                      fi
                      break
              else
                      print "$user existe dans $PASSWD"
                      print "Saisir un autre nom."
                      print
              fi
      done
      printf "\nRetour au menu precedent"

}

# Cette fonction modifie les informations d'un compte function modif_user { while (true) ; do

      # Saisie du nom du compte
      saisie -u
      # Verifier que le compte existe
      if ! existe -u $user ; then
              printf "\n$user n'existe pas. Recommencer\n"
      else
              ligne=`grep -i "^$user:" $PASSWD`
              IFS=:
              set $ligne
              printf "\nChamps a modifier : \
              \n\t1. Nom de connexion : $1\
              \n\t2. Numero UID : $3\
              \n\t3. Numero GID : $4\
              \n\t4. Shell de connexion : $7\
              \n\t5. Repertoire de connexion : $6\n"
              printf "\nSaisir votre choix : "
              read choix
              while (( $choix < 1 || $choix > 5 )) ; do
                      printf "\nChoix incorrect. Saisir un autre choix : "
                      read choix
              done
              case $choix in
                      1)      while(true) ; do
                                      saisie -u
                                      $BINPATH/usermod -l $user $1 > /dev/null
                                      if (( $? == 0 )) ; then
                                              printf "$1 a ete modifie avec succes\n"
                                              break
                                      else
                                              printf "\nEchec de modification. Recommencer"
                                      fi
                              done
                              ;;
                      2)      while (true) ; do
                                      printf "\nSaisir le nouveau numero UID : "
                                      read uid
                                      $BINPATH/usermod -u $uid $user >/dev/null
                                      if (( $? == 0 )) ; then
                                              printf "$user a ete modifie avec succes.\n"
                                              break
                                      else
                                              printf "Echec de modification. Recommencer"
                                      fi
                              done
                              ;;
                      3)      while (true) ; do
                                      printf "\nSaisir le nouveau numero GID : "
                                      read gid
                                      $BINPATH/usermod -g $gid $user >/dev/null
                                      if (( $? == 0 )) ; then
                                              printf "$user a ete modifie avec succes.\n"
                                              break
                                      else
                                              printf "Echec de modification. Recommencer"
                                      fi
                              done
                              ;;
                      4)      while (true) ; do
                                      printf "\nSaisir le shell dans la liste:\n"
                                      cat /etc/shells
                                      printf "\nNouveau shell : "
                                      read shell
                                      $BINPATH/usermod -s $shell $user > /dev/null
                                      if (( $? == 0 )) ; then
                                              printf "$user a ete modifie avec succes.\n"
                                              break
                                      else
                                              printf "Echec de modification. Recommencer"
                                      fi
                              done
                              ;;
                      5)      while (true) ; do
                                      printf "\nSaisir le repertoire de connexion : "
                                      read rep
                                      $BINPATH/usermod -d $rep -m $user > /dev/null
                                      if (( $? == 0 )) ; then
                                              printf "$user a ete modifie avec succes.\n"
                                              break
                                      else
                                              printf "Echec de modification. Recommencer"
                                      fi
                              done
                              ;;
              esac
              break
      fi

done }

# Cette fonction supprime un compte function delete_user {

      while(true) ; do
              # Saisie du nom du compte
              saisie -u
              # Verifier que le compte existe
              if ! existe -u $user ; then
                      printf "\n$user n'existe pas dans $PASSWD. Recommencer"
              else
                      $BINPATH/userdel -r $user > /dev/null
                      if (( $? == 0 )) ; then
                              printf "\n$user a ete supprime avec succes."
                              break
                      else
                              printf "\nEchec de suppression. Recommencer"
                      fi
              fi
      done

}

# Cette fonction cree une liste d'utilisateurs qui se trouvent dans un \ # fichier. Ce dernier contient egalement les informations necessaires . \ # la creation des comptes # Chaque ligne du fichier contient les donnees suivantes : # prenom nom nom_du_groupe nom_shell # Les champs sont separes par des espaces

function cree_liste_user {

      UID_DEB=`cat /etc/passwd | cut -d: -f 3 | sort -n | tail -2 | head -1`
      UID=`expr $UID_DEB + 1`
      printf "\nSaisir le nom de la base qui contient les comptes a creer : "
      read base
      # Verifier l'existence du fichier
      if [ ! -f $base ] ; then
              printf "\n $base n'existe pas \n"
      else
              while read prenom nom groupe shell
              do
                      $BINPATH/useradd -u $UID -g $groupe -d /home/$nom -m \
                      -s /bin/$shell -p $nom $nom
                      if [ $? == 0 ] ; then
                              printf "\n$nom a ete cree avec succes\n"
                              ((UID+=1))
                      else
                              printf "\nEchec de creation de $nom\n"
                      fi
              done < $base
      fi

}

################################################################### # Sauvegarde et archivage du systeme # ################################################################### # Cette fonction archive un repertoire # function archive_rep {

      printf "\nFonctionalite à créer.\n "

}

# Cette fonction procede a l'extraction d'une archive function restaure_rep {

      printf "\nFonctionalite à créer.\n "

}

# Cette fonction affiche le contenu d'une archive function affiche_archive {

      printf "\nFonctionalite à créer.\n "

}

# Cette fonction compresse une archive a l'aide de gzip function compress_archive {

      printf "\nFonctionalite à créer.\n "

}

# Cette fonction decompresse une archive compressee par gzip function decompress_archive {

      printf "\nFonctionalite à créer.\n "

}

# Affichage du menu clear printf “\t\t\t MENU \n\n” print

      PS3="Quel est votre choix ? "

select item in ”- Creer un compte utilisateur “ \ ”- Modifier un compte utilisateur “ \ ”- Supprimer un compte utilisateur “ \ ”- Afficher un compte utilisateur “ \ ”- Creer une liste d'utilisateurs“ \ ”- Creer un groupe“ \ ”- Modifier un groupe “ \ ”- Supprimer un groupe“ \ ”- Afficher un groupe“ \ ”- Creer une archive d'un repertoire “ \ ”- Restaurer une archive d'un repertoire “ \ ”- Visualiser le contenu d'une archive “ \ ”- Compresser une archive a l'aide de gzip “ \ ”- Decompresser une archive a l'aide de gunzip “ \ ”- Quitter“ do

case "$REPLY" in
      1)      cree_user ;;
      2)      modif_user ;;
      3)      delete_user ;;
      4)      affiche_user ;;
      5)      cree_liste_user ;;
      6)      cree_group ;;
      7)      modif_group ;;
      8)      delete_group ;;
      9)      affiche_group ;;
      10)     archive_rep ;;
      11)     restaure_rep ;;
      12)     affiche_archive ;;
      13)     compress_archive ;;
      14)     decompress_archive ;;
      15)     printf "\nFin de traitement\n\n"
              break ;;
      *)      print "Mauvais choix." ;;
esac
print
pause

done exit 0

Menu