chroot sftpユーザーの "client_loop:切断を送信:壊れたパイプ"、パスワードが正しいですか?

chroot sftpユーザーの

私はsftp用のchrootを設定し、チュートリアルの組み合わせを使用しました(ソース1ソース2)次の構成で終了します/etc/ssh/sshd_config

Match Group sftpusers
      ForceCommand internal-sftp
      ChrootDirectory /var/sftp/
      PermitTunnel no
      AllowAgentForwarding no
      AllowTcpForwarding no
      X11Forwarding no

sftpデフォルトフォルダ/var/sftpとユーザーは次のように作成されます。

groupadd sftpusers

adduser myuser01
mkdir -p /var/sftp/myuser01
usermod -a -G sftpusers myuser01
chown myuser01:myuser01 /var/sftp/myuser01
systemctl restart sshd

/var/sftpログインしようとすると、ログインの仕組みを示すこのフォルダが表示されます。

ユーザーがそのフォルダにあることを望むので、その行の下/var/sftp/<userid>に次の設定を設定してみました。sshd_configMatch Group

ChrootDirectory /var/sftp/%u

client_loop: send disconnect: Broken pipeこれにより、ログイン時にエラーが発生します。ssh_configマニュアルページによると、変数は次のように許可されなければなりません。

ChrootDirectory は %%、%h、%u タグを受け入れます。

どんなアイデアがありますか?

環境:

  • オペレーティングシステム:Ubuntu 18.04.4 LTS
  • sshd: OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 2017年12月7日

ベストアンサー1

chown myuser01:myuser01 /var/sftp/myuser01
...
ChrootDirectory /var/sftp/%u

OpenSSH SSHサーバーChroot ディレクトリディレクティブでは、chrootディレクトリとその親ディレクトリをルートが所有する必要があります。

Chroot ディレクトリ
認証後にchroot(2)のディレクトリパス名を指定します。セッションの開始時に、sshd(8)は、パス名のすべてのコンポーネントが他のユーザーまたはグループが書き込めないルートが所有するディレクトリであることを確認します。chrootの後、sshd(8)は作業ディレクトリをユーザーのホームディレクトリに変更します。

これはテストしていませんでしたが、考える関連ユーザーの行を含むchroot環境でファイルを生成すると、/etc/passwdsshdはその行のhomeフィールドをchroot環境内のユーザーのホームディレクトリとして扱います。これが機能したら、それを使用してchrootディレクトリではなく作業ディレクトリからユーザーセッションを開始できます。

おすすめ記事