사용자를 chroot할 수 없습니다.

사용자를 chroot할 수 없습니다.

내 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

내가 이것을 할 때, 나는~할 수 있다연결하면 sshsftp연결이 작동합니다. 문제는 특정 폴더로 루트를 지정하고 싶다는 것입니다.

> 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를 사용하는 파일 전송 세션의 경우 프로세스 내 sftp-server가 사용되는 경우 추가 환경 구성이 필요하지 않지만 로깅을 사용하는 세션은 /dev/log일부 운영 체제의 chroot 디렉터리 내부에 필요할 수 있습니다( sftp-server(8)자세한 내용은 참조).

dev디렉터리를 생성한 다음 거기에 스크립트를 복사 해야 합니다 /dev/MAKEDEV. 스크립트를 사용하여 필요한 장치 파일을 만듭니다.

대화형 사용자의 경우 chroot에 필요한 바이너리와 관련 라이브러리도 설치해야 합니다.

"in-process sftp-server"에 대한 참조는 블록 ForceCommand internal-sftp에서 사용되어야 함을 의미합니다 Match.

참고: 이전 SSH 구현에 대한 액세스 권한이 없기 때문에 발췌한 내용은 OpenSSH 7.5입니다.

관련 정보