PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Skript zum Anlegen eines neuen Benutzer



Ete2022
23.05.11, 12:29
Moin Moin!
Zunächst müsst ihr wissen, dass ich ein Anfänger in der Skriptprogrammierung bin: Folgende Aufgabe habe ich mir dennoch zur Übung überlegt:

Das Skript soll folgendes machen:
- Prüfen ob es den User bereits gibt?
- Selbständig eine UserId zuweisen
- Falls ein Referenzuser bekannt ist, soll er die GroupID automatisch zuweisen, die der Referenzuser auch hat.
- Das PW des Users auf 12345 setzen
- Wenn der User angelegt worden ist, soll eine automatisierte Email mit dem PW an den User gesendet werden.

Die ersten beide Punkte konnte ich bereits lösen. Aber jetzt stehe ich auf dem Schlauch. Wäre suuper wenn mir jemand helfen könnte. Auch Verbesserungsvorschläge nehme ich an. Anbei mein Code.



#!/bin/bash
ANSWER=n

USERFOUND=0
clear



#Eingabe des Benutzerkürzels
echo -n "Bitte geben Sie das Kürzel des Benutzers ein: "
read EXPECTEDUSER


#Liste der aktuellen User
CURRENTUSERNAME=`awk -F ":" '{print $1}' /etc/passwd > Userlist.txt`
#CURRENTUSERNAME1=`awk -F ":" '{print $1}' /etc/passwd`


# Festlegung der nächsten UserID
CURRENTUSERID=$(getent passwd | cut -f3 -d: | sort -un | awk 'BEGIN { id=1000 } $1 == id { id++ } $1 > id { print id; exit }')


grep -q "$EXPECTEDUSER" Userlist.txt
#echo "$CURRENTUSERNAME1" | grep -q "$EXPECTEDUSER"
#awk -F ":" '{print $1}' /etc/passwd | grep -q "$EXPECTEDUSER"
if [ $? -eq 0 ] ;then
echo " Der User ist bereits vorhanden "
USERFOUND=1
sleep 1
exit 0
else
echo -n " Der User ist nicht vorhanden. Wollen Sie einen neuen Benutzer anlegen?(y/n)"
read ANSWER
fi

case $ANSWER in
y)
echo -n "Tragen Sie hier falls vorhanden das Kürzel eines Referenzusers ein: "
read REFERENZUSER
if [$REFERENZUSER=" "]; then
echo -n "Bitte geben Sie die Group ID ein: "
else read USERGROUP
echo -n "Bitte geben Sie den vollständigen Namen ein: "
read USERNAME
fi
useradd -u $CURRENTUSERID -g $USERGROUP -c "$USERNAME" -d /home/$EXPECTEDUSER -m -s /bin/bash $EXPECTEDUSER

passwd $EXPECTEDUSER

echo " Der Benuter $USERNAME wurde angelegt.."

sleep 1

;;
n) echo " Das Programm wird beendet"
sleep 1
exit 0
;;
*) echo " Falsche Eingabe "
sleep 1
exit 0
;;
esac

DrunkenFreak
23.05.11, 16:44
Gruppenids des Benutzers rausfinden:


grep $REFERENZUSER /etc/group |while read $LINE
do
#something with $LINE, awk, cut...
done


passwd nimmt meines Wissens nach keine Passwörter von STDIN an, d.h. die letzten beiden Punkte kannst du vergessen. Müßtest dann schon was anderes als PAM nutzen für den Login.

naraesk
23.05.11, 17:52
passwd nimmt meines Wissens nach keine Passwörter von STDIN an, d.h. die letzten beiden Punkte kannst du vergessen.

Das könnte man mit expect (http://www.pro-linux.de/kurztipps/2/1385/konsolenprogramm-mit-expect-fernsteuern.html) lösen.

Aqualung
23.05.11, 20:14
passwd nimmt meines Wissens nach keine Passwörter von STDIN an, d.h. die letzten beiden Punkte kannst du vergessen. Müßtest dann schon was anderes als PAM nutzen für den Login.

Es gibt die Option "--stdin" (http://unixhelp.ed.ac.uk/CGI/man-cgi?passwd).

DrunkenFreak
23.05.11, 20:23
Unter Debian gibt es sie nicht, unter OS X schon. Tippe daher auf eine Manpage, die nicht auf GNU passwd verweist.

pibi
24.05.11, 07:48
passwd nimmt meines Wissens nach keine Passwörter von STDIN an, d.h. die letzten beiden Punkte kannst du vergessen. Müßtest dann schon was anderes als PAM nutzen für den Login.Ausschnitt aus einem Script von mir, mit dem ich automatisch Benutzer mit Zufallsname und -passwort erzeuge:


HOMEDIR="/home"
FTPSERVER="xxxxx.yy.ch"
perl=`which perl`
useradd=`which useradd`
pwgen=`which pwgen`
pw=`$pwgen -n -1`
unam=`$pwgen -1`
[...]
$useradd -c "ftp user" -g 110 -d $HOMEDIR/$unam -f 0 -m -k /tmp/$unam -s /bin/false -p `$perl -e "print crypt('$pw','a7');"` $unam && { echo ftp-Server: $FTPSERVER; echo Username: $unam ; echo Password: $pw; echo URL: ftp://$unam:$pw@$FTPSERVER; } || { echo Error creating user $unam; exit; }Wichtig fuer die Uebergabe des Passworts ist der Teil
-p `$perl -e "print crypt('$pw','a7');"`
Gruss Pit.

Ete2022
24.05.11, 09:16
Danke euch für die schnellen Antworten. Ich werde mal einiges davon ausprobieren und dann mal schauen, ob es funktioniert ... Also nochmals DANKE!

Ete2022
24.05.11, 13:25
Zitat von DrunkenFreak
passwd nimmt meines Wissens nach keine Passwörter von STDIN an, d.h. die letzten beiden Punkte kannst du vergessen. Müßtest dann schon was anderes als PAM nutzen für den Login.


Wenn ich mein Skript oben durchlaufen lassen, kann ich das PW ändern lassen und auch mit diesem den Benutzer wechseln... Muss ich dennoch was beachten?

DrunkenFreak
24.05.11, 16:43
Warum jetzt Benutzer wechseln? Ich dachte, du willst nur einen neuen anlegen.