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


10

ディレクトリを共有するように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行)をコメント化すると、正しくダウンロードされます。


一致オプションの1つのみを指定してみましたか?実際のSFTPクライアントを使用するとどうなりますか?通常のSSHクライアント(例:sshWindowsのPuTTY)を使用して接続できますか?OpenSSHのどのバージョンを使用していますか?
ダニエルベック

回答:


7

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


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

Subsystem sftp internal-sftp

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

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

これらはデフォルトでアクティブになっています。


サブシステムの行を自分のものに置き換える(およびディレクトリのアクセス権を設定する)と、エラー文字列が消えますが、クライアントプログラムが「ハング」して、必要なファイルがダウンロードされません(ルート資格情報を使用してダウンロードできます)。sshd出力をより詳細にする方法はありますか?
エミリアーノ2011

構成アイテムを1つずつ順番に追加してみて、接続してオプションに問題があるかどうか、またはオプションの組み合わせかどうかをテストします。あなたはいくつかの出力を持っているはずです/var/log/secure、少なくともそれが私のシステムでそれを得る場所です。
Daniel Beck

LogLevelディレクティブを使用してログインレベルを上げました。で文字列を読むことができます/var/log/messages。私は次のことを持っている:Failed none for ftp [...]続くAccepted password for ftp [...]User child is on pid 7658。クライアントがハングしてタイムアウトになる
Emiliano

@happy_emiその情報を質問に追加することを検討してください。
ダニエルベック

これは、ディレクトリのアクセス許可の問題のようです。sshd_config大丈夫だった。
Emiliano
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.