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는 사용자의 홈 디렉터리일 수 없지만 최소한 한 수준 위에 있어야 합니다.이 요구 사항은 이전 버전보다 높습니다 sshd. 누군가 chroot 감옥에서 탈출할 수 있는 새로운 방법을 발견한 후에는 이렇게 되어야 했습니다. 새로운 요구 사항으로 인해 이 이스케이프 방법을 사용할 수 없게 됩니다.

두 가지 가능한 해결책에 대해서는 다른 질문에서 내 대답을 참조하십시오.https://unix.stackexchange.com/a/542507/258991

답변3

연결과 관련된 오류가 있는지 로그를 확인하세요. 이를 확인하는 쉬운 방법은 다음 명령을 사용하는 것입니다.

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

제 경우에는 홈 디렉터리 손실 로그가 문제를 식별하는 데 큰 도움이 되었습니다.

관련 정보