쉘 액세스 없이 사용자에게 SFTP 액세스 권한을 부여할 수 있습니까? 그렇다면 어떻게 구현되나요?

쉘 액세스 없이 사용자에게 SFTP 액세스 권한을 부여할 수 있습니까? 그렇다면 어떻게 구현되나요?

자신이 설정한 홈 디렉토리에 파일을 업로드하는 사용자 그룹이 있습니다. 나는 sftp로 충분할 것이라고 생각하지만 쉘을 통해 로그인하는 것을 원하지 않습니다. 그렇다면 가능합니까? 내 플랫폼은 centos 7이고 사용자의 홈 디렉터리는 /personal/$user에 저장되어 있습니다.

이 설정으로 사용자를 만들었습니다.

useradd -m -d /personal/user1 -s /sbin/nologin

사용자에게 비밀번호가 할당된 후 sftp를 사용하여 시스템에 로그인하면 연결할 수 없다는 메시지가 나타납니다.

답변1

그룹 기반 기본 보안 SSH 설정

나는 SSH 액세스를 관리하기 위해 다음 설정을 좋아하며 이를 사용하여 소규모 서버 팜에서 사용자 그룹을 관리했습니다. 보안과 관리 용이성이 최우선 순위입니다.

주요 기능은 Unix 그룹 멤버십을 통해 SSH 권한을 쉽게 관리하는 것이며 엄격하게 정의된 권한을 가지며 기본적으로 안전합니다.

구성

소프트웨어 설치(선택 사항이지만 유용함):

yum install members   # or apt install members

그룹 추가:

addgroup --system allowssh
addgroup --system sftponly

다음 내용으로 새 파일을 추가합니다 ( 더 나은 이름으로 /etc/ssh/sshd_config.d/strict.conf바꿀 수 있음 ).strict

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    DisableForwarding yes
    ForceCommand internal-sftp

이는 OpenSSH 설정에 sshd_config.d/*.conf기본 구성 재정의가 포함되어 있다고 가정합니다. SSH 문서를 확인하거나 main에 sshd_config적절한 Include지시어가 있는지 확인하세요. 설정에서 이 기능을 지원하지 않는 경우 sshd_config직접 편집할 수 있습니다.

또한 구성을 수정한 후 SSH 서비스를 다시 시작하는 것을 잊지 마세요.

근본적인

그렇다면 이 모든 기능은 무엇을 합니까?

  • 추가 보안 조치로 항상 루트 로그인을 비활성화합니다.
  • 항상 비밀번호 기반 로그인을 비활성화합니다(취약한 비밀번호는 sshd를 실행하는 서버에 큰 위험입니다).
  • allowssh그룹(pubkey)의 사용자 만 로그인할 수 있습니다 .
  • 그룹의 사용자는 sftponlySSH를 통해서는 셸을 얻을 수 없으며 SFTP를 통해서만 얻을 수 있습니다.

그런 다음 그룹 멤버십을 관리하여 액세스 권한이 있는 사람을 관리하세요. 그룹 멤버십 변경 사항은 SSH를 다시 ​​시작하지 않고도 즉시 적용되지만 기존 세션은 영향을 받지 않습니다. members allowsshSSH를 통해 로그인이 허용된 모든 사용자가 표시되고, members sftponlySFTP 전용 사용자도 모두 표시됩니다.

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

sftponlysftp 사용자는 (쉘을 얻지 못하도록 하기 위해) 그리고 allowssh(처음부터 로그인을 허용하기 위해) 둘 다의 구성원이어야 합니다 .

추가 정보

  1. 이 구성을 참고하세요비밀번호 로그인은 허용되지 않습니다;모든 계정필요공개 키 인증을 사용합니다. 이는 아마도 SSH를 통해 얻을 수 있는 가장 큰 보안 이점이므로 지금 시작하더라도 그만한 가치가 있다고 생각합니다.

    PasswordAuthentication yes정말로 원하지 않는 경우 해당 Match Group allowssh섹션 에 추가할 수도 있습니다. 이를 통해 allowssh사용자는 공개 키와 비밀번호를 사용하여 인증할 수 있습니다. 또는 다른 그룹(및 Match Group섹션)을 추가하여 사용자에게 비밀번호 기반 로그인 권한을 선택적으로 부여할 수 있습니다.

  2. 이 구성은 sftponly모든 사용자를 홈 디렉터리로 제한합니다. 이를 원하지 않으면 지시문을 제거하십시오 ChrootDirectory %h.

    만약 너라면하다chroot가 작동하려면 사용자의 홈 디렉토리(및 그 위의 모든 디렉토리) root:root가 group/other의 소유이고 쓰기 가능하지 않은 것이 중요합니다. 홈 디렉토리의 하위 디렉토리는 사용자가 소유하거나 쓸 수 있습니다.

    응, 사용자의홈 디렉토리는 루트가 소유해야 합니다.사용자가 쓸 수 없습니다. 안타깝게도좋은 이유이 제한사항에 대해. 상황에 따라서는 ChrootDirectory /home이것이 좋은 선택이 될 수도 있습니다.

  3. 이 솔루션의 경우 SSH가 사용자의 셸을 덮어쓰기 때문에 사용자의 셸 설정이 sftponly필요 /sbin/nologin하지도 않고 해롭지도 않습니다 ForceCommand internal-sftp.

    을 사용하면 /sbin/nologin다른 수단(물리적 콘솔, Samba 등)을 통해 로그인하는 것을 방지하는 데 도움이 될 수 있으므로 여전히 권장됩니다.

  4. 이 설정은 SSH를 통한 직접 로그인을 허용하지 않으며 root이로 인해 추가 보안 계층이 생성됩니다. 만약 당신이 정말로하다직접 루트 로그인이 필요한 경우 키 기반 강제 명령만 허용하도록 PermitRootLogin지시어를 변경합니다 . 최후의 수단으로 완전 키 기반 로그인 허용을 사용할 수 있습니다. 피하다 .forced-commands-only/root/.ssh/authorized_keysprohibit-passwordyes

  5. 보너스 포인트를 얻으려면 루트할 수 있는 사람을 제한하고 이라는 su시스템 그룹을 추가 /활성화하는 것을 고려하십시오 .wheelauth required pam_wheel.so/etc/pam.d/su

답변2

/etc/ssh/sshd_config다음을 포함하도록 콘텐츠를 편집하세요 .

Match User [SFTP user]
ForceCommand internal-sftp

재시작 sshd. 사용자가 여러 명인 경우 다음과 같이 쉼표로 구분하여 일치하는 사용자 줄에 모두 입력하세요.

Match User User1,User2,User3

sftp쉘 액세스를 허용하지 않도록 구성하는 핵심은 ForceCommand 옵션을 통해 사용자를 제한하는 것입니다.

답변3

기본 쉘을 /sbin/nologin으로 변경하면 됩니다. 대부분의 Linux 버전을 가정하면:

# usermod -s /sbin/nologin username

답변4

가지다mysecureshell사용자가 SFTP를 사용하지 못하도록 제한하고 액세스 가능한 경로도 제한할 수 있습니다.

게다가rrsync사용자 rsync만 제한하는 데 사용됩니다.

관련 정보