PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : User per Skript anlegen



netsniffer
08.10.04, 12:54
Hallo zusammen,

habe mir mit Samba einen Fileserver gebaut (funktioniert einwandfrei) und muss jetzt die Useraccounts anlegen. Da das aber immerhin über 100 Stück sind würde ich das ganze gerne über ein Skript machen.
Die Usernamen habe ich in einer Textdatei. Die User sollen alle in die gleiche Gruppe kommen. Wenn möglich würde ich in der Textdatei, in der die Usernamen stehen, auch gerne noch das PW mitgeben, wenn nicht möglich dann einfach alle auf ein Standard-Kennwort.

Hat vielleicht jemand nen Tipp für mich ?

Danke!

Friesi
08.10.04, 13:02
Kleiner Tipp:
Müsstest du aber noch sehr anpassen ;)

Und du brauchst das Programm "makepasswd"


#!/usr/bin/perl

#
# Settings
$dir = /home;
$group = nas;

print "Bitte gebe ein Namen für den neuen User ein:";
$usern=<STDIN>;

# add new user
system("useradd -m -d $dir/$usern -s /bin/false -g $groupn $usern");

# generate password
$passw=`makepasswd --chars 8`;
chop($passw);
$passwc=crypt("$passw","FR");
system("usermod -p $passwc $usern");

# add user to smbpasswd
system("smbpasswd -a $usern WEITERE BEFEHLE FÜR SAMBA");

print "\n";
print "Das Passwort für den User lautet: $passw\n";
print "===================================\n";
print "User wurder erfolgreich angelegt!\n";
print "===================================\n";

netsniffer
08.10.04, 13:12
Danke für den Tipp,

ist schon mal nicht schlecht wenn ich nur noch den Usernamen eingeben muss. Was ich eben bräuchte wäre, dass sich das Skript die Usernamen aus einer Datei holt... Irgend ne Idee ???

Friesi
08.10.04, 13:15
Naja du könntest anstatt <stdin> nun den Namen aus der Datei lesen.

Also einfach den Inhalt der Datei in ein Array laden und dieses dann abarbeiten.

Ich schau mal ob ich das was in der Schublade liegen habe ;)

netsniffer
08.10.04, 13:19
Wäre super.... Danke für deine Mühe !!!

Friesi
08.10.04, 13:23
Also wenn du deine Liste mit usern so hast:



user1
user2
user3
user4
user5


Kannst du dieses Script verwenden (habs gerade bissel umgebaut)



#!/usr/bin/perl
#
# Settings
#

$dir = /home;
$group = nas;
$file = "pfad/zur/datei";

#### PROGRAMMTEIL ####

open (USER, "$file") or print "Cant load file\n"; # oeffne Datei
my @userarray = <USER>; # ladet den Inhalt in einen Array
$arraylen = push(@userarray); # holt sich die länge des Array

for ($i = 0; $i < $arraylen; $i++)
{

# add new user
system("useradd -m -d $dir/$userarray[$i] -s /bin/false -g $groupn $userarray[$i]");

# generate password
$passw=`makepasswd --chars 8`;
chop($passw);
$passwc=crypt("$passw","FR");
system("usermod -p $passwc $userarray[$i]");

# add user to smbpasswd
system("smbpasswd -a $userarray[$i] WEITERE BEFEHLE FÜR SAMBA");

print "Das Passwort für den User $userarray[$i] lautet $passw\n";

}


Musst da jetzt noch im Script die Befehle von "useradd" und "smbpasswd" anpassen und noch den Pfad zu deiner Userdatei angeben.

Wenn es fehler geben sollte, einfach melden :)

netsniffer
08.10.04, 13:29
Perfekt... vielen, vielen Dank!!!

Friesi
08.10.04, 13:36
Nix zu danken ;)
Kannst dich ja in mein Gästebuch auf meiner Webseite eintragen als dank *das mal voll bekommen muss ;) *

micweg
29.11.05, 08:50
Hallo,

Ich weiß, dieser Thread hat sein MHD schon weit überschritten, aber ich habe ein ähnliches Problem wie der Threadstarter. Das von Friesi erstellte Skript scheint nahezu ideal für meine Zwecke, allerdings möchte ich gerne Passwörter selbst vergeben.

Die Passwörter könnte ich genauso in eine Datei packen wie die Usernamen, oder einfach immer hinter den Usernamen schreiben.

