私はOpenSshサーバーをセットアップして、chrootされたsftpのみのユーザーと、chrootされていないsftpおよびsshユーザーを許可しようとしています。私の要約(コメントと空白行は削除されました)/ 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
これによって私が達成したこと:
Subsystem sftp
-行をコメントアウトされたバージョンに変更すると、「特権」ユーザーはsftpおよびsshを実行できますが、chrootされたユーザーはsftpを実行できなくなります。
上記の設定ファイルを使用すると、FileZillaからConnection closed by server with exitcode 127
、psftpからFatal: Received unexpected end-of-file from SFTP server
というエラーメッセージが表示されます。
これを修正する方法はありますか?
Subsystem sftp intenal-sftp
「inte r nal」である必要があります。
常に_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.
_
sftp
サブシステムを_internal-sftp
_に変更する必要があるのは、chroot内のすべてのファイル(つまり、ChrootDirectory
)をセットアップしたくない場合のみです。
例-特別なことを実行してユーザーにsftpを「強制」する独自のラッパーが必要な場合、コマンドとして_Subsystem sftp internal-sftp
_を呼び出す/実行できないため、_internal-sftp
_を使用することはできません。 。実際のシナリオでは、SFTPセッションの最後にrsync
を使用してSFTP経由でアップロードされたすべてのファイルを自動的にミラーリングするため、_internal-sftp
_は使用できませんが、sftp
にはデフォルトを使用する必要がありますサブシステムで、chrootに手動でデータを入力し、_/usr/libexec/sftp-server
_の実行が終了した後に_sftp-server
_(またはその他のパス)とrsync
を呼び出すだけです。
人々はマンページを読んで、バックグラウンドで何が起こっているのかを理解する必要があります。