Ngoài ra, có máy chủ SFTP nào khác có thể làm những gì tôi muốn không?
vâng, bạn có thể sử dụng proftpd
Chuẩn bị môi trường người dùng. Với ProFTPD, không cần phải cung cấp cho người dùng một vỏ hợp lệ.
# 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/
Để sử dụng các khóa công khai OpenSSH trong SFTPAuthorizedUserKeys, bạn phải chuyển đổi chúng sang định dạng RFC4716. Bạn có thể làm điều này với công cụ ssh-keygen:
# ssh-keygen -e -f user1.public.key > /vhosts/backup/user1/.sftp/authorized_keys
Thiết lập 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
Tạo tham số nhóm DH (Diffie-Hellman).
# openssl dhparam -out /etc/pki/proftpd/dhparam_2048.pem 2048
Cấu hình bất kỳ máy khách SFTP nào. Tôi đã sử dụng FileZilla
Nếu bạn chạy ProFPTD ở chế độ gỡ lỗi
# proftpd -n -d 3
Trong bảng điều khiển, bạn sẽ thấy một cái gì đó như sau
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
Và các dòng theo dõi trong /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
PS
Đường dẫn được định cấu hình cho tệp chứa các khóa được ủy quyền ( SFTPAuthorizedUserKeys ) có thể sử dụng biến % u , sẽ được nội suy với tên của người dùng được xác thực. Tính năng này hỗ trợ có các tệp theo người dùng của các khóa được ủy quyền nằm ở vị trí trung tâm, thay vì yêu cầu (hoặc cho phép) người dùng quản lý các khóa được ủy quyền của riêng họ. Ví dụ:
SFTPAuthorizedUserKeys file:/etc/sftp/authorized_keys/%u
Tôi muốn một số khách hàng có thể lưu trữ các tập tin trên máy chủ của tôi. Mỗi khách hàng sẽ không thể xem bất kỳ tệp nào của khách hàng khác. Và tôi không muốn xả rác máy chủ của mình với hàng tá tài khoản người dùng, vì vậy tôi muốn một giải pháp dễ quản lý để khách hàng chia sẻ tài khoản người dùng và vẫn không có quyền truy cập vào các tệp của nhau.
với ProFTPD cũng có thể. Bạn chỉ cần sửa đổi một chút cấu hình ban đầu của tôi
<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>
Và tạo một tài khoản ảo
# ftpasswd --passwd --file /etc/proftpd/sftp_users.passwd --sha512 --gid 99 --uid 99 --shell /sbin/nologin --name user1 --home /vhosts/backup
Đó là tất cả. Đối với mỗi tài khoản bổ sung, tất cả những gì bạn cần là thêm khóa công khai của anh ấy vào / etc / proftpd / sftp_ trái_keys
Lưu ý: tập tin phải chứa dòng mới cuối cùng! Nó quan trọng.