GNU/Linux >> LINUX-Kenntnisse >  >> Linux

SFTP mit Chroot abhängig vom öffentlichen Schlüssel des verbindenden Benutzers

der chroot=... funktioniert nicht.

Nein, in der Handbuchseite für sshd steht nichts dergleichen , das das Format von authorized_keys beschreibt Datei.

Wenn Sie chroot in command= einfügen würden , könnten Sie internal-sftp nicht verwenden , da es sich um eine Substitution des internen Funktionsaufrufs innerhalb von sshd handelt .

Der empfohlene Weg ist, mehr Benutzer einzurichten, wenn Sie eine Trennung benötigen. Sie können auch Argumente für internal-sftp verwenden , wenn Sie keine strikte Trennung benötigen (z. B. nur unterschiedliche Arbeitsverzeichnisse), wie z. B.

command="internal-sftp -d /backup/client-1/data" ssh-rsa (key1)

Es ist auch möglich, die Anzahl der Anfragen mit -P zu begrenzen Option wie in der Handbuchseite für sftp-server .


Gibt es alternativ andere SFTP-Server, die tun können, was ich will?

Ja, Sie können proftpd verwenden

Bereiten Sie die Benutzerumgebung vor. Mit ProFTPD muss dem Benutzer keine gültige Shell gegeben werden.

# useradd -m -d /vhosts/backup/user1/ -s /sbin/nologin user1
# passwd --lock user1
Locking password for user user1.
passwd: Success

# mkdir /vhosts/backup/user1/.sftp/
# touch /vhosts/backup/user1/.sftp/authorized_keys

# chown -R user1:user1 /vhosts/backup/user1/
# chmod -R 700 /vhosts/backup/user1/

Um öffentliche OpenSSH-Schlüssel in einem SFTPAuthorizedUserKeys zu verwenden, müssen Sie sie in das RFC4716-Format konvertieren. Sie können dies mit dem ssh-keygen-Tool tun:

# ssh-keygen -e -f user1.public.key > /vhosts/backup/user1/.sftp/authorized_keys

ProFTPD einrichten

ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer off

LoadModule mod_tls.c
LoadModule mod_sftp.c
LoadModule mod_rewrite.c

TLSProtocol TLSv1 TLSv1.1 TLSv1.2

# Disable default ftp server
Port 0

UseReverseDNS off
IdentLookups off

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

# PersistentPasswd causes problems with NIS/LDAP.
PersistentPasswd off

MaxInstances 30

# Set the user and group under which the server will run.
User nobody
Group nobody

# Normally, we want files to be overwriteable.
AllowOverwrite                  on

TimesGMT off
SetEnv TZ :/etc/localtime

<VirtualHost sftp.example.net>
    ServerName "SFTP: Backup server."
    DefaultRoot ~
    Umask 002
    Port 2121

    RootRevoke on

    SFTPEngine on
    SFTPLog /var/log/proftpd/sftp.log

    SFTPHostKey /etc/ssh/ssh_host_rsa_key
    SFTPHostKey /etc/ssh/ssh_host_dsa_key
    SFTPDHParamFile /etc/pki/proftpd/dhparam_2048.pem
    SFTPAuthorizedUserKeys file:~/.sftp/authorized_keys

    SFTPCompression delayed
    SFTPAuthMethods publickey
</VirtualHost>

<Global>
    RequireValidShell off
    AllowOverwrite yes

    DenyFilter \*.*/

    <Limit SITE_CHMOD>
        DenyAll
    </Limit>
</Global>

LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth    "%v [%P] %h %t \"%r\" %s"
ExtendedLog /var/log/proftpd/access.log read,write

Erstellen Sie DH (Diffie-Hellman)-Gruppenparameter.

# openssl dhparam -out /etc/pki/proftpd/dhparam_2048.pem 2048

Konfigurieren Sie einen beliebigen SFTP-Client. Ich habe FileZilla

verwendet

Wenn Sie ProFPTD im Debug-Modus ausführen

# proftpd -n -d 3 

In der Konsole sehen Sie etwa Folgendes:

2016-02-21 22:12:48,275 sftp.example.net proftpd[50511]: using PCRE 7.8 2008-09-05
2016-02-21 22:12:48,279 sftp.example.net proftpd[50511]: mod_sftp/0.9.9: using OpenSSL 1.0.1e-fips 11 Feb 2013
2016-02-21 22:12:48,462 sftp.example.net proftpd[50511] sftp.example.net: set core resource limits for daemon
2016-02-21 22:12:48,462 sftp.example.net proftpd[50511] sftp.example.net: ProFTPD 1.3.5a (maint) (built Sun Feb 21 2016 21:22:00 UTC) standalone mode STARTUP
2016-02-21 22:12:59,780 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): mod_cap/1.1: adding CAP_SETUID and CAP_SETGID capabilities
2016-02-21 22:12:59,780 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): SSH2 session opened.
2016-02-21 22:12:59,863 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): Preparing to chroot to directory '/vhosts/backup/user1'
2016-02-21 22:12:59,863 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): Environment successfully chroot()ed
2016-02-21 22:12:59,863 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): USER user1: Login successful

