SFTPエラー解決策:パケットを読み取れません:ピアによる接続のリセット?

SFTPエラー解決策:パケットを読み取れません:ピアによる接続のリセット?

CentOSにsftpをインストールし、新しいグループを追加しました。

groupadd sftp

新しいユーザーが実際に作成されました。

useradd -m sftp_user_1 -s /sbin/nologin -g sftp

パスワードが実際に作成されました。

passwd sftp_user_1

所有者が変わりました:

chown root /home/sftp_user_1

権利を変更します。

chmod 750 /home/sftp_user_1

所有者が変わりました:

chown sftp_user_1:sftp /home/sftp_user_1

ユーザーとグループを確認しました。

id sftp_user_1

[root@centos-24 home]# id sftp_user_1
uid=1000(sftp_user_1) gid=1000(sftp) groups=1000(sftp)

/etc/ssh/sshd_config ファイルが実際に変更されました。

Subsystem sftp /usr/libexec/openssh/sftp-server

に変更されます

Subsystem sftp internal-sftp

ファイルの末尾に追加するかどうか

Match Group sftp
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /home/%u
ForceCommand internal-sftp

サービスを再起動するかどうか

systemctl restart sshd

SFTPサーバーに接続しようとするとエラーが返されます。

[root@centos-24 home]# sftp sftp_user_1@localhost
sftp_user_1@localhost's password:
packet_write_wait: Connection to ::1 port 22: Broken pipe
Couldn't read packet: Connection reset by peer

この問題をどのように解決しますか?

答え1

この段階で

chown root /home/sftp_user_1

SFTPに変更してグループ化する必要があります。

chown root:sftp /home/sftp_user_1

/etc/ssh/sshd_config ファイルに存在するため

Match Group sftp

答え2

クライアントsftpがリモート側で接続を突然終了したと報告しました。

この場合に最適です。サーバー側ログの読み取り:リモートサーバーが接続を終了した場合は、サーバーログにそのように表示する必要があります。通常、接続も終了します。なぜサーバーはこうしました。

この特定のケースで問題を再現するときに見えるものは次のとおりです。

Sep 23 14:53:52 centos7 sshd[1800]: Accepted password for sftp_user_1 from ::1 port 52166 ssh2
Sep 23 14:53:52 centos7 sshd[1800]: pam_unix(sshd:session): session opened for user sftp_user_1 by (uid=0)
Sep 23 14:53:52 centos7 sshd[1800]: fatal: bad ownership or modes for chroot directory "/home/sftp_user_1" [postauth]
Sep 23 14:53:52 centos7 sshd[1800]: pam_unix(sshd:session): session closed for user sftp_user_1

chrootディレクトリの所有権またはモードが正しくありません/home/sftp_user_1「だからsshdあなたの権限は満足できませんChrootDirectory。あなたの場合、chrootユーザーのホームディレクトリと同じです。

sshd_config(5)マニュアルページによると、設定パラメータが参照するディレクトリはChrootDirectoryルートが所有し、他の人が書き込めないようにする必要があります。

Chroot ディレクトリ

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

つまり、ChrootDirectoryはユーザーのホームディレクトリにすることはできませんが、少なくとも1つのレベルを超える必要があります。この要件は以前のバージョンよりも高いですsshd。誰かが chroot 刑務所から脱出する新しい方法を発見した後はこうなりました。新しい要件により、このエスケープ方法は使用できなくなります。

2つの可能な解決策については、別の質問の私の答えを参照してください。https://unix.stackexchange.com/a/542507/258991

答え3

接続に関連するエラーがないかログを確認してください。これを確認する簡単な方法は、次のコマンドを使用することです。

grep -i username /var/log/auth.log
grep -i username /var/log/secure.log

私の場合、ホームディレクトリの損失ログは問題を特定するのに非常に役立ちました。

関連情報