Shell Skript User Input an Programm übergeben

Gast #1856915
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?
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.
> 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.
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
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
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
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
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
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
salt ist mir schon ein Begriff...aber mir schwant, das dieser Salt dann 
Rechnerspezifisch ist...würde sonst ja nicht so viel Sinn machen. Und 
das würde bedeuten, das die Hashs nicht einfach austauschbar wären
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
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
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.
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.
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.