web-dev-qa-db-ja.com

LinuxでopenSSH SFTPサーバーをセットアップするにはどうすればよいですか?

ディレクトリを共有するようにsftp-serverを構成したいのですが、/etc/ssh/sshd_configを変更する方法がわかりません。

私の要件は:

1)ログインには証明書を使用せず、パスワードのみを使用します(つまり、認証にはパスワード方式を使用します)

2)ユーザー:ftp、パスワード:foo、共有ディレクトリ/ home/ftpでログインしたい。

3)時々、サーバーからファイルをダウンロードする必要があるアプリケーションがあります。フル稼働のクライアントでログインする必要はありません。

これまでのところ、/ etc/ssh/sshd_configに次の行を追加しました。

Protocol 2
Subsystem sftp /usr/libexec/sftp-server
Match User ftp
   ForceCommand internal-sftp
   ChrootDirectory /home/ftp

それ以外はすべてコメントされます。

/home/ftpは現時点では空のディレクトリです。

ルート認証情報を使用してファイルをダウンロードしようとするとアクセスは機能しますが、FTP認証情報を使用すると機能しません。ログインシェルを設定する必要がありますか?どういうわけか/ home/ftpに入力する必要がありますか?

編集:これは私のsshdログです:

subsystem request for sftp
debug1: subsystem: exec() internal-sftp
debug1: Forced command (config) 'internal-sftp '
debug2: fd 3 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug2: fd 8 setting O_NONBLOCK
debug1: Received SIGCHLD.
debug1: session_by_pid: pid 17613
debug1: session_exit_message: session 0 channel 0 pid 17613
debug2: channel 0: request exit-status confirm 0
debug1: session_exit_message: release channel 0
debug2: channel 0: write failed
debug2: channel 0: close_write
debug2: channel 0: send eow
debug2: channel 0: output open -> closed
debug2: channel 0: read<=0 rfd 9 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: send close
debug2: notify_done: reading
debug3: channel 0: will not send data after close
debug3: channel 0: will not send data after close
User child is on pid 17611
debug3: mm_request_receive entering

*クライアントはここでハングします(タイムアウトが発生するまで)*

繰り返しますが、「root」としてログインすると、ファイルが正しくダウンロードされます。構成ファイルの最後の3行(つまり、Match行と次の2行)をコメント化すると、正しくダウンロードされます。

10
Emiliano

/home/ftprootによって所有されており、そのグループと他のユーザーに書き込み権限がないことを確認する必要があります。 chmod 0755。ファイルを追加するには、ftpのサブディレクトリを追加する必要があります。


internal-sftpサブシステムも必要です。それ以外の場合は、/home/ftpに適切なchroot環境を提供する必要があります。

Subsystem sftp internal-sftp

パスワード以外のすべての種類のログインを禁止するには、次のように入力します。

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

これらはデフォルトで有効になっています。

7
Daniel Beck