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