Shell Skript User Input an Programm übergeben

Gast #1856915
Lesenswert?

Hallo,

ich möchte per Shell Script ein Passwort mit passwd setzen.

Habe deshalb
1
passwd <<END
2
root
3
root
4
END

verwendet, aber das funktioniert nicht. Ich vermute mal, die Eingabe 
wird irgednwie zu schnell gemacht und es wird angemeckert das die 
Passwörter nicht identisch seien?!

Kann man zwischen den Eingaben eine kleine Pause einfügen? Oder wie 
könnte man das Problem sonst lösen?
#1857035
Lesenswert?

nein, da brauchst du keine Pause, das würde nichts ändern.

Eigentlich sollte es so gehen.

Ich habe es in der Kommandozeile probiert (als root):
1
root@i4a:/etc # passwd <<EOF
2
> ganzneu
3
> ganzneu
4
> EOF
5
Geben Sie ein neues UNIX-Passwort ein: Geben Sie das neue UNIX-Passwort erneut ein: passwd: Passwort erfolgreich geändert
Das hat geklappt, das PW wurde geändert.

Als Skript funktioniert es auch:
1
#!/bin/bash
2
#
3
# Time-stamp: "15.09.10 11:12 testpw root?wachtler.de"
4

5
passwd <<EOF
6
neu
7
neu
8
EOF

Du bist dir bewusst, daß du mit passwd ohne Parameter das PW des gerade 
aktuellen Benutzers änderst?
Ansonsten könntest du als root aufrufen: passwd benutzername
Dann wird das PW dieses Benutzers geändert.
#1857048
Lesenswert?

> root@i4a:/etc # passwd <<EOF
----------------^

Du hast es als root probiert (Du hast Dich ja sicher extra für die 
Antwort hier als root eingeloggt, denn dauernd als root eingeloggt zu 
sein ist bekanntlich böse).

Als Nicht-root wird zunächst das derzeitige Passwort abgefragt.  Zwei 
Zeilen als Antwort reichen dann nicht (drei werden benötigt) und das 
Skript muss deshalb in der normalen Anwendung scheitern.  Denn wer 
ändert schon das root-Passwort per Skript.
#1857114
Lesenswert?

Jörg Wunsch schrieb:
> Meiner Erinnerung nach liest passwd nicht von stdin, sondern direkt
> von /dev/tty.  Kannst ja mal im Sourcecode nachgucken.

Das hatte ich auch so in Erinnerung und habe das sicherheitshalber vor 
meinem Posting überprüft.  Bei einem aktuellen Linux (Debian, Ubuntu) 
ist es nicht (mehr?) so:

passwd <<EOF
meinAktuelles
dasNeue
dasNeue
EOF

funktioniert.
Moderator Persönliche Seite #1857115
Lesenswert?

Klaus Wachtler schrieb:
> und was ist /dev/tty ?

Das "controlling terminal" des Prozesses.

man 4 tty

Habe mal versucht, das im FreeBSD-Sourcecode zu finden, ist mir
aber nicht gelungen.  Das geht mittlerweile über PAM derart
verschlungene Pfade, dass ich da nicht durchgeblickt habe...

Hmm, nö, ich hab's mal durch ktrace geschickt, das geht mittlerweile
in der Tat von stdin.  War wohl in einem früheren Leben ;), dass da
direkt von /dev/tty gelesen wurde.
Gast #1857161
Lesenswert?

hmm,

> Denn wer ändert schon das root-Passwort per Skript.
also nur als Hintergrund: das ist für ein Embedded System und zu Anfang 
ist da Standardmässig kein root-PW gesetzt, was ich dann eben mit einem 
Installskript nachholen will.

