GNU/Linux >> Belajar Linux >  >> Linux

SFTP dengan chroot bergantung pada kunci publik untuk menghubungkan pengguna

chroot=... tidak berfungsi.

Tidak, tidak ada yang seperti itu di halaman manual untuk sshd , menjelaskan format authorized_keys berkas.

Jika Anda akan memasukkan chroot ke command= , Anda tidak akan dapat menggunakan internal-sftp , karena ini adalah substitusi panggilan fungsi internal di dalam sshd .

Cara yang disarankan adalah menyiapkan lebih banyak pengguna, jika Anda memerlukan pemisahan. Anda juga dapat menggunakan argumen untuk internal-sftp , jika Anda tidak memerlukan pemisahan yang ketat (misalnya hanya direktori kerja yang berbeda), seperti

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

Dimungkinkan juga untuk membatasi jumlah permintaan menggunakan -P opsi seperti pada halaman manual untuk sftp-server .


Alternatifnya, apakah ada server SFTP lain yang dapat melakukan apa yang saya inginkan?

ya, Anda bisa menggunakan proftpd

Siapkan lingkungan pengguna. Dengan ProFTPD tidak perlu memberikan shell yang valid kepada pengguna.

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

Untuk menggunakan kunci publik OpenSSH di SFTPAuthorizedUserKeys, Anda harus mengonversinya ke format RFC4716. Anda dapat melakukannya dengan alat ssh-keygen:

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

Siapkan 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

Buat parameter grup DH (Diffie-Hellman ).

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

Konfigurasikan klien SFTP apa pun. Saya telah menggunakan FileZilla

Jika Anda menjalankan ProFPTD dalam mode debug

# proftpd -n -d 3 

Di konsol Anda akan melihat sesuatu seperti berikut

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

Dan baris berikut di /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.

Jalur yang dikonfigurasi untuk file yang berisi kunci resmi (SFTPAuthorizedUserKeys ) dapat menggunakan %u variabel, yang akan diinterpolasi dengan nama pengguna yang diautentikasi. Fitur ini mendukung memiliki file per pengguna dari kunci resmi yang berada di lokasi pusat, daripada mengharuskan (atau mengizinkan) pengguna untuk mengelola kunci resmi mereka sendiri. Misalnya:

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

Saya ingin beberapa klien dapat menyimpan file di server saya. Setiap klien seharusnya tidak dapat melihat file klien lainnya. Dan saya tidak ingin mengotori server saya dengan lusinan akun pengguna, jadi saya ingin solusi yang mudah dikelola bagi klien untuk berbagi akun pengguna dan tetap tidak memiliki akses ke file masing-masing.

dengan ProFTPD itu mungkin juga. Anda hanya perlu sedikit memodifikasi konfigurasi awal saya

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

Dan buat satu akun virtual

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

Itu saja. Untuk setiap akun tambahan, Anda hanya perlu menambahkan kunci publiknya ke /etc/proftpd/sftp_authorized_keys

Catatan:file harus berisi baris baru pada akhirnya! Ini penting.


Linux
  1. Cara mengatur jail chroot Linux

  2. Bagaimana menghubungkan ke server ssh dengan plink dan cmd dan kunci publik

  3. Ssh – Masih Mendapatkan Prompt Kata Sandi Dengan Ssh Dengan Otentikasi Kunci Publik?

  1. Nama Pengguna Dan Host Di Kunci Publik Di Ssh-copy-id?

  2. Ganti pengguna gitolite3 dengan git

  3. Mengunggah direktori dengan sftp?

  1. Gpg:Dibatalkan Oleh Pengguna?

  2. Otentikasi kunci publik SSH gagal saat UsePAM diatur ke no

  3. Chroot SFTP - Memungkinkan untuk mengizinkan pengguna menulis ke direktori saat ini (chroot).