Kein klartext Passwort in ShellScript

Hallo an alle Shell-Script Helden,

ich möchte ein kleines Shell-Script schreiben, dass mir eine Datei via ftp auf einen Server packt. Das ganze sieht in etwa so aus:

#!/bin/bash
HOST='ftp.server.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp $HOST 
Jetzt möchte ich aber nicht, dass in diesem ShellScript das Passwort in Klartext steht. (Mir ist schon bewusst, dass es im FTP Protokoll immer Klartext gesendet wird)
Gibt es nicht eine Möglichkeit mit wilden grep-Attacken etwas dynamisch aus der passwd (bzw. shadow) Datei auszulesen? Oder wie muss ich es sonst anstellen, um mich sicher mit dem ftp Server zu verbinden?

Vielen Dank an alle die sowas besser können als ich,
Christian

Gibt es nicht eine Möglichkeit mit wilden grep-Attacken etwas
dynamisch aus der passwd (bzw. shadow) Datei auszulesen? Oder
wie muss ich es sonst anstellen, um mich sicher mit dem ftp
Server zu verbinden?

Aus der passwd kommt nichts sinnvolles, weil da nur ein nicht dechiffrierbarer Hash des Passworts drinsteht. Auf die shadow hat ein normaler Benutzer überhaupt keinen Zugriff.

FTP benötigt nunmal ein Klartext-Passwort, das irgendwo herkommen muss. Wenn du eine sicherere Alternative willst, fallen mir spontan nur sftp und rsync (über ssh) ein, die der Server aber erstmal unterstützen muss.

Wenn du ein FTP-Skript verwendest, stell’ die Zugriffsrechte zumindest auf 0700, dann kann nicht jeder Benutzer auf dem System das Passwort lesen.

Gibt es nicht eine Möglichkeit mit wilden grep-Attacken etwas
dynamisch aus der passwd (bzw. shadow) Datei auszulesen? Oder
wie muss ich es sonst anstellen, um mich sicher mit dem ftp
Server zu verbinden?

FTP benötigt nunmal ein Klartext-Passwort, das irgendwo
herkommen muss. Wenn du eine sicherere Alternative willst,
fallen mir spontan nur sftp und rsync (über ssh) ein, die der
Server aber erstmal unterstützen muss.

Selbst wenn ich sftp oder rsync benutzen würde, müsste doch aber weiterhin im Script das Passwort im Klartext stehen, oder?
Und wenn ich irgendwann das Passwort ändern würde, müsste ich daran denken es auch im Script zu ändern.

Anderer Gedanke von mir: Wie müsste ich denn einen Benutzer auf dem FTP Server anlegen, der ansonsten überhaupt keine Rechte hat? Er soll lediglich auf einen Ordner des FTP Servers zugreifen dürfen und sonst nirgends irgendwas machen dürfen. Dann wäre es doch auch egal, ob das Passwort unsicher ist und man braucht es auch nicht ändern, weil dieser User nur diesem Zwecke dient.

Selbst wenn ich sftp oder rsync benutzen würde, müsste doch
aber weiterhin im Script das Passwort im Klartext stehen,
oder?

Wenn du dann noch ein Passwort verwenden würdest: ja.

Und wenn ich irgendwann das Passwort ändern würde, müsste ich
daran denken es auch im Script zu ändern.

Stimmt, aber nur wenn du überhaupt ein Passwort benutzt. Ich benutze keine.

Bei Kopieraktionen per ssh (scp, sftp) nimmst du am besten eine Private-/Public-Key-Geschichte:

Rufe ssh-keygen -t rsa auf. Du erhälst zwei Dateien:

  1. id_rsa (der private Key)
  2. id_rsa.pub (der public key)

Wenn du nach einem Passwort gefragt wirst, dann gibst du nix ein (also nicht das Wort nix, sondern eben gar nichst außer der Returntaste :smile:.

Den public key kopierst du auf den Server in das .ssh-Verzeichnis im Home-Verzeichnis des Anwenders in die Datei authorized_keys. Ist die Datei schon vorhanden, so hängst du den Key unten dran. Fertig.

Bei Kopien von Win --> Lin benutzt du unter Win die Programme pscp und puttygen des putty-Paketes. Google hilft weiter.

Nun kanns schon losgehen: scp datei user@zielhost:dir/dir/datei. Beim ersten mal wird das System noch eine Bestätigung brauchen, danach herrscht himmlische Ruhe.

Anderer Gedanke von mir: Wie müsste ich denn einen Benutzer
auf dem FTP Server anlegen, der ansonsten überhaupt keine
Rechte hat?

Das erledigst du mit bestimmter Server-Software (vsftpd, proftpd). Dort kannst du eine gesperrte Umgebung definieren (chrooted, jailed), so dass der Anwender nur in das in /etc/passwd definierte Homeverzeichnis gelangt.

Stefan

1 Like

Vielen Dank für diese Hinweise, das war mir wirklich sehr hilfreich!

Eine wirklich schöne Lösung für das Problem, wo ich von allein sicher nicht drauf gekommen wäre. Werde das in den nächsten Tagen mal ausprobieren.

Hallo,

Nun kanns schon losgehen: scp datei
user@zielhost:dir/dir/datei. Beim ersten mal wird das System
noch eine Bestätigung brauchen, danach herrscht himmlische
Ruhe.

Ich erledige sowas gerne mit rsync. Wirklich, ich finde das viel genialer als scp, was an meinen schwächlichen Connections liegen könnte. YMMV.

Gruß,

Sebastian