Outils pour utilisateurs

Outils du site


ubu:ubh

Table des matières

Test 2


Q1


Créer un script en BASH qui prend en paramètre (ou en saisie en cas d'absence du paramètre) un fichier qui contient des lignes comme ceci :
“Login Groupe Password Critere” (voir le fichier users1.txt).

Le script devra vérifier l'existence dans votre machine des utilisateurs listés dans le fichier et s'ils n'existent pas créera les utilisateurs, leur mot de passe, leur dossier personnel et les groupes (qui seront créés s’ils n’existent pas) tels que listé dans le fichier.
Le primary group de l’utilisateur sera son nom mais chaque utilisateur sera ajouté au groupe cité dans le fichier.
Ainsi, à titre d’exemple Kristina appartiendra au groupe Kristina (son primary group) mais sera ajoutée au groupe students.
Votre script devra indiquer clairement ce qui est créé !

Pour chaque utilisateurs créés le script copiera ensuite dans le répertoire personnel de l’utilisateur l'ensembles des fichiers du répertoire /usr/share (et ses sous-répertoires) qui satisfont au critère suivant : ne seront copiés que les fichiers dont la nom commence par la lettre indiquée dans le champ critere

Ainsi, à titre d’exemple voici une sortie possible de Q1 :

  • Kristina : (groupe students) 188 files copied
  • Paige : (groupe students) created ! 646 files copied
  • Sherri : (groupe students) created ! 850 files copied
  • Gretchen : (groupe adm) 485 files copied
  • Karen : (groupe students) created ! 415 files copied
  • Patrick : (groupe students) created ! 657 files copied
  • Elsie : (groupe adm) created ! 325 files copied
  • Hazel : (create groupe profs) created ! 186 files copied
  • Malcolm : (groupe profs) created ! 631 files copied

Réponses :

  • A. Donner le code de votre Script :
  • B. Montrer que vos utilisateurs existent bien et qu’au moins un utilisateur peut se logger :
  • C. Montrer que vos utilisateurs appartiennent aux bons groupes :
  • D. Montrer que les dossiers personnels de deux utilisateurs différents contiennent bien les documents répondants au critère :

A) Donner le code de votre Script :

#!/bin/bash
# script qui prend en paramètre un fichier de type "Login Groupe Password Critere"
# sinon demande le nom d'un fichier
# teste si l'utilisateur existe
# sinon le crée

# si aucun paramètre n'est donne, demande poliment le nom d'un fichier et met ce nom dans la variable file
# sinon utilise le premier parametre passe comme nom de fichier
[ $# -eq 0 ] && read -p "Veuillez s'il-vous-plaît entrer le nom d'un fichier : " file || file="$1"

# vérifie si la variable file n'est pas nulle, si c'est bien un fichier et s'il peut etre lu
# met dans les variables new_login new_group new_password et critere les différents mots de la ligne
[ "$file" ] && [ -f "$file" ] && [ -r "$file" ] && while read new_login new_group new_password critere; do

    # CREATION DES UTILISATEURS

    echo -n "$new_login: "

        # verifie l'existence du groupe
        if grep -q "^$new_group:" /etc/group; then
                echo -n "(group $new_group) "
        #sinon le cree
        else
                groupadd "$new_group"
                echo -n "(group $new_group created) "
        fi

    # verifie l'existence de l'utilisateur
        if grep -q "^$new_login:" /etc/passwd; then
                echo -n "already exists "
    # sinon le cree
    else
                # creation de l'utilisateur avec un home directory (-m) et un shell bash
        useradd "$new_login" -m -g "$new_group" -s /bin/bash
        # assignation du mot de passe
        echo "$new_login:$new_password" | chpasswd
                echo -n "created! "
        fi

    # COPIE DES FICHIERS
    
    # initialisation du compteur
    files_copied=0

    # pour tout fichier du directory qui commence par la lettre critere (majuscule ou minuscule)
        for new_file in $(find /usr/share -type f -iname "$critere"*); do

        # copie ce fichier dans le home directory du user
        cp $new_file /home/$new_login

        # et incremente le compteur
                files_copied=$(($files_copied+1))
        done

    echo "($files_copied files copied)"

    
done < "$file"
  • Test :
sudo ./Q1.sh users1.txt

B) Montrer que vos utilisateurs existent bien et qu’au moins un utilisateur peut se logger :

  • Vérification de l’existence des utilisateurs :
cat /etc/passwd
  • Connection avec l’un d’eux :
su Malcolm

C) Montrer que vos utilisateurs appartiennent aux bons groupes :

Les numéros des groupes correspondent bien aux numéro des groupes repris après le nom des utilisateurs au point précédent.

