URL: https://linuxfr.org/forums/linux-debutant/posts/probleme-de-script-automatisation-de-nouvel-user-sur-serveur Title: Probléme de script automatisation de nouvel user sur serveur Authors: syhnes Date: 2024年09月12日T12:05:31+02:00 License: CC By-SA Tags: Score: 2 Bonjour, je suis étudiant en première année de Dev (c'est ma première semaine en entreprise et il n'y a pas de dev pour m'aider là ou je travaille) et... je suis en train de m'arracher les cheveux sur un script (cheveux que je n'ai déjà plus :,/) Je découvre linux. **voici la situation initiale: ** j'ai installé un serveur local avec linux serveur. Par soucis de sécurité, j'ai bloqué tout les port (sauf un) et j'autorise au cas par cas les accés via l'adresse IMAC de la machine client. Comme je suis faignant, j'essaye d'automatiser tout ça (je suis encore aus tade script kidies donc je ne comprend pas encore tout. j'ai fouillé sur google, un peu dans tout le sens (même Gpt pour dire). mais en gros: j'ai une clef USB avec un petit script qui me permet de récupérer l'adresse MAC de l'ordi client, le nom de l'utilisateur et son mot de passe. Tout cela est enregistré dans un fichier "credential.txt" sur ma clef usb tel que: Adresse MAC : 12:34:56:78:99:00 Nom d'utilisateur : test6 Mot de passe : password (Lorsque je créé un utilisateur à la mano, pas de problème, tout marche. J'arrive à implémenter un nouvel utilisateur, et à me connecter avec.) Ensuite, je met ma clef usb sur mon serveur, et je lance mon script (que j'ai apellé NU pour Nouvel Utilisateur) **Le soucie est le suivant: ** Le script arrive à ajouter l'adresse mac dans les adresses autorisées (iptables) Mais je me retrouve avec un message d'erreur: ``` david@Bishop:~$ NU Montage de la clé USB... [sudo] password for david: Adresse MAC (debug) : 'XX:XX:XX:XX:XX:XX' (j'ai remplacé l'adresse mac par XXXXXX sur le forum hein 00) L'adresse MAC XX:XX:XX:XX:XX:XX a été autorisée pour l'accès via le port XXXXX (idem normalement y a mon port ici). run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save La règle autorisant l'adresse MAC XX:XX:XX:XX:XX:XX sera supprimée dans 2 mois. .réation du nouvel utilisateur test6 ': use --badname to ignore 'test6 useradd: failure while writing changes to /etc/passwd ) pam_chauthtok() failed, error: Authentication token manipulation error ) password not changedr test6 .rreur lors du changement de mot de passe pour l'utilisateur test6 Vous pouvez retirer la clé USB. ``` Voilà ma problématique. Je rajoute ici le code de mon script: ```bash #!/bin/bash # Définir-tion point montage usb_mount="/mnt/usb" # if pas de point de montage if [ ! -d "$usb_mount" ]; then echo "Création du point de montage $usb_mount..." sudo mkdir -p "$usb_mount" fi # Detect periph USB device="/dev/sdc2" # If periph umount if ! mount | grep "$usb_mount"> /dev/null; then echo "Montage de la clé USB..." sudo mount "$device" "$usb_mount" if [ $? -ne 0 ]; then echo "Erreur : Impossible de monter la clé USB.">&2 exit 1 fi fi # Path credentials.txt on USB credentials_file="$usb_mount/credentials.txt" # if credentials.txt exist? if [ ! -f "$credentials_file" ]; then echo "Le fichier credentials.txt n'a pas été trouvé sur la clé USB.">&2 sudo umount "$usb_mount" exit 1 fi # read credentials.txt macAddress=$(grep "Adresse MAC" "$credentials_file" | cut -d ':' -f2- | xargs | tr -d '[:space:]') newUser=$(grep "Nom d'utilisateur" "$credentials_file" | cut -d ':' -f2 | xargs) newPassword=$(grep "Mot de passe" "$credentials_file" | cut -d ':' -f2 | xargs) # Debug : Afficher l'adresse MAC (quotes pour voir les espaces invisibles) echo "Adresse MAC (debug) : '$macAddress'" # Valid MAC (format de type XX:XX:XX:XX:XX:XX) if [[ ! "$macAddress" =~ ^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$ ]]; then echo "Erreur : Adresse MAC invalide. Veuillez utiliser le format XX:XX:XX:XX:XX:XX." sudo umount "$usb_mount" exit 1 fi # Insert rules iptables first position on good port (partage forum: port remplacé par XXXX) sudo iptables -I INPUT 1 -p tcp --dport XXXX -m mac --mac-source "$macAddress" -j ACCEPT echo "L'adresse MAC $macAddress a été autorisée pour l'accès via le port XXXX." # Règles iptables persistante sudo netfilter-persistent save # Plan supr rules 2 month cronCommand="sudo iptables -D INPUT -p tcp --dport 56723 -m mac --mac-source $macAddress -j ACCEPT" cronJob="0 0 $(date --date='+2 months' '+%d') $(date --date='+2 months' '+%m') * $cronCommand" (crontab -l 2>/dev/null; echo "$cronJob") | crontab - echo "La règle autorisant l'adresse MAC $macAddress sera supprimée dans 2 mois." # Create/Update user if id "$newUser" &>/dev/null; then echo "L'utilisateur $newUser existe déjà. Mise à jour de son mot de passe." else echo "Création du nouvel utilisateur $newUser." sudo useradd -m -s /bin/bash "$newUser" || sudo useradd -m -s /bin/bash --badname "$newUser" fi # Changepasswrd if exist echo "$newUser:$newPassword" | sudo chpasswd if [ $? -ne 0 ]; then echo "Erreur lors du changement de mot de passe pour l'utilisateur $newUser." else echo "Le mot de passe de l'utilisateur $newUser a été mis à jour." fi # Suppr credentials.txt sudo rm -f "$credentials_file" # Umount USB sudo umount "$usb_mount" echo -e "\e[32mVous pouvez retirer la clé USB.\e[0m" ``` Existe t il une solution, et si oui, dans quelle diréction dois je chercher? parceque là j'ai l'impression de creuser avec une pelle de plage dans une dalle en béton><