다른 tcp 포트와 sftp 하위 시스템에 대한 다음 구성을 사용하여 자체 sshd 구성을 사용하여 두 번째 sshd systemd 서비스를 구성했습니다.
Match Group sftponly
ChrootDirectory /srv/%u
AllowTcpForwarding no
ForceCommand internal-sftp
PubkeyAuthentication yes
PasswordAuthentication no
PermitTunnel no
AllowAgentForwarding no
X11Forwarding no
sftponly 그룹에서 생성한 사용자는 다음과 같습니다.
uid=1001(sftpuser) gid=1001(sftponly) groups=1001(sftponly)
chroot의 디렉토리 트리는 다음과 같습니다:
drwxr-xr-x 3 root root 22 Aug 27 15:43 /srv
drwxr-xr-x 4 root root 34 Aug 27 18:27 /srv/sftpuser
drwx------ 2 sftpuser sftponly 29 Aug 27 15:43 /srv/sftpuser/.ssh
-rw-r--r-- 1 sftpuser sftponly 398 Aug 27 15:43 /srv/sftpuser/.ssh/authorized_keys
개인 키를 사용하여 성공적으로 SFTP를 실행할 수 있지만 사용자의 /srv/%u chroot 디렉터리에 파일을 만들 수 없습니다.
sftp> ls -al
drwxr-xr-x 3 root root 18 Aug 27 16:38 .
drwxr-xr-x 3 root root 18 Aug 27 16:38 ..
drwx------ 2 sftpuser sftponly 29 Aug 27 13:43 .ssh
sftp> mkdir one
Couldn't create directory: Permission denied
sftp>
내가 할 때chown sftpuser /srv/sftpuser활성 SFTP 세션으로 돌아가면 파일을 생성할 수 있지만 로그아웃하면 /srv/%u
루트가 소유하도록 디렉터리를 변경할 때까지 더 이상 SFTP에 로그인할 수 없습니다.
Connection to 192.168.1.110 closed by remote host.
Connection closed
물론 /srv/%u
sftpuser(/srv/sftpuser)가 소유한 디렉토리 내에 다른 디렉토리를 생성할 수 있지만 이것이 chroot에 대한 유일한 솔루션입니까? 사용자가 파일을 직접 변경/업로드할 수 없는 이유는 무엇입니까 /srv/%u
?
기타 질문 - 시스템의 다른 사용자가 sftp용으로만 구성된 사용자 정의 sshd를 사용하는 것을 방지하는 방법은 무엇입니까? 위의 줄을 Subsystem
사용자 정의 두 가지 옵션으로 설정 하면 다음과 같습니다 .sshd_config_sftponly
PubkeyAuthentication
PasswordAuthentication
아니요sshd 데몬을 다시 시작하면 일반 시스템 사용자는 해당 사용자 정의 sshd 포트를 사용하여 비밀번호로 계속 로그인할 수 있습니다.
답변1
sftpuser가 소유한 /srv/%u(/srv/sftpuser) 내에 다른 디렉토리를 생성할 수 있지만 이것이 chroot에 대한 유일한 솔루션입니까?
# man sshd_config | col -b | sed -n '/^ *ChrootDirectory/,/^ *$/{/^ *$/q;p}' | \
fmt -w72 | sed 's/^/ /'
ChrootDirectory
Specifies the pathname of a directory to chroot(2)
to after authentication. At session startup sshd(8)
checks that all components of the pathname are root-owned
directories which are not writable by any other user
or group. After the chroot, sshd(8) changes the working
directory to the user's home directory. Arguments to
ChrootDirectory accept the tokens described in the
TOKENS section.
분명히하자 –경로 이름의 모든 구성 요소는 루트가 소유합니다.! 그래서 당신은 이것을 할 수 있습니다 :
# man sftp-server | col -b | sed -n '/^ *\-d/,/^ *$/{/^ *$/q;p}' | \
fmt -w72 | sed 's/^/ /'
-d start_directory
specifies an alternate starting directory for users.
The pathname may contain the following tokens that
are expanded at runtime: %% is replaced by a literal
'%', %d is replaced by the home directory of the user
being authenticated, and %u is replaced by the username
of that user. The default is to use the user's home
directory. This option is useful in conjunction with
the sshd_config(5) ChrootDirectory option.