students:x:1001:
profs:x:1002:

D) Montrer que les dossiers personnels de deux utilisateurs différents contiennent bien les documents répondants au critère :

ls -l /home/Kristina | head
ls -l /home/Paige | head


Q2


Créer un script en BASH qui prend en paramètre (ou en saisie en cas d'absence du paramètre) un fichier qui contient des lignes comme ceci : “Login Groupe Password Delete” (vous utiliserez le fichier users2.txt). Le script devra vérifier l'existence des utilisateurs enregistrés dans le fichier et s'ils existent et que la colonne Delete indique “yes” le script devra effectuer ces deux tâches :

  1. Créer une archive tar du dossier personnel de cet utilisateur. L’archive sera compressée au format bzip2.
    • L'archive portera le nom de l'utilisateur, l'extension .bz2 et sera sauvegardée dans un répertoire old-users créé à cet usage (utiliser la commande tar)
  2. Supprimer les utilisateurs et leur dossier personnel.
    • Si plus aucun utilisateur n’appartient à un groupe, il faudra également supprimer le groupe.
    • Votre script devra indiquer clairement ce qu’il fait !

Voici une sortie possible de Q2

  • Kristina to delete ? : no !
  • Paige to delete ? yes : delete user Paige
  • Sherri to delete ? yes : delete user Sherri
  • Gretchen to delete ? : no !
  • Karen to delete ? yes : delete user Karen
  • Patrick to delete ? yes : delete user Patrick
  • Elsie to delete ? yes : delete user Elsie
  • Hazel to delete ? yes : delete user Hazel
  • Malcolm to delete ? yes : delete user Malcolm delete group profs

Réponses :

  • A. Donner le code de votre Script :
  • B. Montrer que les archives ont été créées et qu’elles contiennent bien les documents de l’utilisateur (pour un utilisateur) :
  • C. Montrer que les utilisateurs ont été adéquatement supprimés (ainsi que leurs dossiers) :
  • D. Montrer que les groupes ont été adéquatement supprimés :

A) Donner le code de votre Script :

#!/bin/bash
# prend en parametre ou en saisie le nom d'un fichier de type "Login Groupe Password Delete"

# si aucun parametre n'est donne, demande poliment le nom d'un fichier et met ce nom dans la variable file
# sinon utilise le premier prametre passe comme nom de fichier
# archive le home directory de l'utilisateur dans /old-users
# supprime le home directory
# supprime l'utilisateur
# supprime le groupe s'il n'a plus aucun utilisateur

[ $# -eq 0 ] && read -p "Can you please enter a filename: " file ||file="$1"

# verifie si la variable file n'est pas nulle, si c'est bien un fichier et s'il peut etre lu
[ "$file" ] && [ -f "$file" ] && [ -r "$file" ] && while read line; do

        user=$(echo "$line" | cut -d " " -f1)
        group=$(echo "$line" | cut -d " " -f2)
        delete=$(echo "$line" | cut -d " " -f4)

        # verifie l'existence de l'utilisateur
        if grep -q "^$user:" /etc/passwd; then

                echo -n "$user to delete ? "
                # verifie si la variable delete n'est pas nulle et si elle correspond a "yes"
                if [ "$delete" ] && [ "$delete" = yes ]; then
                        #archive le home directory
                        # -j avec bzip2
                        # -c cree une archive sur Linux
                        # -f nom de l'achive
                        tar -jcf "/old-users/$user.tar.gz" "/home/$user/" 2>/dev/null

                        # supprime le home directory et tout ce qu'il contient
                        rm -rf "/home/$user"

                        #supprime l'utilisateur
                        userdel "$user"

                        echo "yes : delete user $user"

                        # si le groupe est vide, le supprime et affiche le message d'execution de delgroup
                        # sinon renvoie une erreur qui n'est pas affichee
                        delgroup "$group" 2>/dev/null

                else
                        echo "no !"
                fi
        fi
done < "$file"
  • Test :
sudo ./Q2.sh users2.txt

B) Montrer que les archives ont été créées et qu’elles contiennent bien les documents de l’utilisateur (pour un utilisateur)

ls -l /old-users/
  • Vérification pour Elsie :
tar -jxf Elsie.tar.gz -C /tmp
ls -l /tmp/home/Elsie/

C) Montrer que les utilisateurs ont été adéquatement supprimés (ainsi que leurs dossiers) :

cat /etc/passwd

D) Montrer que les groupes ont été adéquatement supprimés :

cat /etc/group | tail

Power Shell


Ubuntu Serveur

ubu/ubh.txt · Dernière modification : de 127.0.0.1