# adduser script



## murdi (1. Juli 2003)

hallo zusammen,
habe mal folgende frage.
möchte ein programm schreiben mit dem ich n useraccounts erstellen kann. die usernamen und die passwörter lese ich aus einer datei.
mein problem ist nun aber das ich immer 

adduser -u name -p 123 123

eingeben lasse und eine fehlermeldung ausgegeben wird.
habe auch folgendes probiert: adduser test, nur dann kommen halt wie gewohnt die einzelnen abfragen wie adresse etc die ich unbedingt umgehen möchte !!! ich arbeite derzeit unter debian 3.0 ( textbasierend ).
ich würde mich über ein paar tipps wirklich freuen.
also dann, schönen tag noch !


----------



## Dario Linsky (1. Juli 2003)

Was für ein Fehler wird denn ausgegeben?

Ganz nebenbei solltest Du darauf achten, dass mit der Option -p ein schon verschlüsseltes Kennwort erwartet wird (MD5-Hash glaub ich). Einfacher ist es da, das Kennwort später mit dem passwd-Befehl festzulegen:

```
[root@cenobite]# adduser test
[root@cenobite]# passwd test
New Password: (wird nicht angezeigt!)
```

So funktioniert das bei mir (Redhat 9.0) ohne Probleme...


----------



## murdi (1. Juli 2003)

mmmh wenn ich das aber so zeilenweise mache wie du, dann muss ich ja jedes detail mit angeben. nur ich möchte ja ein programm schreiben welches das hintereinander macht da ich ja nicht 86 useraccounts per hand erstellen möchte. 
am besten wäre es ja, den user mit nur einer zeile zu erzeuge sprich 
adduser +username +pw und dann soll der user bereits existieren.


----------



## Dario Linsky (1. Juli 2003)

Irgendwie versteh ich Dein Problem nicht so ganz. Natürlich kannst Du auch direkt das Kennwort für den neuen User festlegen, allerdings musst Du das Kennwort dann als MD5-Hash übergeben.

```
adduser -p $md5_hash_vom_password $username
```


----------



## murdi (1. Juli 2003)

ahso, nun ist mir auch der fehler klar.
hab ja ein nicht md5pw übergeben und da gabs dann immer fehler.
ich versuche gleich mal deine methode muss nur eben funktion suchen die einen normalen string in md5dings konvertiert.
also danke schon mal , hoffe das klappt jetzt so !


----------



## Dario Linsky (1. Juli 2003)

Ich weiss nicht, wie das bei Debian ist, aber wenn ich mich nicht irre, dann dürfte da kein Fehler ausgegeben werden, nur weil man ein unverschlüsseltes Kennwort an die adduser-Anweisung übergibt. Der Fehler tritt AFAIK erst auf, wenn man versucht, sich mit dem Kennwort einzuloggen.


----------



## murdi (1. Juli 2003)

habs gerade ausprobiert und so gehts immer noch nicht.
ich werd noch mal im inet suchen.
vielleicht gibts da irgendwas tolles, vielleicht auch schon ein fertiges script. also danke noch mal.


----------



## Dario Linsky (1. Juli 2003)

Was heisst "so gehts immer noch nicht"? Warum geht es nicht, wie macht es sich bemerkbar, dass es nicht geht? Gibt es eine Fehlermeldung? Wenn ja, welche?


----------



## murdi (1. Juli 2003)

fehler ist der: unable to lock password file
abwohl ich mich an die parameter halte.
was ist eigentlich der unterschied zwischen useradd und adduser... ?


----------



## Dario Linsky (1. Juli 2003)

Bist Du denn auch als root eingeloggt?

Es gibt AFAIK keinen Unterschied zwischen useradd und adduser. Ist einfach nur eine andere Schreibweise für den gleichen Befehl.


----------



## murdi (1. Juli 2003)

bin wirklich als root angemeldet.
solange wie ich das passwort nicht als parameter übergebe sondern normal mit adduser den ganzen vorgangen ( jeden einzelnen schritt ) durchlaufe wird der account ja problemos erstellt. naja, werd nu nachhause fahren 

also dann, danke und tschö


----------



## sabine (3. Juli 2003)

nimm doch 


```
useradd <username> -g <group> -m
```
 !


----------



## Christian Fein (3. Juli 2003)

useradd macht nichts anderes als 
die informationen nach /etc/passwd bzw shadow zu schreiben.

Lass diesen Schritt aus und schreibe deine Infos direkt dort rein.
Über das File-Format bekommst du massenweise auskunft im Netz.

[Erhobener Zeigefinger] 
Ich halte es für eine bedenkliche Idee das Unix Sicherheitskonzept dadurch auszuhebeln das du die Passwörter nach einem anderen Prinzip behandelst, als dies vorgesehen und langzeit erprobt ist.
Ich hoffe der Rechner hängt nicht am Netz 
[/Erhobener Zeigefinger]


----------



## sabine (3. Juli 2003)

hallo chris,
ich glaube ich habe das gleich vor wie murdi.
möchte mehrere accounts erzeugen ( zu viele um alle einzeln zu erstellen !). 

also wie würdest du am besten vorgehen um eine grosse menge von usern zu erzeugen ohne jeden user per adduser oder useradd einzeln zu erstellen ( mit pw )?

gruss sabine


----------



## Dario Linsky (3. Juli 2003)

Eventuell per Shellscript, dazu sind die Dinge ja da. 
Geht aber auch mit Perl, C, Python, und und und. Aber es ist IMHO auch eine Sicherheitslücke, das Anlegen von Usern auf diese Weise zu automatisieren.

Wieviele User sollen das überhaupt sein, dass man das nicht mehr selbst machen kann?


----------



## sabine (3. Juli 2003)

genau 103 !  ( filesystem, samba etc.. )

ok, würde das dann mit c realisieren wollen  kann ich eigentlich sehr gut. 

hast du vielleicht ein gutes beispiel da ?
aja eh ichs vergesse, soll ich da alle einträge manuel machen ? zb.: erstellen des ordner + zugriffsrechte etc.. ?
gruss sabine


----------



## Christian Fein (3. Juli 2003)

Es spricht nichts dagegen, wenn du die erzeugten User danach sofort aus dem Quellfile löscht.
Das quellfile sollte in /root liegen und auch nur /root lese und schreibrechte haben.

Es geht nur darum das eine schöne Datei mit verschlüsselten Passwörtern gar nichts nützt wenn es noch eine Quelle gibt in der die Passwörter in klarschrift stehen.


----------



## Dario Linsky (3. Juli 2003)

Richtig, aber das Script kann ja einfach nur die Benutzer anlegen und dann für jeden einzelnen eine Eingabe für das Kennwort verlangen.

Mit C könntest Du wie gesagt einfach die Informationen in die entsprechenden Dateien schreiben (/etc/passwd und /etc/shadow). Allerdings muss das Script die Kennwörter auch verschlüsseln. Und die Dateien sind vom System aus schreibgeschützt - dieses Flag müsstest Du für das Script ausschalten.


----------



## sabine (3. Juli 2003)

jop ok.
nur ich habe ja genau das gleiche problem wie murdi.
ich schreibe ein programm welches einen neuen account erstellt,
dass würde ich ganz einfach mit system("adduser") machen wollen.
nun erwartet aber das aufgerufene programm adduser die einzelnen eingaben ! diese wollte ich zuerst als parameter übergeben leider ist das aber nicht möglich weil man das passwort aus sicherheitsgründen nicht als parameter an das programm übergeben kann ( geht bei passwd auch nicht ). verstehste was ich meine ? das programm bleibt ja stehen weils auf die eingaben wartet und das darf natürlich nicht sein !
gruss sabine


----------



## Dario Linsky (3. Juli 2003)

Die User werden in /etc/passwd eingetragen und die Kennwörter in /etc/shadow.
Du kannst also entweder beide Dateien gleichzeitig bearbeiten oder Du bearbeitest nur die Datei mit den Shadow-Kennwörtern, nachdem Du mit system() das adduser-Script ausgeführt hast.


----------



## sabine (3. Juli 2003)

da werde ich das ganze so machen 
danke an alle die mir geholfen haben


----------

