Script création d'utilisateur

king_neo2001 Messages postés 3 Statut Membre -  
 cloonn -
Bonjour j'ai un souci
je doit créer un script qui cré un utilisateur UNIX de maniere simple en respectant les contraintes exposé au fur a mesure des question ci-dessous. IL EST INTERDIT D'APPELER LA COMMANDE USERADD. le fichier /etc/passwd doit etre rempli par le script
cree_user.sh [-p password] <user>
/etc/passwd : login:x:UID:GID:commentaire:homedir:shell
/etc/group: login:!:GID:

Question 1
Gérez les parametres passés au script(S#,$1,etc).Ne proposez pas de saisie,ne placez pas ces valeurs a l'avance dans les variables. En cas de présence d'un seul paramètre c'est forcement le nom d'utilisateur a créer, le placer dans une variable appelée <<NUSER>>. S'il y a trois parametres alors celui situé apres le -p(pour password) est le mot de passe de l'utilisateur, le placer dans une variable PASSWD. Le -p peut etre placé en premier mais aussi apres le nom de l'utilisateur autrement dit l'ordre des parametres n'a pas d'importance

Question 2
Modifiez ou ajouter la gestion des erreurs au bloc précedent : le script quitte avec une erreur si le nom d'utilisateur n'est pas precisé. Si le mot de passe est absent il es fixé par défaut a password

Question 3
un nom d'utilisateur ne doit pas depasser huit caractere. Si le nom depasse 8 caractere quittez avec une erreur.

Question 4
Verifiez si l'utilisateur existe deja (presence dans /etc/passwd)

Question 5
Calculez un UID pour l'utilisateur. Trouvez l'UID le plus élevé dans /etc/passwd et lui ajouter 1. Placer cette valeur dans une variable <<NUID>>. Exclure la recherche de l'utilisateur nobody qui a souvent l'UID le plus elevé.

Question 6
Le groupe par défaut de l'utilisateur sera <<Users>>. Il existe déjà. placé le GID du groupe <<Users>> dans une variable <<NGID>>.

Question 7
Construisez dans une variable <<LIGNE>> la ligne qui sera ajoutée a /etc/passwd. Le shell utiliser est <</bin/bash>>. Le repertoire personnel /home/$NUSER. Le commentaire <<Utilisateur $NUSER>> et le mot de passe reste a << x >>. Ajouter cette ligne a la fin du fichier /etc/passwd. Pour mettre a jour automatiquement le fichier /etc/shadow lancez ensuite la commande << pwconv>>

Question 8
créez le mot de passe de l'utilisateur : utiliser la commande <<passwd>>, en lisant son manuel et notamment le parametre <<--stdin>>. Aucune question ne doit etre posée.

Question 9
Créer enfin le repertoire personnel de l'utilisateur /home/$NUSER. Deux cas peuvent se présenter; Si le repertoire existe deja changer le proprietaire de ce repertoire et de tout son contenu pour qu'il appartienne a l'utilisateur et au groupe <<users>>. S'il n'existe pas créé le recopiez tous les fichiers contenus dans /etc/skel dedans et changer le proprietaire et le groupe de l'ensemble.

Je me rends bien compte que ce travail est longt et contraignant mais croyez moi que si je me permet de poster sur le forum c'est que linux j'en ai fait une fois et je suis totalement incapable de faire ce script et il compte pour un projet.

Meme si vous ne pouvez pas m'aider a tout faire et que vous savez faire une des questions faites le je vous en serais reconnaissant car la je suis vraiment plus profond que terre.

Merci d'avance en tout cas.
Cordialement
Configuration: Windows 2000
Firefox 2.0.0.3

3 réponses

  1. king_neo2001 Messages postés 3 Statut Membre 4
     
    Merci pour ta réponse... je vais me renseigner mais je dois le rendre lundi nous n'avons fait que 2 cours de linux et a part du mkdir nous n'avons presque rien vu...

    Merci beaucoup en tout cas et merci d'avance pour ceux qui pourrait m'aider également.
    5
    1. dyllan Messages postés 5577 Statut Contributeur sécurité 918
       
      Bonjour king_neon2001,

      J'ai réalisé un script d'administration (qui doit encore être optimisé) peut être t'aidera t'il !

      code :


      #!/bin/bash

      # *********************************************************************************Fonction Création utilisateur
      function gestion_utilisateur () {
      function creation_supp_utilisateur () {
      echo -e " \033[31m Supprimer ou créer un utilisateur ? \033[00m"
      echo " Taper x pour supprimer / Taper c pour créer :"
      read choix
      if [ $choix = "c" ] ;
      then
      echo "Entrer le login de l'utilisateur souhaité :"
      read user
      adduser -a $user
      echo -e "\033[31m L'utilisateur $user à bien été crée ! \033[00m"
      echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      else
      if [ $choix = "x" ];
      then
      echo "Donner le nom de l'utilisateur à supprimer :"
      read utildel
      userdel -r $utildel
      echo -e "\033[31m La suppression de l'utilisateur $utildel est confirmée \033[00m"
      echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      else
      exit 0
      fi
      fi
      menu_utilisateur
      }

      function creation_supp_group () {
      echo -e " \033[31m Supprimer ou créer un groupe ? \033[00m"
      echo " Taper x pour supprimer / Taper c pour créer :"
      read choix
      if [ $choix = "c" ] ;
      then
      echo "Entrer le nom du groupe souhaité :"
      read group
      groupadd $group
      echo -e "\033[31m Le group $group à bien été crée ! \033[00m"
      echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)"
      read rep
      if [ $rep = "y" ] ;
      then
      vi /etc/group
      else
      echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      menu_utilisateur
      fi
      else
      if [ $choix = "x" ];
      then
      echo "Donner le nom du groupe à supprimer :"
      read group
      groupdel $group
      echo -e "\033[31m La suppression du group $group est confirmée \033[00m"
      echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)"
      read rep
      if [ $rep = "y" ] ;
      then
      vi /etc/group
      else
      echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      menu_utilisateur
      fi
      else
      exit 0
      fi
      fi
      menu_utilisateur
      }

      function voir_utilisateur () {
      who -q
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      menu_utilisateur
      }

      function Menu_principal () {
      Menu
      }


      function menu_utilisateur () {
      clear
      echo ""
      echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
      echo -e " \033[36m3ème année RIR \033[00m "
      echo -e " \033[37m________________________________\033[00m "
      echo -e " \033[37m| Gestion des utilisateurs |\033[00m "
      echo""
      echo -e "\033[33m*** MENU *** :\033[00m"
      echo""
      echo "1 - Créer / Supprimer un utilisateur"
      echo "2 - Créer / Supprimer un groupe"
      echo "3 - Voir les utilisateurs connectés"
      echo "4 - Revenir au menu Principal"
      echo ""
      echo "Entrez votre choix :"

      read CHOIX
      case $CHOIX in
      1)creation_supp_utilisateur;;
      2)creation_supp_group;;
      3)voir_utilisateur;;
      4)Menu_principal;;
      *)exit 0;;
      esac
      }
      menu_utilisateur
      }
      # *********************************************************************************Fonction tuer un processus
      function tuer_proc () {
      ps ax --sort=tty,pid | more
      echo " VEUILLEZ TAPER LE(S) "PID" DU(DES) PROCESS A TUER: "
      read PROCESS
      for TRUC in $PROCESS; do
      kill -9 $TRUC
      echo -e "\033[31m Le(s) processus $PROCESS on été arrétés \033[00m"
      done
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      Menu
      }
      # *********************************************************************************Fonction Création de répertoire
      function creer_rep () {
      echo "Quel est le nom du répertoire ? (tapez le nom) :"
      read nom
      mkdir "$nom"
      chmod 0733 $nom
      echo -e "\033[31m Le dossier $nom à été créé avec les droits sur le bureau \033[00m"
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      Menu
      }
      # *********************************************************************************Fonction sauvegarder fichier
      function sauv_fichier () {
      function sauv_resol_conf () {
      rsync -a /etc/resolv.conf /home/dyllan/Bureau/sauv_du_$(date +%d_%m_%y).log
      echo -e "\033[31m Le fichier resolv.conf du $(date +%d_%m_%y) est bien sauvegardé sur le bureau \033[00m"
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      menu_sauv
      }

      function sauv_suppr_autre() {
      echo -e " \033[31m Supprimer ou Sauvegarder ? \033[00m"
      echo " Taper x pour supprimer / Taper s pour sauvegarder :"
      read choix
      if [ $choix = "s" ] ;
      then
      echo "Entrez le chemin du repertoire à sauvegarder"
      read chemin
      echo "Entrez le chemin de l'endroit où vous voulez le sauvegarder"
      read dest
      cp -r $chemin $dest
      echo "La sauvegarde a été réalisé"
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      else
      if [ $choix = "x" ];
      then
      echo "Entrez le chemin du repertoire à supprimer"
      read chem
      rm -r $chem
      echo "La suppression de $chem est confirmée"
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      else
      exit 0
      fi
      fi
      menu_sauv
      }

      function Menu_principal () {
      Menu
      }

      function menu_sauv () {
      clear
      echo ""
      echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
      echo -e " \033[36m3ème année RIR \033[00m "
      echo -e " \033[37m__________________________\033[00m "
      echo -e " \033[37m| Menu de Sauvegarde |\033[00m "
      echo""
      echo -e "\033[33m*** MENU *** :\033[00m"
      echo""
      echo "1 - Sauvegarder le fichier resolv.conf"
      echo "2 - Sauvegarder / Supprimer un fichier ou répertoire"
      echo "3 - Revenir au menu Principal"
      echo ""
      echo "Entrez votre choix :"

      read CHOIX
      case $CHOIX in
      1)sauv_resol_conf;;
      2)sauv_suppr_autre;;
      3)Menu_principal;;
      *)exit 0;;
      esac
      }
      menu_sauv
      }
      # *********************************************************************************Fonction Récupérer les processus
      function recuperer_processus () {
      ps -aux >> proccessus_du_$(date +%d_%m_%y).log
      echo -e "\033[31m Le fichier Log de récupération des processus à été créé sur le bureau \033[00m"
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      Menu
      }
      # *********************************************************************************Fonction Service Networking
      function networking () {
      function restart () {
      /etc/init.d/networking restart
      echo "revenir au menu ? [y/n]"
      read reponse
      if [ $reponse = "y" ] ; then
      menu
      else
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      Menu
      fi
      }

      function stop () {
      /etc/init.d/networking stop
      echo "revenir au menu ? [y/n]"
      read reponse
      if [ $reponse = "y" ] ; then
      menu
      else
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      Menu
      fi
      }

      function start () {
      /etc/init.d/networking start
      echo "revenir au menu ? [y/n]"
      read reponse
      if [ $reponse = "y" ] ; then
      menu
      else
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      Menu
      fi
      }

      function edit () {
      vi /etc/resolv.conf
      clear
      echo""
      echo "Revenir au menu Administration du service Networking ? [y/n]"
      read reponse
      if [ $reponse = "y" ] ; then
      menu
      else
      echo "Appuyer sur la touche <Entrée> pour continuer..."
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      Menu
      fi
      }

      function Menu_principal () {
      Menu
      }

      function menu () {
      clear
      echo ""
      echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
      echo -e " \033[36m3ème année RIR \033[00m "
      echo -e " \033[37m____________________________________________\033[00m "
      echo -e " \033[37m| Administration du service Networking |\033[00m "
      echo""
      echo -e "\033[33m*** MENU *** :\033[00m"
      echo""
      echo "1 - Restart"
      echo "2 - Stop"
      echo "3 - Start"
      echo "4 - Editer le fichier resolv.conf"
      echo "5 - Revenir au menu Principal"
      echo ""
      echo "Entrez votre choix :"

      read CHOIX
      case $CHOIX in
      1)restart;;
      2)stop;;
      3)start;;
      4)edit;;
      5)Menu_principal;;
      *)exit 0;;
      esac
      }
      menu
      }
      # *********************************************************************************Fonction Quitter
      function quitter () {
      exit
      }
      # *********************************************************************************Fonction MENU
      function Menu () {
      echo ""
      echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
      echo -e " \033[36m3ème année RIR \033[00m "
      echo -e " \033[37m _______________________________ \033[00m "
      echo -e " \033[37m| Script d'administration |\033[00m "
      echo""
      echo -e "\033[33m*** Menu Principal *** :\033[00m"
      echo""
      echo "1 - Gestion des utilisateurs"
      echo "2 - Gérer les processus"
      echo "3 - Créer un répertoire"
      echo "4 - Sauvegarde"
      echo "5 - Récupérer les processus"
      echo "6 - Administration du service Networking"
      echo "7 - Quitter"
      echo ""
      echo "Entrez votre choix :"

      read CHOIX
      case $CHOIX in
      1)gestion_utilisateur;;
      2)tuer_proc;;
      3)creer_rep;;
      4)sauv_fichier;;
      5)recuperer_processus;;
      6)networking;;
      7)quitter;;
      *)exit 0;;
      esac
      }
      if [ ! `id -u` = 0 ]; then
      echo -e "\033[31m Ce script doit être executé en root \033[00m"
      echo""
      echo "**********************************************"
      echo "Appuyer sur la touche <Entrée> pour quitter..."
      echo "**********************************************"
      read touche
      case $touche in
      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
      exit 0
      else
      Menu
      fi
      0
      1. cloonn > dyllan Messages postés 5577 Statut Contributeur sécurité
         
        Merci dyllan. Ton script m'as été d'un grand secours.
        0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Un minimum d'effort de ta part aurait été le bienvenu quand même :-\

    ===================================================

    Question 1
    Gérez les parametres passés au script(S#,$1,etc).Ne proposez pas de saisie,ne placez pas ces valeurs a l'avance dans les variables. En cas de présence d'un seul paramètre c'est forcement le nom d'utilisateur a créer, le placer dans une variable appelée <<NUSER>>. S'il y a trois parametres alors celui situé apres le -p(pour password) est le mot de passe de l'utilisateur, le placer dans une variable PASSWD. Le -p peut etre placé en premier mais aussi apres le nom de l'utilisateur autrement dit l'ordre des parametres n'a pas d'importance


    Voir : les parametres
    Utilisation de getopts
    Voir aussi "man bash" (chercher "getopts"

    Question 2
    Modifiez ou ajouter la gestion des erreurs au bloc précedent : le script quitte avec une erreur si le nom d'utilisateur n'est pas precisé. Si le mot de passe est absent il es fixé par défaut a password


    Voir "getopts" ci-dessus
    le remplacement de variables en shell bash

    Question 3
    un nom d'utilisateur ne doit pas depasser huit caractere. Si le nom depasse 8 caractere quittez avec une erreur.


    var==bonjour ; echo ${#var}
    man bash chercher "test" ou "["
    if [ ... ]; then ...; fi

    Question 4
    Verifiez si l'utilisateur existe deja (presence dans /etc/passwd)


    man grep et code retour ($?)
    if [ ... ]; then ...; fi

    Question 5
    Calculez un UID pour l'utilisateur. Trouvez l'UID le plus élevé dans /etc/passwd et lui ajouter 1. Placer cette valeur dans une variable <<NUID>>. Exclure la recherche de l'utilisateur nobody qui a souvent l'UID le plus elevé.


    man grep, man cut, man sort, man expr

    Question 6
    Le groupe par défaut de l'utilisateur sera <<Users>>. Il existe déjà. placé le GID du groupe <<Users>> dans une variable <<NGID>>


    if [ ... ]; then ...; fi

    Question 7
    Construisez dans une variable <<LIGNE>> la ligne qui sera ajoutée a /etc/passwd. Le shell utiliser est <</bin/bash>>. Le repertoire personnel /home/$NUSER. Le commentaire <<Utilisateur $NUSER>> et le mot de passe reste a << x >>. Ajouter cette ligne a la fin du fichier /etc/passwd. Pour mettre a jour automatiquement le fichier /etc/shadow lancez ensuite la commande << pwconv>>


    LIGNE="bla:bla:bla:bla"
    echo "$LIGNE" >> /etc/passwd



    Question 8
    créez le mot de passe de l'utilisateur : utiliser la commande <<passwd>>, en lisant son manuel et notamment le parametre <<--stdin>>. Aucune question ne doit etre posée.


    Voir : changer le mot de passe via un script

    Question 9
    Créer enfin le repertoire personnel de l'utilisateur /home/$NUSER. Deux cas peuvent se présenter; Si le repertoire existe deja changer le proprietaire de ce repertoire et de tout son contenu pour qu'il appartienne a l'utilisateur et au groupe <<users>>. S'il n'existe pas créé le recopiez tous les fichiers contenus dans /etc/skel dedans et changer le proprietaire et le groupe de l'ensemble.


    man mkdir, man chown, man chgrp, man cp
    if [ ... ]; then ...; fi

    ;-))
    0
  3. moha312
     
    ce script vous donne une idée sur l'ajout de ++ utilistauers sous ubuntu sans perdre du temps à saisir les informations : tel, addr, mot de passe ...

    ### debut de fichier

    #!/bin/bash
    for i in `cat users.txt`
    do
    groupadd $i
    useradd -m $i -g $i -d /home/$i -s /bin/bash
    echo $i:$i | chpasswd
    done

    ### fin de fichier

    users.txt : contient la liste des utilisateurs
    mot de passe = l'utilisateur
    0