web-dev-qa-db-ja.com

chrootされたsftpとchrootされていないsftpを設定するにはどうすればよいですか?

私は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

これによって私が達成したこと:

  • Sftupsersグループのユーザーは、ファイルをディレクトリにsftpできますが、ログインできません。確認してください。
  • Sftpusersに属していないユーザーは、ssh経由でログインできます。小切手。
  • Sfttpusersに含まれていないユーザーは、not 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というエラーメッセージが表示されます。

これを修正する方法はありますか?

3
fpet
Subsystem sftp intenal-sftp

「inte r nal」である必要があります。

2
Kenster

常に_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を呼び出すだけです。

人々はマンページを読んで、バックグラウンドで何が起こっているのかを理解する必要があります。

0
Jiri B