SFTP Restricted Folder

Timboo89

New Member
Moin,

ich habe gerade erstmals einen SFTP Service aufgesetzt. Der funktioniert soweit auch, allerdings habe ich zwei Probleme:
  1. Ich schaffe es nicht den Startordner zu ändern, in dem der Benutzer nach erfolgreichem Login "spawnt"
  2. Die Benutzer können frei durchs Dateisystem navigieren. Ich möchte aber das sie nur Subordner des Startordners öffnen können.

An die /etc/ssh/sshd_config habe ich folgendes angefügt:
Code:
Match group sftponly
ChrootDirectory /mnt/bucket/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Wenn ich meinen ftpuser zu der Gruppe sftponly hinzufüge, hat er keinen Zugriff mehr über ftp. Wenn ich dem ftpuser NUR die Gruppe sftponly zuweise, hat er keinen Zugriff mehr. Wenn ich stattdessen die Zeile in sshd_config zu
Code:
Match groud ftpuser
ändere, hat er keinen Zugriff mehr.

Hat jemand eine Idee, was ich falsch mache?
Danke =)
 
Das kann alles mögliche sein - es fehlen schlicht noch hilfreiche und notwendige Infos.

Ich würde aktuell vermuten, daß die Rechte des Chroot-VZ nicht stimmen - mehr steht aber sicherlich im Logfile.
 
Also. Ich habe ein vollständig neu aufgesetztes CentOS System, in dem ich folgendes Script ausgeführt habe:

Code:
#!/bin/bash

readonly FTPUSER="ftpuser"
readonly SFTPONLY_GROUP="sftponly"
readonly PUBLIC_KEY_NAME="authorized_keys"
readonly PUBLIC_KEY_SRC="/home/ec2-user/.ssh"
readonly PUBLIC_KEY_DEST="/home/${FTPUSER}/.ssh"
readonly SSH_CONFIG="/etc/ssh/sshd_config"
readonly FSTAB="/etc/fstab"
readonly S3FS_GIT="https://github.com/s3fs-fuse/s3fs-fuse.git"

readonly S3BUCKET="mybucket"
readonly S3BUCKET_PATH="/mnt/s3bucket"
readonly S3_ACCESS_KEY_ID="myaccesskey"
readonly S3_SECRET_ACCESS_KEY="mysecretkey"
readonly PASSWD_S3FS_PATH="/etc/passwd-s3fs"

# install SFTP
echo "y" | yum install vsftpd
# install s3fs
echo "y" | yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel
git clone ${S3FS_GIT}
cd s3fs-fuse
./autogen.sh
./configure
make
make install
cd ..

# prepare mounting of s3bucket
echo ${S3_ACCESS_KEY_ID}:${S3_SECRET_ACCESS_KEY} > ${PASSWD_S3FS_PATH}
chmod 600 ${PASSWD_S3FS_PATH}
mkdir ${S3BUCKET_PATH}
echo "s3fs#${S3BUCKET} ${S3BUCKET_PATH} fuse _netdev,rw,nosuid,nodev,allow_other 0 0" >> ${FSTAB}

# add SFTP group and user
groupadd ${SFTPONLY_GROUP}
adduser ${FTPUSER} # ${SFTPONLY_GROUP} #didn't work
mkdir ${PUBLIC_KEY_DEST}
# copy Credentials (Public Key)
cp ${PUBLIC_KEY_SRC}/${PUBLIC_KEY_NAME} ${PUBLIC_KEY_DEST}
chmod 700 ${PUBLIC_KEY_DEST}
chmod 600 ${PUBLIC_KEY_DEST}/${PUBLIC_KEY_NAME}
chown -R ${FTPUSER}:${FTPUSER} ${PUBLIC_KEY_DEST}

# Configure SFTP
echo -e "\n\n\
Match group ${SFTPONLY_GROUP}\n\
ChrootDirectory ${S3BUCKET_PATH}\n\
X11Forwarding no\n\
AllowTcpForwarding no\n\
ForceCommand internal-sftp\n" >> ${SSH_CONFIG}

# mount s3bucket
mount -a
# restart sftp / ssh
/etc/init.d/sshd restart

Die sshd_config sieht dann folgerndermaßen aus (ohne Kommentare):
Code:
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