Das Skript wird als root ausgeführt, und so wie ich es gemacht habe 
funktionierte es eben leider nicht.
Muss dann wohl nochmal rumprobieren...hatte schon öfters das Problem das 
einige der Tools sich etwas anders verhalten haben, als z.b. bei einer 
richtigen Debianinstallation...was weiss ich was für Sourcen die da 
teilweise verwendet haben :(

aber vielleicht ändert es etwas wenn ich passwd explizit für root 
aufrufe per Parameter...muss ich nochmal probieren
Gast #1857164
Lesenswert?

1
passwd root <<END
2
> root
3
> root
4
> END
5
Enter new UNIX password: Retype new UNIX password: Sorry, passwords do not match
6
passwd: Authentication information cannot be recovered
7
passwd: password unchanged

das meldet mir passwd
#1857215
Lesenswert?

funky schrieb:
> also nur als Hintergrund: das ist für ein Embedded System und zu Anfang
> ist da Standardmässig kein root-PW gesetzt, was ich dann eben mit einem
> Installskript nachholen will.

Dann wäre usermod -p möglicherweise das Tool der Wahl.  Das ist für die 
Verwendung in solchen Skripten gedacht.  Es benötigt allerdings das 
fertig verschlüsselte statt des Klartextpassworts.  Entweder Du besorgst 
Dir dieses aus einer vorhandenen Installation oder bastelst was mit 
crypt(3) drumherum.

Eine andere Möglichkeit, um Userinput vorzugaukeln, ist expect (Teil von 
Tcl).
Gast #1857272
Lesenswert?

hmm...ich habe mir jetzt einfach mal den Hash aus der "/etc/passwd" 
kopiert und testweise mit "usermod" gesetzt...danach konnte ich mich 
auch noch einloggen und es scheint zu funktionieren


mich wundert nur etwas, das "passwd" mir für das gleiche Passwort 
jedesmal einen anderen Hash produziert?! Dachte zu jedem Passwort gibt 
es nur einen einzigen Hash...raff gerade nicht wie das ganze dann 
überhaupt funktioniert

mal sehen ob das ganze auch noch funktioniert, wenn ich den Hash auf 
einem anderen Rechner mit "usermod" setze
#1857300
Lesenswert?

Der Salt ist nicht rechnerspezifisch.  Er ist rein zufällig (na ja, so 
rein zufällig halt, wie der Rechner Zufall erzeugen kann).  Er soll die 
Suppe einfach so versalzen, dass gleicher Ursprung nicht mehr erkennbar 
und zurück-berechenbar ist.  Man muss den Ursprung schon kennen und 
genau gleich versalzen, um dasselbe Ergebnis zu erzielen.
Moderator Persönliche Seite #1857321
Lesenswert?

Die wesentliche Idee hinter dem Salt ist, dass man nicht einfach
durch das Ansehen der gecrypteten Passwörter bereits feststellen
kann, dass zwei Nutzer das gleiche Passwort haben.  Das rührt vor
allem noch aus der Zeit, da jeder Nutzer die verschlüsselten
Passwörter der anderen Nutzer beliebig einsehen konnte (wie es ja
bei "plain NIS" immer noch der Fall ist).
Gast #1857336
Lesenswert?

Hi,

fuer sowas verwendet man normalerweiser einen expect script. Dieser 
wartet auf ein bestimmtes Token (wie "password:") und fuehrt dann das 
Passwort zu.

Siehe man expect (falls schon installiert). Damit kann man auch 
schwierige Faelle, wie ein SSH-Passwort zufuehren.

Bei aktuellen Linux-Installationen wird mit MD5 verschluesselt und nicht 
mehr mit DES. Also nichts mehr mit dem Basteln mit Salt.
#1857355
Lesenswert?

olibert schrieb:
> Bei aktuellen Linux-Installationen wird mit MD5 verschluesselt und nicht
> mehr mit DES. Also nichts mehr mit dem Basteln mit Salt.

Salt und MD5 sind keine Widersprüche.  Das oben genannte crypt(3) in 
allen modernen Unixen (incl. Linux) vereint beides, und zwar nicht 
trotz, sondern mit und in Abhängigkeit vom Salt.  Das Salt ist nach wie 
vor fester Bestandteil.
#1857372
Lesenswert?

Ja, genau.  Deshalb das „in Abhängigkeit vom Salt“.  SHA kommt ja auch 
noch hinzu (zumindest bei den meisten).  Alle Methoden haben aber den 
Salt gemeinsam, somit kein

> Also nichts mehr mit dem Basteln mit Salt.

sondern ein „Doch“.  So war's gemeint.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren