PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript zum Benutzer anlegen



Dexter74
23.04.06, 13:42
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?

Gsus
23.04.06, 13:48
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.

Dexter74
23.04.06, 14:08
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

claudius
23.04.06, 14:18
... und poste doch einfach mal die Ausgabe der Konsole ... das dürfte auch helfen (den genauen Wortlaut der Fehlermeldung)

Dexter74
23.04.06, 14:32
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

smoon
23.04.06, 15:20
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...

bla!zilla
23.04.06, 15:27
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.

Dexter74
23.04.06, 15:40
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".

claudius
23.04.06, 15:42
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 ...

Dexter74
23.04.06, 16:19
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

bla!zilla
23.04.06, 21:22
Ich verweise noch mal auf die Schalter "-d" und "-m" von useradd.

L00NIX
24.04.06, 10:24
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:
..........

L00NIX
24.04.06, 16:35
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

Dexter74
24.04.06, 16:55
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.

Dexter74
31.05.06, 09:57
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.

quinte17
31.05.06, 11:38
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

Dexter74
31.05.06, 12:08
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

Dexter74
01.06.06, 08:42
wie kann ich jetzt noch die Eingabe des root als Benutzer abfangen? Das bekomme ich irgenwie nicht hin. :(

quinte17
01.06.06, 09:05
if test $USER = "root"; then
echo "root..."
fi

vielleicht?

Dexter74
01.06.06, 09:51
und wie verbinde ich beide "if" abfragen?

quinte17
01.06.06, 10:00
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

Dexter74
01.06.06, 10:11
elif test ....


scheint bis jetzt zu funktionieren

quinte17
01.06.06, 11:02
elif ist auch nur eine kurzform von else if :D
somit hast du die if's ganz normal verschachtelt

greetz

L00NIX
02.06.06, 18:06
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

quinte17
02.06.06, 18:33
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..