chroot=...
は機能しません。
いいえ、sshd
のマニュアル ページにはそのようなものはありません。 、 authorized_keys
のフォーマットを記述 ファイル。
chroot を command=
に入れる場合 、 internal-sftp
を使用できません 、 sshd
内の内部関数呼び出しの置換であるため .
分離が必要な場合は、より多くのユーザーを設定することをお勧めします。 internal-sftp
への引数を使用することもできます 、厳密に分離する必要がない場合 (たとえば、作業ディレクトリが異なるだけ)、
command="internal-sftp -d /backup/client-1/data" ssh-rsa (key1)
-P
を使用してリクエストの量を制限することも可能です sftp-server
のマニュアルページのオプション .
<ブロック引用>
または、私が望むことを実行できる他の SFTP サーバーはありますか?
はい、proftpd を使用できます
ユーザー環境を準備します。 ProFTPD では、有効なシェルをユーザーに提供する必要はありません。
# 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/
SFTPAuthorizedUserKeys で OpenSSH 公開鍵を使用するには、それらを RFC4716 形式に変換する必要があります。これは ssh-keygen ツールで行うことができます:
# ssh-keygen -e -f user1.public.key > /vhosts/backup/user1/.sftp/authorized_keys
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
DH (Diffie-Hellman ) グループ パラメータを作成します。
# openssl dhparam -out /etc/pki/proftpd/dhparam_2048.pem 2048
SFTP クライアントを構成します。 FileZilla を使用しました
ProFPTD をデバッグ モードで実行する場合
# proftpd -n -d 3
コンソールには次のようなものが表示されます
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
/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
追伸
承認されたキー (SFTPAuthorizedUserKeys) を含むファイルの構成済みパス ) %u を使用できます この変数は、認証されているユーザーの名前で補間されます。この機能は、ユーザーが独自の承認済みキーを管理することを要求 (または許可) するのではなく、中央の場所に常駐する承認済みキーのユーザーごとのファイルを持つことをサポートします。例:
SFTPAuthorizedUserKeys file:/etc/sftp/authorized_keys/%u
<ブロック引用> 複数のクライアントがサーバーにファイルを保存できるようにしたいと考えています。各クライアントは、他のクライアントのファイルを表示できないようにする必要があります。サーバーに何十ものユーザー アカウントを散らかしたくないので、クライアントがユーザー アカウントを共有し、お互いのファイルにアクセスできないようにするための簡単に管理できるソリューションが必要です。
ProFTPD を使えばそれも可能です。初期設定を少し変更する必要があります
<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>
仮想アカウントを 1 つ作成
# ftpasswd --passwd --file /etc/proftpd/sftp_users.passwd --sha512 --gid 99 --uid 99 --shell /sbin/nologin --name user1 --home /vhosts/backup
それで全部です。追加のアカウントごとに必要なのは、彼の公開鍵を /etc/proftpd/sftp_authorized_keys に追加することだけです
注:ファイルの最後に改行を含める必要があります。重要です。