SyslogFacility AUTHPRIV
PermitRootLogin forced-commands-only
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no

ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintLastLog yes
UsePrivilegeSeparation sandbox		# Default for new installations.
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

Subsystem sftp	/usr/libexec/openssh/sftp-server


Match group sftponly
ChrootDirectory /mnt/s3bucket
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
 
... und was steht denn nun in den Logfiles?

Das Script sieht nett aus, habe ich aktuell nicht nachvollzogen. Wo ist's denn her?
 
Code:
...
# install SFTP
echo "y" | yum install vsftpd
...

Warum wird noch ein FTP-Server installiert, wenn du FTP-Funktionalität über SSH bereitstellen willst?

Bezüglich des Hinweises von marce wegen den Verzeichnisrechten...Was sagt die Ausgabe von:
Code:
ls -al /mnt
 
... und was steht denn nun in den Logfiles?

Das Script sieht nett aus, habe ich aktuell nicht nachvollzogen. Wo ist's denn her?

Das Script habe ich selbst geschrieben. Allerdings die Teilanleitungen sind hier zu finden:
Mount S3 Bucket: https://winscp.net/eng/docs/guide_amazon_s3_sftp
Set-Up Sftp on AWS EC2: https://rmtheis.wordpress.com/2011/...-restricting-that-account-to-allow-only-sftp/

Zum Thema Log... Die EC2 Instanzen legen weder die Datei /var/log/auth.log an, noch existiert die Datei /etc/syslog.conf.

Der last Befehl spuckt mir bei ftpuser in Gruppe ftpuser nur meine SSH Verbindung aus, nicht die SFTP Verbindung:
Code:
ec2-user pts/0        XXX.XXX.XXX.XXX     Tue Jan 10 08:14   still logged in   
reboot   system boot  4.4.35-33.55.amz Tue Jan 10 08:11 - 08:53  (00:42)    

wtmp begins Tue Jan 10 08:11:14 2017

Wenn ich den ftpuser der Gruppe sftponly zuweise und eine Verbindung nicht zustande kommt, leider das selbe Ergebnis.
 
Warum wird noch ein FTP-Server installiert, wenn du FTP-Funktionalität über SSH bereitstellen willst?
Recht hast du! Habe die Zeile entfernt und mit frischem System funktioniert es trotzdem wunderbar, da SSH. Danke!

Bezüglich des Hinweises von marce wegen den Verzeichnisrechten...Was sagt die Ausgabe von:
Code:
ls -al /mnt

Code:
drwxr-xr-x  3 root root 4096 Jan 10 08:15 .
dr-xr-xr-x 25 root root 4096 Jan 10 08:11 ..
drwxrwxrwx  1 root root    0 Jan  1  1970 s3bucket
 
Okay...
habe herausgefunden, dass es an der Zeile ChrootDirectory liegt. Kommentiere ich diese aus, kann ich mich einloggen. Ich habe versucht den Pfad auf irgendeinen anderen zu ändern (auch /home/ftpuser), aber sobald ChrootDirectory drin ist, kann ich mich nicht mehr einloggen.

Ideen bitte =)
 
Ideen bitte =)

Das chroot-Verzeichnis muß root gehören (also in deinem Fall /mnt/s3bucket).
Deswegen ist SFTP (also FTP über SSH) nicht immer die beste Wahl, weil mit Einschränkungen verbunden.
Es kommt halt immer auch auf den beabsichtigten Einsatzzweck an, oft wäre der bessere Weg dann ein eigener FTP-Daemon. Da kannst du dann viel genauer die Rechtevergabe bewerkstelligen.
 
Wenn du beim Chrooted-Krempel nicht mit irgendwelchen dahingefrickelten Umgebungsverzeichnissen rumhantieren möchtest, solltest du meines Wissens nach einfach das SFTP-Subsystem ändern:


Code:
Subsystem sftp internal-sftp

Match Group sftponly
    ForceCommand internal-sftp
    ChrootDirectory /path/to/dir
    ...

Gruß
Markus
 
Leider hat der Versuch mit ForceCommand vor dem Root-Verzeichnis zu schreiben nicht funktioniert.
Und /mnt/s3bucket gehört root.
Hatte es auch mal mit anderen Ordnern getestet (wie / oder /mnt oder /etc) geht leider alles nicht =(
 
Back
Top