OpenSSH - sshd_config - 동일한 사용자로 sftp-chroot 및 일반 SSH 로그인 허용

OpenSSH - sshd_config - 동일한 사용자로 sftp-chroot 및 일반 SSH 로그인 허용

헛소리는 아니길 바라지만 이에 대한 답을 찾을 수 없습니다... 표면적으로는 똑같은 것처럼 보이지만 매우 오래되었고 그 안에 있는 유일한 대답은 실제 질문에 대한 답이 아닌 것을 발견했습니다. sftp에 대해 사용자를 chrooted로 설정하지만 사용자가 SSH에 로그인하도록 허용합니다.

'sftp_users' 그룹의 사용자를 위해 sftp를 통해 작동하는 ChrootDirectory 환경을 성공적으로 설정했습니다. 모든 적절한 권한 등이 잘 작동하여 sftp로만 액세스를 제한하고 ChrootDirectory 내부의 하위 디렉터리에서 rw를 수행할 수 있습니다. 이는 권한이 없는 사용자에게 적합하며 SSH 액세스를 허용하지 않고 ChrootDirectory 내의 하위 폴더 내부에서만 rw를 허용합니다.

ssh를 정상적으로 사용할 수 있는 좀 더 많은 권한을 가진 사용자를 원하지만 sftp를 통해 로그인하면 ChrootDirectory 환경을 갖게 됩니다. 이는 특권으로 간주되고 obvi가 일반 사용자 권한 내에서 ssh의 파일 시스템을 탐색할 수 있기 때문에 보안 문제가 덜합니다. 문제는 ssh 로그인을 방지하지 않고 sftp로 로그인할 때 Chroot하는 방법이 보이지 않는다는 것입니다. 이는 무엇보다 표준화와 편의성을 위한 것이므로 SFTP를 사용할 때 SFTP 전용 사용자처럼 Chrooted 위치에 도착합니다.

나는 그들의 쉘을 기본값(/bin/false 또는 nologin이 아닌)으로 두면 이것이 작동할 것이라고 생각했습니다. 안타깝게도 sftp_only 그룹에 있으면 ssh 접속이 전혀 허용되지 않고 sftp만 허용됩니다. 두 개의 별도 계정(하나는 'sftp_users'에 추가되고 다른 하나는 해당 그룹에 추가되지 않음)을 갖는 것 외에 이에 대한 해결 방법이 있습니까? 지금까지 내가 찾을 수 있는 것은 sftp Chroot를 제한하고 동시에 해당 그룹에 있는 경우 ssh를 허용하지 않는 문서뿐입니다.

예시 사용자는 'test'입니다. 'test'는 sftp_users 그룹에 있으므로 sftp를 통해 로그인하고 지정된 폴더('/sftp/test')로 루트를 지정하고 '/sftp/test/home'에 바인드 마운트된 홈 폴더를 읽거나 쓸 수 있습니다. . 이것은 모두 작동합니다. 그러나 그의 쉘이 여전히 /etc/passwd에서 /bin/bash로 설정되어 있더라도 sftp_users 그룹에 추가되면 'test'는 ssh를 통해 로그인할 수 없습니다. 해당 그룹의 멤버십을 제거하면 두 가지를 모두 수행할 수 있지만 SFTP에서 Chrooted할 수는 없습니다.

'sftp_users' 그룹에 속하지 않은 사용자는 여전히 ssh 또는 sftp를 통해 로그인할 수 있지만 sftp에서 Chrooted되지는 않습니다.

어떤 프로토콜이 사용되는지 일치시키는 방법이 있습니까? 또는 다른 그룹에 대해 추가 일치를 설정할 수 있습니까? SFTP를 통해 로그인할 때만 chroot를 찾고 있습니다. 이러한 사용자에게는 SSH를 통한 비 chroot가 적합합니다.

다음은 내 sshd_config입니다.

Port XXXX
#ListenAddress ::
#ListenAddress 0.0.0.0

Protocol 2

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

SyslogFacility AUTH
LogLevel INFO

LoginGraceTime 120
PermitRootLogin no
StrictModes yes

PubkeyAuthentication yes

IgnoreRhosts yes
HostbasedAuthentication no

PermitEmptyPasswords no

ChallengeResponseAuthentication no

X11Forwarding yes
X11DisplayOffset 10
PrintMotd yes
PrintLastLog yes

ClientAliveCountMax 10
ClientAliveInterval 3600
TCPKeepAlive no

#Banner /etc/issue.net

AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server -u 0027

UsePAM yes
PasswordAuthentication yes



Match Group sftp_users
  ChrootDirectory /sftp/%u
  ForceCommand internal-sftp -u 0027
  X11Forwarding no
  AllowTcpForwarding no
  PasswordAuthentication yes

답변1

OpenSSH는 제출된 명령을 기반으로 전역 키워드 재정의를 지원하지 않습니다. 명령문에 대해 OpenSSH가 제공하는 일부 기준(조합)을 구별해야 합니다 Match.

사용 가능한 기준은 User, Group, Host, LocalAddress, LocalPort, RDomain 및 Address입니다(RDomain은 연결이 수신된 rdomain(4)을 나타냄).

-- 남자 5 sshd_config

일반적인 선택은 및 와 같은 대체 도메인을 통해 연결되는 대체 IP에 대해 의도적으로 제한된 서비스를 제공하는 것 snapshot.backup.example입니다 sftp.backup.example.


에 대한 의견연결된 질문하지만 문제를 명확하게 설명하십시오.

당신이 생각한다면원하다권한 있는 사용자를 위해 sftp 액세스가 chroot되었습니다. 다른 내용을 다루게 될 가능성이 높습니다.역할동일하게사용자, 이는 보안 위험을 초래합니다. 대부분의 감사 및 권한 분리 문제는 다음을 통해 더 잘 해결됩니다.다른 사용자를 사용하여chroot 설정에 제한이 없는 사용자에 대해서도 chroot 설정을 고려하게 된 이유는 무엇입니까? 동일한 작업이 실행되더라도 두 가지 다른 작업이 있는 경우사람, 의도적으로 제한하는 경우 더 안전하게 수행되는 방법은 반드시 새 시스템 사용자를 설정하는 것입니다(예: 사용자가 있고 person대부분 person-task의 제한 사항 및 인증 방법을 공유하고 ssh에서는 그중 하나만 제한합니다).

답변2

나는 또한 이 문제로 인해 혼란스러웠습니다. 사용자를 위해 chroot sftp를 설정할 때 ssh로 로그인할 수 없습니다. 내 시나리오는 약간 다릅니다. 사용자에게 제한된 쉘 환경을 제공해야 하지만 사용자는 RW의 홈 디렉토리와 지정된 공용 디렉토리(예: RDONLY의 경우 /home/public)에 액세스하려면 sftp 및 scp가 필요합니다.

먼저 감옥에 있는 쉘을 개발했습니다. 이 쉘이 openssh Internal-sftp와 협력하여 내 요구 사항을 달성할 수 있기를 바랐습니다. 그런 다음 openssh는 chroot 내부 sftp가 활성화된 상태에서 사용자 ssh 로그인을 허용하지 않기 때문에 실패한 것으로 나타났습니다.

그래서 집에 갇혀 있는 SFTP와 SCP를 지원하기 위해 감옥에 있는 쉘을 수정해야 했습니다. 감옥에 갇힌 SFTP를 구현하기 위해 ptrace syscall을 사용하는 것은 약간 까다롭습니다. 이 정보가 도움이 되셨다면 다음을 참고하세요. https://github.com/diggerwoo/jsh.

관련 정보