Kann mir evtl. einer weiterhelfen, wie man den Teil #generate Password durch das Auslesen einer Datei ersetzen könnte, und dieses dann in den beiden system Aufrufen nutzen kann?

marce
29.11.05, 09:58
Leichenfledderer :-)

mach doch eine CSV - user,pw, splitte das ganze in user und pw und ersetze dann in dem Script das generated PW...

micweg
29.11.05, 10:09
STOP!!!!

Gaaaanz langsam für blö..!

Was ist ein CSV?? ;)

marce
29.11.05, 11:12
CSV ist ein Comma Separated Vile :-)

http://de.wikipedia.org/wiki/CSV-Datei

... und der Rest ist ein bisserl basteln in dem Script - 5 Zeilen anpassen oder so...

Friesi
29.11.05, 12:03
Huch der Thread ist ja echt schon einwenig alt :)

Also du könntest auch jedesmal nach dem Passwort gefragt werden. Dies könnte man schnell einbauen.
Ansonsten kannst du auch eine ganz normale Datei anlegen und die dann mit einer Schleife auslesen. (Eigentlich nur in die Userdatei noch dahinter das Passwort)

Ich schau mal ob ich beide Versionen gleich nach dem "Frühstück" mal code :) (Sorry bin erst gerade aufgestanden *gähn*) :D

micweg
30.11.05, 08:50
@Friesi:

Wenn du da mal noch was basteln könntest wäre super!!

Die Möglichkeit, das Passwort durch ein Komma getrennt hinter den Nutzernamen zu schreiben wäre natürlich ein Traum!

THX im Voraus...

marce
30.11.05, 08:55
... und das selber zu machen wäre keine Option?

... es sind nur geringe Anpassungen - und so schwer ist das nicht, Du willst ja sicher auch verstehen, was das Script wie warum macht, oder?

micweg
30.11.05, 14:29
... und das selber zu machen wäre keine Option?

... es sind nur geringe Anpassungen - und so schwer ist das nicht, Du willst ja sicher auch verstehen, was das Script wie warum macht, oder?


Toller Beitrag! Wenn mein Wissen so groß wäre, hätte ich diesen Uralt Beitrag nicht wieder aufgegriffen!

Um so mehr war ich froh, als sich Friesi hier noch mal meldete und Hilfe anbot!

Friesi
30.11.05, 19:05
Toller Beitrag! Wenn mein Wissen so groß wäre, hätte ich diesen Uralt Beitrag nicht wieder aufgegriffen!

Um so mehr war ich froh, als sich Friesi hier noch mal meldete und Hilfe anbot!

Werd dir das script auch noch umbauen, nur hab ich ein wenig stress momentan.
Vielleicht bekomm ich es gleich noch hin :)

Friesi
30.11.05, 19:19
Sorry für Doppelpost. (Ja ich kenn die Edit Funktion, nur erkennt man da nicht ob es schon etwas neues gibt, falls man den Thread schon gelesen hat).

Hoffe ihr versteht das ;)

So nun hier das Script:

#!/usr/bin/perl
#
# Settings
#

$dir = "/home";
$group = "nas";
$file = "/home/friesika/perl/userlist.txt";

#### PROGRAMMTEIL ####

open (USER, "$file") or print "Cant load file\n";
my @userarray = <USER>;
$arraylen = push(@userarray);

for ($i = 0; $i < $arraylen; $i++)
{
# get username and password
($username, $passw) = split(/,/, $userarray[$i]);

# add new user
system("useradd -m -d $dir/$username -s /bin/false -g $group $username");

# password
chomp($passw);
$passwc=crypt("$passw","FR");
system("usermod -p $passwc $username");

# add user to smbpasswd
system("smbpasswd -a $username WEITERE BEFEHLE FÜR SAMBA");

print "Das Passwort für den User $username lautet $passw\n";

}

Einfach nun eine Datei anlegen und in dieser dann z.B.: diese schreiben:

kaese,1111
wurst,2222
obst,3333
gemuese,4444


Naja und eben bei dem smbpasswd befehl die Parameter anpassen, normal reicht das -a $username ;)
Ja und eben oben den Teil anpassen.

Hoffe ich konnte helfen!

Ach ja .. hab eigentlich nur den "split" teil eingefügt und eben die Variablen angepasst!

EDIT:
Die Ausgabe mit dem "Das Passwort für den User $username lautet $passw\n" kann natürlich geändert werden bzw entfernt :)
Es wird ja kein Passwort mehr generiert, aber da sieht man vielleicht, ob er das richtige genommen hat :)

