[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Jessie: OpenSSH internal-sftp Subsystem



Hallo Harald und Olaf,

Am 8. Oktober 2015 um 13:52 schrieb Harald Weidner <hweidner-lists@gmx.net>:
> Hallo,
>
>> wir betreiben verschiedene Webservices, bei denen Kunden per SFTP
>> Uploads  machen können, und zwar über das "internal-sftp" Subsystem
>> von OpenSSH. Dies funktioniert auch prinzipiell, allerdings habe ich
>> unter Jessie das Problem der Informationspreisgabe des konkreten
>> Homedirs, wenn man sich probiert per _SSH_ einzuloggen, und der
>> Account eigentlich nur als SFTP-only Account vorgesehen ist.
>
>> user@linux:~$ ssh  foo@172.16.1.128
>> Could not chdir to home directory /home/foo: No such file or
>> directory                       ##  <-   Um diese Zeile geht es mir
>> This service allows sftp connections only.

Ich sehe diese Zeile nur, wenn ich mich per ssh mit einem
sftp-Benutzer erfolgreich authentifiziert habe.
Bitte prüfe das noch mal in deinem Setup.

> Vermutlich hast du in der /etc/passwd beim User foo /home/foo als
> Homeverzeichnis eingetragen.
>
> Das Problem ist, dass der SSHD nach dem Login und NACH dem chroot()
> auf /home/foo nochmal in das Homeverzeichnis wechseln möchte und es
> das innerhalb der Chroot-Umgebung nicht gibt.

In meinem funktionierenden ssh+sftp-Setup sind ChrootDirectory und
$HOME gleich gesetzt mit
   ChrootDirectory %h
so wie bei Olaf.

> Um die Meldung wegzubekommen, kannst du also entweder das gewünschte
> Verzeichnis anlegen, also /home/foo/home/foo.

Das ist nicht notwendig, wenn ChrootDirectory root gehört (siehe unten).

> Oder du trägst in der
> /etc/passwd ein Homeverzeichnis ein, das es in der Chroot-Umgebung
> gibt, z.B. /.

Bitte gar nicht erst angewöhnen und niemals die /etc/passwd direkt
bearbeiten, sondern mit den dafür vorgesehenen Werkzeugen. In diesem
Fall wäre das usermod.

   usermod --home /neues/home $ANMELDENAME

> Ich erstelle für solche User immer ein Verzeichnis /home/foo/data
> und trage dann /data als Homeverzeichnis in die /etc/passwd ein.
> /home/foo ist die Chroot-Umgebung und gehört root:root,
> /home/foo/data ist das Arbeitsverzeichnis, in dem der User volle
> Rechte hat.

Das ist wichtig und ist in meinem Setup auch so umgesetzt:
Aller Verzeichnisse im Pfad zum ChrootDirectory müssen root gehören
und group und other dürfen keine Schreibrechte darauf haben.
siehe: man sshd_config (Anschnitt ChrootDirectory)

Wenn das nicht der Fall ist, bekommt der ssh-Client, der sich als
sftp-Benutzer anmelden möchte, keine Fehlermeldung, die darauf
hinweist, auch nicht nach erfolgreicher Authentifizierung. In
/var/log/auth.log wird vermerkt:
    sshd[14670]: fatal: bad ownership or modes for chroot directory "/home/..."

>
> Gruß, Harald

Gruß
Matthias Böttcher


Reply to: