chroot 및 파일 생성 문제가 있는 sftp

chroot 및 파일 생성 문제가 있는 sftp

다른 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/%usftpuser(/srv/sftpuser)가 소유한 디렉토리 내에 다른 디렉토리를 생성할 수 있지만 이것이 chroot에 대한 유일한 솔루션입니까? 사용자가 파일을 직접 변경/업로드할 수 없는 이유는 무엇입니까 /srv/%u?

기타 질문 - 시스템의 다른 사용자가 sftp용으로만 구성된 사용자 정의 sshd를 사용하는 것을 방지하는 방법은 무엇입니까? 위의 줄을 Subsystem사용자 정의 두 가지 옵션으로 설정 하면 다음과 같습니다 .sshd_config_sftponlyPubkeyAuthenticationPasswordAuthentication아니요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.

관련 정보