crackhawk
Goto Top

Passwörter in Skripten die mit Dollar-Ausrufezeichen beginnen

Hallo zusammen!

Sorry für den Titel, aber $ und ! sind da leider nicht erlaubt.

Ich habe ein Problem speziell mit meinem Kennwort unter Debian 8, da es mit $! beginnt.

Wenn ich ein Script ausführen möchte, in meinem Fall war dies die Benutzeranlage von Open-Xchange, wird das $! ignoriert:

/opt/open-xchange/sbin/createuser -c 1 -A oxadmin -P admin_password -u testuser -d "Test User" -g Test -s User -p $!Abc123 -e testuser@example.com --imaplogin testuser --imapserver 127.0.0.1 --smtpserver 127.0.0.1  

Wenn ich hier mein Kennwort eingebe, also -p $!Abc123 wird das $! ignoriert, mein Kennwort wäre in diesem Fall also Abc123.
Auch wenn ich es in Anführungszeichen setze funktioniert es nicht.

Das ganze tritt nicht nur bei Open-Xchange auf, sondern bei allen Skripten, welchen ich auf diese Weise ein Kennwort mitgeben muss.

Kann ich irgendwo einstellen, dass $! nicht als Systemvariable gehandhabt wird, sondern als Text? Muss ich evtl. irgendwelche Zeichen davorsetzen?

Vielen Dank und Grüße,

Daniel

Content-ID: 330060

Url: https://administrator.de/forum/passwoerter-in-skripten-die-mit-dollar-ausrufezeichen-beginnen-330060.html

Ausgedruckt am: 02.02.2025 um 12:02 Uhr

IrunGoldstein
Lösung IrunGoldstein 21.02.2017 um 13:29:49 Uhr
Goto Top
Hi Daniel,

wenn du single quotes, statt double quotes nimmst funktioniert es wie du es haben willst.

Bsp:.

 -p '$!Abc123'  

screenshot_20170221-132528


Grüße
LordGurke
Lösung LordGurke 21.02.2017 aktualisiert um 13:31:41 Uhr
Goto Top
Deshalb muss man *JEDE* Nutzereingabe escapen lassen face-wink
Im jetzigen Script wäre es ja wirklich sehr bedauerlich, wenn ein Nutzer als Kennwort - sagen wir mal - ";halt -f" wählen würde... Oder schlimmeres...

Von wo kommen denn die Eingaben her?
Wenn sie aus einer Weboberfläche kommen, könntest du mit der jeweiligen Scriptsprache vorher das Escaping ausführen lassen. Bei PHP wäre das zum Beispiel mit escapeshellarg() getan.


NACHTRAG:
Auch die Single Quotes sind kein Ersatz für sauberes Escaping - dann wählt ein Nutzer eben
';halt -f  
als Kennwort und schaltet den Server aus.
Lochkartenstanzer
Lösung Lochkartenstanzer 21.02.2017 um 13:51:45 Uhr
Goto Top
Moin,

Alternativ escapen:

 echo \$\!Abc123

lks
crackhawk
crackhawk 21.02.2017 um 14:44:47 Uhr
Goto Top
Hallo!

Der Vorschlag, das Kennwort in single quotes statt double quotes zu packen, hat funktioniert! Vielen Dank dafür face-smile

\$\!Abc123 hätte auch funktioniert, die single quotes finde ich aber komfortabler.

Die Eingaben werden ausschließlich von mir lokal ausgeführt, Benutzer wird es - außer mir - nicht geben. Trotzdem vielen Dank für den Hinweis, ich wusste nicht, dass so theoretisch Befehle ausgeführt werden können. Ginge das auch ohne root Rechte?

Vielen Dank für eure schnelle Hilfe.
Lochkartenstanzer
Lochkartenstanzer 21.02.2017 aktualisiert um 14:51:34 Uhr
Goto Top
Zitat von @crackhawk:

Ginge das auch ohne root Rechte?

Latürnich! Allerdings funktioniert dann mancher Befehl erstmal nicht wie gewünscht. Allerdings kann man durch privilege-escalation trotzdem root-Rechte erlangen und Unsinn anstellen.

lks