
내 서버에 대한 새 SFTP 계정을 만들려고 합니다. 이 지침을 따를 때정확히, 그러면 모든 것이 잘 작동합니다.https://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
guestuser
을 통해 사용자 와 연결하고 sftp
, 내 홈 디렉터리를 찾아보고, 에서 한 수준 위로 이동할 수 incoming
있습니다 /sftp/guestuser
.
매개변수를 구현하는 대신 ChrootDirectory
의 값을 /etc/ssh/sshd_config
구체적으로 be로 변경할 수도 있습니다 . 따라서 하드코딩된 디렉토리 이름은 제대로 작동합니다./sftp/guestuser
%u
하지만 그 시점부터 내가 하는 일은 ChrootDirectory
내 sftpusers
그룹의 을 내 실제 웹 사이트 디렉터리로 변경하는 것뿐이라면 더 이상 해당 사용자에 대한 명령을 /var/www/www.example.com
통해 연결할 수 없습니다 . sftp
셸은 다음을 출력합니다.
원격 호스트에 의해 www.example.com에 대한 연결이 종료되었습니다. 패킷을 읽을 수 없습니다. 피어에 의해 연결이 재설정되었습니다.
나는 확실히 그랬다:
incoming
내/var/www/www.example.com
디렉토리 에 폴더 가 있는지 확인하세요./var/www/www.example.com
및 둘 다의 소유권을 설정합니다/var/www/www.example.com/incoming
.guestuser:sftpusers
/
다음을 수행하여 사용자의 홈 디렉토리를 설정해 보았습니다.usermod guestuser -d /
/sftp/guestuser
(작동했던 디렉토리)는 의 소유권을 갖고 있으므로 의 root:root
권한이 /var/www
켜져 있다는 사실은 root:root
중요하지 않습니다(?)
새 SFTP 사용자의 홈 디렉터리를 변경할 수 없는 이유는 무엇입니까?
업데이트
디렉토리를 다음으로 변경할 수 있습니다.
/sftp
/
/var
/var/www
그것들은 모두 작동합니다. 하지만 아래로 한 번 더 들어가 /var/www
자마자 /var/www/test
작동하지 않습니다. 원래 디렉토리 이름인 에서 점을 제거해 보았지만 www.example.com
아무런 차이가 없었습니다.
/sftp/guestuser/incoming
또한 작동했기 때문에 하위 디렉터리 수준 수에 대한 제한도 아닙니다 . 새 디렉토리로 테스트 /web/www.example.com
하지 않았습니다.
답변1
좋아, 원인을 정확히 찾아낼 수 있었어. ChrootDirectory
사용자에 대해 내가 정의한 디렉토리는 의 소유여야 합니다 root
.
내 사용자가 콘텐츠를 업로드할 수 있도록 하려면(물론 루트 소유의 디렉터리에서는 업로드할 수 없음) 거기에 하위 디렉터리를 만들고 매개변수를 통해 해당 디렉터리를 사용자의 홈으로 설정해야 합니다 -d
. 사용자를 생성하거나 편집할 때.
ChrootDirectory
어느 시점에서든 FTP를 시도하는 사용자가 소유권을 갖도록 소유권이 변경되면 broken pipe
메시지가 다시 나타납니다. 소유권을 다시 으로 변경하면 root
사용자가 다시 연결할 수 있습니다.