Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript zum Benutzer anlegen
Hi,
habe ein Problem mit folgenden Script bzw. mit markierten Zeile.
#!/bin/bash
## Aufruf mit ./makeuser.sh BENUTZERNAME
USER=$1
mkdir /home/$USER
useradd - g users –s /bin/false –d /home/$USER $USER
chown -R $USER:$USER /home/$USER
chmod 755 /home/$USER
smbpasswd -a $USER
smbpasswd -e $USER
Jemand eine Idee was da falsch ist?
was passiert denn, was spuckt es den aus ??
mfg
gsus
therealmisterx
23.04.06, 13:56
Die Fehlermeldung wäre interessant, bei mir funktioniert die Sache bis zu der markierten Zeile einwandfrei.
Eine Fehlermeldung als wäre an der Syntax was falsch, also
useradd mit den ganzen möglichen Schaltern
Bleibt aber aber nicht an der Stelle stehen, sondern läuft weiter, meldet dann natürlich das die Rechte nicht gesetzt werden konnten, da es den User nicht gibt und will das Samba Passwort dann haben.
Das Leerzeichen beim Schalter -g habe schon entfernt, dran lag es aber auch nicht. :confused:
therealmisterx
23.04.06, 14:14
edit: lesen sollte man können
... und poste doch einfach mal die Ausgabe der Konsole ... das dürfte auch helfen (den genauen Wortlaut der Fehlermeldung)
Syntax: useradd [-u uid [-o]] [-g Gruppe] [-G Gruppe,...]
[-d home] [-s Shell] [-c Kommentar] [-m [-k Vorlage]]
[-f inaktiv] [-e Ablauf ] [-p Kennwort] Name
useradd -D [-g Gruppe] [-b Basis] [-s Shell]
[-f inaktiv] [-e Ablauf ]
Syntax also solches stimmt aber, wenn ich die Zeile so aufrufe, nur eben statt der Variablen einen richtigen Namen wird der User angelegt
Bin mir nicht sicher, ob das das Problem sein könnte. Aber USER sollte doch schon von der Shell als Umgebungsvariable auf den Benutzer der Shell gesetzt werden. Wer weiß, vielleicht reagiert useradd ja allgerisch drauf wenn man die Variable ändert...
Warum legst du das Verzeichnis für den Benutzer vorher an und änderst später die Rechte? Das kann "useradd" für dich übernehmen (Schalter -m). Und $USER wird bereits von der Shell verwendet. $USER enthält den Usernamen mit dem du gerade engemeldet bist.
Wieso ändert man die Variable? Man startet das Script mit einen Benutzernamen und dieser wird bis zum Schluss die Variable. Das Homedirectory wird ja erstellt, nur eben der Benutzer nicht.
Die Zeile heißt doch nur, " erstellen einen Benutzer "harry", dieser gehört zur Gruppe users, darf sich nicht lokal anmelden und er bekommt das Homedirectory /home/"harry".
nimm trotzdem mal nicht $USER, sondern zb $benutzer. Bla!zilla hat schon recht: $USER ist eine vordefinierte Variabel und sollte deshalb in Ruhe gelassen werden ...
Am Variablennamen liegt bzw. lag es nicht, egal was ich genommen habe, es kam immer diese Meldung.
Habe das ganze nochmal geschrieben und jetzt komme ich ein Stückchen weiter.
und zwar genau eine Zeile. Es können keine Rechte gesetzt werden weil "Benutzername" keine gültige Gruppe ist, was aber irgendwie logisch ist, es wurde ja gar keine Gruppe mit dem Namen des Benutzers erstellt.
therealmisterx
23.04.06, 17:14
ja und? wo ist dann das problem?
chown -R $BENUTZER:users /home/$BENUTZER
Ich verweise noch mal auf die Schalter "-d" und "-m" von useradd.
useradd - g users –s /bin/false –d /home/$USER $USER
^--- Ist hier tatsächlich ein Space?
therealmisterx
24.04.06, 10:45
useradd - g users –s /bin/false –d /home/$USER $USER
^--- Ist hier tatsächlich ein Space?
Das Leerzeichen beim Schalter -g habe schon entfernt, dran lag es aber auch nicht. :confused:
..........
Dann probiere mal, in dem Skript nicht die Variable USER sondern NUTZER zu nehmen.
Ein
$ set | grep USER
gibt nämlich was aus, d.h. es gibt eine globale Variable mit dem Namen USER.
Gruß
L00NIX
das Script sieht jetzt so aus und funktioniert.
#!/bin/bash
## Aufruf mit ./makeuser.sh BENUTZERNAME
USER=$1
mkdir /home/$USER
useradd -g users -s /bin/false -d /home/$USER $USER
chown -R $USER:users /home/$USER
chmod 755 /home/$USER
smbpasswd -a $USER
smbpasswd -e $USER
quotatool –u $USER –b –l 500MB –v /home
Weiß aber immer noch nicht was da an der Zeile falsch war.
Bastel grad am Gegenstück, also ein Script zum Löschen von Benutzern, hier wäre aber ein Sicherheitsmechanismus angebracht wie baue ich den ein?
Aufruf wieder über sh "scriptname" BENUTZERNAME
funktioniert so tadellos (incl Abfrage ob das HD auch gelöscht werden soll JA/NEIN). Vergisst man aber den Benutzername und klickt man sich munter durch, wird nach dem Beantworten der Frage mit JA, alles in /HOME gelöscht.
Würde gern, das das Script bevor es überhaupt anfängt überprüft, ob es mit einem Benutzernamen aufgerufen wurde und wenn nicht mit einer Meldung abbricht.
2 überprüfungen brauchst du, einmal ob der benutzername leer ist, und ob der benutzername root ist... (oder uid=0)
wie des geht kannst du ja zum beispiel bei den initscripts nachschauen..
if [ ]
fi
oder sowas in der art
greetz
bin erstmal soweit
#!/bin/bash
# ausführen mit sh killuser.sh BENUTZERNAME
USER=$1
echo $?
if test -z $USER; then
echo Keinen Benutzer zum loeschen angegeben.
else
deluser $USER
cat << EOI
Hallo Cheffe, auch das Homedirectory loeschen?
JA j
NEIN n
EOI
read -n 1 TASTE
echo
case $TASTE in
j) echo Verzeichnis wird geloescht.
rm -R /home/$USER
echo Verzeichnis wurde geloescht.
;;
n) echo see you later
;;
esac
fi
wie kann ich jetzt noch die Eingabe des root als Benutzer abfangen? Das bekomme ich irgenwie nicht hin. :(
if test $USER = "root"; then
echo "root..."
fi
vielleicht?
und wie verbinde ich beide "if" abfragen?
also enteder verschachtelst du die if anweisungen, oder
du brichst das script vorzeitig ab.. was ich dir empfehlen würde, aber nicht weiß ob und wie des geht.
schematisch würd das script dann so aussehen:
wenn kein benutzername
--> Beenden
wenn benutzername = root
--> Beenden
hier lösch oder leg ihn an.. oder mach sonst was
elif test ....
scheint bis jetzt zu funktionieren
elif ist auch nur eine kurzform von else if :D
somit hast du die if's ganz normal verschachtelt
greetz
elif ist auch nur eine kurzform von else if :D
somit hast du die if's ganz normal verschachtelt
Jein.
elif ist das was du willst. Mit else if baust du eine weitere Ebene ein und benötigst somit ein weiteres fi.
Es geht aber beides.
Gruß
L00NIX
if test 1 -eq 1; then echo xxx; else echo bla; fi
if test 1 -eq 2; then echo xxx; else echo bla; fi
if test 1 -eq 2; then echo xxx; elif test 1 -eq 1; then echo bla; else echo bub; fi
if test 1 -eq 2; then echo xxx; elif test 1 -eq 2; then echo bla; else echo bub; fi
nein, kein fi mehr...
edit: hups, habs falsch gelesen.. sry.. du meintest ja else if... ja, ist ja in anderen sprachen genauso..
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.