Script création d'utilisateur

Fermé
king_neo2001 Messages postés 3 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 12 juin 2007 - 15 mai 2007 à 18:16
 cloonn - 12 oct. 2009 à 09:36
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
A voir également:

3 réponses

king_neo2001 Messages postés 3 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 12 juin 2007 4
15 mai 2007 à 19:28
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
dyllan Messages postés 4694 Date d'inscription mardi 9 janvier 2007 Statut Contributeur sécurité Dernière intervention 25 juin 2019 909
19 mai 2008 à 09:27
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
cloonn > dyllan Messages postés 4694 Date d'inscription mardi 9 janvier 2007 Statut Contributeur sécurité Dernière intervention 25 juin 2019
12 oct. 2009 à 09:36
Merci dyllan. Ton script m'as été d'un grand secours.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
15 mai 2007 à 18:56
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
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