Und die folgenden Zeilen in einer /var/log/sftp.log

2016-02-21 22:12:48,735 mod_sftp/0.9.9[50309]: sending acceptable userauth methods: publickey
2016-02-21 22:12:48,735 mod_sftp/0.9.9[50309]: public key MD5 fingerprint: c2:2f:a3:93:59:5d:e4:38:99:4b:fd:b1:6e:fc:54:6c
2016-02-21 22:12:48,735 mod_sftp/0.9.9[50309]: sending publickey OK
2016-02-21 22:12:59,789 mod_sftp/0.9.9[50309]: public key MD5 fingerprint: c2:2f:a3:93:59:5d:e4:38:99:4b:fd:b1:6e:fc:54:6c
2016-02-21 22:12:59,790 mod_sftp/0.9.9[50309]: sending userauth success
2016-02-21 22:12:59,790 mod_sftp/0.9.9[50309]: user 'user1' authenticated via 'publickey' method

P.S.

Der konfigurierte Pfad für eine Datei mit autorisierten Schlüsseln (SFTPAuthorizedUserKeys ) kann das %u verwenden Variable, die mit dem Namen des zu authentifizierenden Benutzers interpoliert wird. Diese Funktion unterstützt benutzerspezifische Dateien mit autorisierten Schlüsseln, die sich an einem zentralen Ort befinden, anstatt dass Benutzer ihre eigenen autorisierten Schlüssel verwalten müssen (oder ihnen erlauben). Zum Beispiel:

SFTPAuthorizedUserKeys file:/etc/sftp/authorized_keys/%u

Ich möchte, dass mehrere Clients Dateien auf meinem Server speichern können. Jeder Client sollte nicht in der Lage sein, die Dateien eines anderen Clients zu sehen. Und ich möchte meinen Server nicht mit Dutzenden von Benutzerkonten überladen, also hätte ich gerne eine einfach zu handhabende Lösung für die Clients, um ein Benutzerkonto zu teilen und trotzdem keinen Zugriff auf die Dateien des anderen zu haben.

mit ProFTPD ist es auch möglich. Sie müssen nur meine anfängliche Konfiguration ein wenig ändern

<VirtualHost sftp.example.net>
    ...   
    SFTPAuthorizedUserKeys file:/etc/proftpd/sftp_authorized_keys
    AuthUserFile /etc/proftpd/sftp_users.passwd

    CreateHome on 0700 dirmode 0700 uid 99 gid 99

    RewriteHome on
    RewriteEngine on
    RewriteLog /var/log/proftpd/rewrite.log
    RewriteCondition %m REWRITE_HOME
    RewriteRule (.*) /vhosts/backup/%u
</VirtualHost>

Und erstellen Sie ein virtuelles Konto

# ftpasswd --passwd --file /etc/proftpd/sftp_users.passwd --sha512 --gid 99 --uid 99 --shell /sbin/nologin --name user1 --home /vhosts/backup

Das ist alles. Für jedes weitere Konto müssen Sie lediglich seinen öffentlichen Schlüssel zu /etc/proftpd/sftp_authorized_keys

hinzufügen

Hinweis:Die Datei muss am Ende eine neue Zeile enthalten! Es ist wichtig.


Linux
  1. So richten Sie Linux-Chroot-Jails ein

  2. So aktualisieren Sie Homebrew mit Cron unter Mac OS

  3. Ersetzen Sie gitolite3-Benutzer durch git

  4. Verzeichnisse mit sftp hochladen?

  5. Die Authentifizierung des öffentlichen SSH-Schlüssels schlägt fehl, wenn „UsePAM“ auf „Nein“ gesetzt ist

So verwenden Sie die Public-Key-Authentifizierung mit SSH

So konfigurieren Sie den SFTP-Server mit Chroot in Debian 10

Erste Schritte mit GIT unter Linux

So erstellen Sie einen SFTP-Benutzer mit bestimmten Verzeichnisberechtigungen in Ubuntu 20.04

ssh-keygen Befehl erklärt mit Beispiel in Linux

Root-SSH-Anmeldung nur mit Public-Key-Authentifizierung zulassen