chrootとnon-chroot sftpを設定するには?

chrootとnon-chroot sftpを設定するには?

chroot sftpユーザーとchrootではなくsftpユーザーとsshユーザーのみを許可するようにOpensshサーバーを設定しようとしています。私の/etc/ssh/sshd_config(コメントと空白行が削除された)の簡単なバージョンは次のとおりです。

Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp intenal-sftp
UsePAM yes
Match Group sftpusers
        ChrootDirectory /var/sftp/%u
        ForceCommand internal-sftp

私がこの仕事を通して得たもの:

  • sftupsersグループのユーザーはファイルをディレクトリにSFTPできますが、ログインすることはできません。ご確認ください。
  • sftpusersに属していないユーザーはSSH経由でログインできます。確認してください。
  • sfttpusersにないユーザーは、次のことができます。いいえsftpファイル。こんな。

Subsystem sftp-lineをコメントアウトされたバージョンに変更すると、「権限のある」ユーザーはsftpとsshを使用できますが、chrootユーザーはsftpを使用できなくなります。

上記の設定ファイルを使用すると、Connection closed by server with exitcode 127FileZillaとpsftpからFatal: Received unexpected end-of-file from SFTP serverエラーメッセージが表示されます。

この問題を解決する方法を知っていますか?

答え1

Subsystem sftp intenal-sftp

「内部」でなければなりません。アル字型ナル」。

答え2

常に配置する必要はありませんSubsystem sftp internal-sftp。これは大きな誤解です。

何を定義しますかSubsystem?チェックしてみましょうsshd_config(5)

 Subsystem
         Configures an external subsystem (e.g. file transfer daemon).
         Arguments should be a subsystem name and a command (with optional
         arguments) to execute upon subsystem request.

         The command sftp-server implements the SFTP file transfer
         subsystem.

         Alternately the name internal-sftp implements an in-process SFTP
         server.  This may simplify configurations using ChrootDirectory
         to force a different filesystem root on clients.

         By default no subsystems are defined.

chrootのすべてのファイルを設定したくない場合は、sftpサブシステムを変更するだけです(例:internal-sftpChrootDirectory

Subsystem sftp internal-sftpたとえば、特別なタスクを実行するための独自のラッパーを持ち、ユーザーがsftpを使用するように「強制」しようとすると、コマンドで呼び出す/実行できないため、これを持つことはできず、internal-sftp内部にOpenSSH魔法があります。実際のケースでは、rsyncSFTP経由でアップロードされたすべてのファイルがSFTPセッションの終わりに自動的にミラーリングされるようにしたいので、これは利用できませんが、サブシステムのデフォルト値を使用する必要があり、internal-sftpchrootsftpを手動で入力し、呼び出し/usr/libexec/sftp-server(または他の任意のパス)とrsync最後の後続のsftp-server実行。

盲目的にアドバイスに従うのではなく、マニュアルページを読んで、後で何が起こっているのかを理解する必要があります。

関連情報