GNU/Linux >> Znalost Linux >  >> Linux

SFTP s chroot v závislosti na veřejném klíči připojujícího se uživatele

chroot=... nefunguje.

Ne, v manuálové stránce pro sshd nic takového není , popisující formát authorized_keys soubor.

Pokud byste vložili chroot do command= , nebudete moci použít internal-sftp , protože jde o náhradu interního volání funkce uvnitř sshd .

Doporučený způsob je nastavit více uživatelů, pokud potřebujete oddělení. Můžete také použít argumenty pro internal-sftp , pokud nepotřebujete striktní oddělení (například jen různé pracovní adresáře), jako je

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

Je také možné omezit počet požadavků pomocí -P možnost jako v manuálové stránce pro sftp-server .


Případně existují jiné servery SFTP, které mohou dělat, co chci?

ano, můžete použít proftpd

Připravte uživatelské prostředí. S ProFTPD není potřeba dávat uživateli platný shell.

# 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/

Abyste mohli používat veřejné klíče OpenSSH v klíčích SFTPAuthorizedUserKeys, musíte je převést do formátu RFC4716. Můžete to udělat pomocí nástroje ssh-keygen:

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

Nastavení ProFTPD

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

Vytvořte parametry skupiny DH (Diffie-Hellman).

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

Nakonfigurujte libovolného klienta SFTP. Použil jsem FileZilla

Pokud spustíte ProFPTD v režimu ladění

# proftpd -n -d 3 

V konzole uvidíte něco jako následující

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

A následující řádky v souboru /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.

Konfigurovaná cesta k souboru obsahujícímu autorizované klíče (SFTPAuthorizedUserKeys ) můžete použít %u proměnná, která bude interpolována se jménem autentizovaného uživatele. Tato funkce podporuje umístění souborů autorizovaných klíčů pro jednotlivé uživatele na centrálním místě, než aby vyžadovali (nebo umožňovali) uživatelům spravovat své vlastní autorizované klíče. Například:

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

Chci, aby několik klientů mohlo ukládat soubory na můj server. Každý klient by neměl mít možnost vidět soubory žádného jiného klienta. A nechci zasypávat svůj server desítkami uživatelských účtů, takže bych chtěl pro klienty snadno ovladatelné řešení, aby sdíleli uživatelský účet a přesto neměli přístup k souborům toho druhého.

s ProFTPD je to také možné. Potřebujete jen trochu upravit moji počáteční konfiguraci

<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>

A vytvořte si jeden virtuální účet

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

To je vše. Pro každý další účet stačí přidat jeho veřejný klíč do /etc/proftpd/sftp_authorized_keys

Poznámka:soubor musí na konci obsahovat nový řádek! Je to důležité.


Linux
  1. Názvy uživatelů a hostitelů ve veřejném klíči na Ssh-copy-id?

  2. Oprávnění souborů v Linuxu s příkladem

  3. Povolit přihlášení root ssh pouze s ověřováním pomocí veřejného klíče

  1. jak aktualizovat homebrew pomocí Cronu na Mac OS

  2. Nahraďte uživatele gitolite3 za git

  3. Nahrávání adresářů pomocí sftp?

  1. Jak nainstalovat Nextcloud s ISPConfig 3.1

  2. Jak nastavit linuxové chroot vězení

  3. Chroot SFTP – Umožňuje uživateli povolit zápis do aktuálního (chroot) adresáře