내 SSH 서버는 4년 동안 잘 작동했기 때문에 사용자를 추가하고 특정 폴더에 chroot를 지정하고 싶습니다.
> useradd -m -c /home/thomas -s /bin/sh thomas
> passwd thomas
> chmod 755 /home/thomas
> chown root: /home/thomas
> service ssh restart
내가 이것을 할 때, 나는할 수 있는연결이 진행되고 ssh
연결 sftp
이 작동합니다. 문제는 특정 폴더로 루트를 지정하고 싶다는 것입니다.
> vim /etc/ssh/sshd_config
파일 끝에 다음을 추가합니다.
Match user thomas
ChrootDirectory /home/%u
이것만 추가하면 아무것도 바뀌지 않겠죠? 구성이 동일해야 하며 여전히 sftp에 연결하거나 사용할 수 있어야 합니다. 그래서 재부팅했고 service ssh restart
더 이상 sftp에 연결할 수 없습니다.
혹시라도:
root@xx:/etc/nginx/sites-enabled# /usr/sbin/sshd -v
sshd: illegal option -- v
OpenSSH_6.0p1 Debian-4+deb7u6, OpenSSL 1.0.1t 3 May 2016
usage: sshd [-46DdeiqTt] [-b bits] [-C connection_spec] [-c host_cert_file]
[-f config_file] [-g login_grace_time] [-h host_key_file]
[-k key_gen_time] [-o option] [-p port] [-u len]
root@xx:/etc/nginx/sites-enabled#
내가 뭘 잘못했나요?
답변1
설명서 sshd_config
에는 다음과 같은 내용이 나와 있습니다.
ChrootDirectory
사용자 세션을 지원하는 데 필요한 파일과 디렉터리를 포함 해야 합니다 . 대화형 세션의 경우 최소한 셸(일반적으로sh(1)
)과 기본/dev
노드(예null(4)
: ,zero(4)
,stdin(4)
,stdout(4)
및 장치 )stderr(4)
가 필요합니다.tty(4)
SFTP를 사용하는 파일 전송 세션의 경우 in-process sftp 서버를 사용하는 경우 추가 환경 구성이 필요하지 않지만 로깅을 사용하는 세션에는/dev/log
일부 운영 체제에서 chroot 디렉토리가 필요할 수 있습니다(참고sftp-server(8)
자료 참조).
dev
이 디렉토리를 생성하고 /dev/MAKEDEV
거기에 스크립트를 복사 해야 합니다 . 스크립트를 사용하여 필요한 장치 파일을 만듭니다.
대화형 사용자의 경우 chroot에 필요한 바이너리 및 관련 라이브러리도 설치해야 합니다.
"in-process sftp server"에 대한 참조는 ForceCommand internal-sftp
해당 서버가 블록에서 사용되어야 함을 의미합니다 Match
.
참고: 이 발췌문은 OpenSSH 7.5에서 발췌한 것입니다. 이전 SSH 구현에 대한 액세스 권한이 없기 때문입니다.