EDIT II:
Muss aber marce schon recht geben, man versteht es doch gleich besser, wenn man es selber macht. Aber ich hoffe mal du schaust dir das Script einfach mal an und denkst ein wenig nach was es vielleicht nun macht :)
Jeder ist mal klein angefangen und Perl kann einen in vielen Sachen echt helfen :)

marce
30.11.05, 20:49
chop($passw);würde ich durch chomp ersetzen...

marce
30.11.05, 20:52
... in der useradd-Zeit ist ein Schreibfehler?

Friesi
30.11.05, 21:37
... in der useradd-Zeit ist ein Schreibfehler?

Stimmt!
Nicht $groupn sondern nur $group :cool:
Danke :)

Und chop hab ich auch mal gewechselt.

marce
30.11.05, 22:48
und nun, als weiterführende Übungsaufgabe: Ersetze das Perl-Script durch ein in der Funktionalität id. shell-Script :-)

micweg
01.12.05, 08:47
Hi Friesi,

Danke Für das Skript! Natürlich werde ich es mir zu Gemüte führen, ich hatte dein ursprüngliches Skript auch schon mal versucht zu ändern, leider blieb es beim Versuch!

Danke auch an die anderen mit den kleinen Fehlerbeseitigungen!!!

crusa4der
02.11.08, 18:17
Hallo zusammen,
ich poste mal hier weiter nachdem ich schon einiges gesucht und veruscht habe.
Und zwar mein Problem ich möchte gerne automatisch usernamen und gruppennamen hochzählen.
Angefangen bei web1, web2 usw. Die gid und uid sind ja kein Problem.
Um die id's hochzuzählen splitte ich die /etc/group nach dem ":" und zähle die gid hoch.
Ich hatte die Idee das ich nach dem split auf den ":" auch nach "web" splitte um dann die Nummer dahinter eins hoch zu zählen.
Nur leider komme ich damit noch nicht ganz klar ;-) Oder ich mache es mir einfach zu kompliziert.
Habt ihr vielleicht eine Idee?
gruppenname ist = dem usernamen
Gruss crus4der

cane
03.11.08, 13:39
Ich verstehe nicht was Dui erreichen möchtest. Spar dir mal den technischen Kram und sag ganz grob was dir vorschwebt:

- Einfach die User web1 bis web100 anlegen?
- ...

mfg
cane

marce
03.11.08, 13:43
ich _vermute_ er will ein Script, welches einfach einen neuen User anlegt. Und zwar so, daß der Username automatisch hochgezählt wird.

Wenn also web99 schon existiert soll das Script beim nächsten Aufruf einen web100 anlegen - und die Daten sollen wohl rein aus der /etc/passwd kommen.

So verstehe ich das Posting...

michaxyz
08.11.08, 02:04
Hi,

grep -c web /etc/passwd liefert die Anzahl der Zeilen in der passwd, die web enthalten. Gibts keine anderen Benutzer außer den gewünschten, ist das die gesuchte Zahl, die nur um eins erhöht werden muss:

#!/bin/sh
...
i=$(grep -c web /etc/passwd)+1
useradd ...

Mfg Michael

crusa4der
21.03.09, 23:10
Hi zusammen,
hab den thread ganz vergessen.
Aber möchte trotzdem zu meinem Problem meine Lösung schreiben.

Nochmal zusammengefasst:
in der /etc/passwd sowie /etc/group sind Benutzer und Gruppen in der Form von "web01", "web02" usw. Es kommen wöchentlich einige hinzu.
Daher wollte ich ein script schreiben welches den höchsten user ausliest und um eins erhöht.

Das habe ich jetzt so gelöst:


open PW_FILE, "<$pw_file" or die "Kann Datei nicht öffnen";
my @pw_info = <PW_FILE>;
close PW_FILE;

foreach my $cur_pw (@pw_info) {
my @fields = split /:/, $cur_pw;

if (substr($fields[0],0,6)gt "web"){
$nummer = substr($fields[0],3,length($fields[0])-3);
}
if ($nummer > 10000) {
next;
}
if ($nummer > $uid) {
$uid = $nummer;
}

}
$uid ++;


uid ist in diesem Fall die Nummer hinter dem web in dem username.
Hoffe es hilft noch jemanden der auch auf das Problem stößt.

Gruss