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


29

세트 homedirs에 파일을 업로드 해야하는 사용자 배열이 있습니다. 나는 sftp가 충분하다고 생각하지만 쉘을 통해 로그인하기를 원하지 않습니다. 그래서 가능합니까? 내 플랫폼은 centos 7입니다. 사용자의 홈 디렉토리가 저장되어 / personal / $ user

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

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

사용자에게 암호를 지정한 다음 sftp를 사용하여 컴퓨터에 로그인하면 연결할 수 없습니다.



답변:


11

다음 /etc/ssh/sshd_config을 포함하도록 편집하십시오 .

Match User [SFTP user]
ForceCommand internal-sftp

다시 시작하십시오 sshd. 여러 사용자가있는 경우 다음과 같이 쉼표로 구분하여 일치하는 사용자 행에 모두 배치하십시오.

Match User User1,User2,User3

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


Ok 나는 모든 단계를 따랐지만 로그인하지 않았다
Sollosa

2
@Sollosa Match User [SFTP user] ForceCommand internal-sftpchroot를하지 않고 시도해보십시오 .
마틴 Prikryl

@MartinPrikryl Martin에서 작업했습니다. 감사합니다. 방금 chrootdirectory 매개 변수 및 viola를 제거했습니다.
Sollosa

1
또한 chroot사용자가 정의 된 "감옥"을 벗어나 이동할 수 없도록 할 수 있습니다.
Ivanivan

37

SSH 액세스 관리를 위해 다음과 같은 설정이 마음에 듭니다.이 서버는 소규모 서버에서 사용자 그룹을 관리하기 위해 직장에서 사용합니다. 보안 및 관리 용이성은 우선 순위 목록에서 높습니다.

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

설정

소프트웨어 설치 (선택적이지만 유용한) :

yum install members   # or apt install members

그룹 추가 :

addgroup --system allowssh
addgroup --system sftponly

에서 /etc/ssh/sshd_config, 설정에 다음이 있는지 확인 No:

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

그리고 끝에 /etc/ssh/sshd_config다음 두 스탠자를 추가하십시오.

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

(파일 편집 후 SSH를 다시 ​​시작하는 것을 잊지 마십시오)

설명

그래서이 모든 것이 무엇을 하는가?

  • 추가 보안 수단으로 항상 루트 로그인을 비활성화합니다.
  • 항상 암호 기반 로그인을 비활성화합니다 (약한 암호는 sshd를 실행하는 서버에 큰 위험입니다).
  • allowssh그룹의 사용자에 대해서만 (토끼) 로그인을 허용합니다 .
  • sftponly그룹의 사용자는 SSH를 통해 쉘을 얻을 수 없으며 SFTP 만 가능합니다.

그런 다음 그룹 구성원을 관리하여 액세스 권한을 가진 사람을 관리하기 만하면됩니다 (이 변경 사항은 즉시 적용되며 SSH를 다시 ​​시작할 필요가 없습니다).

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

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

추가 정보

  1. 이 구성 은 비밀번호 로그인을 허용하지 않습니다 . 모든 계정 공개 키 인증을 사용해야합니다. 이것은 아마도 SSH로 얻을 수있는 가장 큰 보안 승리 일 것이므로 지금 시작해야하더라도 노력할 가치가 있다고 주장합니다.

    정말로 이것을 원하지 않으면 스탠자에 추가 PasswordAuthentication yes하십시오 Match Group allowssh. 이것은 allowssh사용자에게 pubkey와 password 인증을 허용합니다 .

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

    당신이 경우 않는 작업에 chroot 환경을 원하는, 사용자의 홈 디렉토리 (그리고 위의 임의의 디렉토리)를 소유하는 것이 중요 root:root및 기타 / 그룹별로 없습니다 쓰기. 홈 디렉토리의 서브 디렉토리가 사용자 소유 및 / 또는 쓰기 가능하다는 것은 괜찮습니다.

    예, 사용자의 홈 디렉토리는 루트 소유 이며 사용자가 쓸 수 없어야합니다 . 안타깝게도이 제한 에는 충분한 이유 가 있습니다 . 상황에 따라 ChrootDirectory /home좋은 대안이 될 수 있습니다.

  3. SSH가 사용자의 쉘을 대체 하기 때문에이 솔루션 에는 sftponly사용자 의 쉘을 설정하는 /sbin/nologin것이 필요하거나 유해하지 않습니다 ForceCommand internal-sftp.

    사용하여 /sbin/nologin도움이 될 수있는 것은 그들이 다른 방법 (물리적 콘솔, 삼바 등)하지만 통해 로그인 중지합니다.

  4. 이 설정은 rootSSH를 통한 직접 로그인을 허용하지 않습니다 . 이것은 추가 보안 계층을 형성합니다. 직접 루트 로그인 필요한 경우 PermitRootLogin지시문을 변경하십시오 . 로 설정하는 것이 좋습니다 forced-commands-only, prohibit-password그리고 (최후의 수단으로) yes.

  5. 보너스 포인트의 경우 누가 응원 할 수 su있는지 를 제한하십시오 . 라는 시스템 그룹을 추가 wheel하고, 가능 / 추가 auth required pam_wheel.so에서 /etc/pam.d/su.


2
이것이 정답입니다. 각 단계의 추론을 분석 할뿐만 아니라 솔루션을 제공합니다.
kemotep

1
이것은 훌륭한 추가 보안 조언을 제공하는 훌륭한 답변이지만 암호 로그인, 루트 로그인 등에 의존하는 시스템의 사용자에게는 걱정이됩니다. 물론 그렇게하는 것은 좋지 않지만 일반적인 보안 개선과 관련된 변경 사항을 최소한의 변경으로 질문에 대한 답변을 얻을 수 있도록 자체 섹션?
Josh Rumbut

1
@JoshRumbut 나는 부분적으로 My Way ™를 보여주기 때문에 부분적으로 (매우 정확한) 발언에 대한 답을 다시 쓰고 싶지 않았습니다. 더 많은 사람들이 유용하다고 생각하는 예. 타협으로, 루트 로그인과 암호 인증이 작동하지 않는다는 것을 훨씬 더 명확하게 만들려고 시도했으며 다시 활성화하는 방법에 대한 지침을 포함 시켰습니다. :)
marcelm

1
좋은 대답은 다른 답변의 가장 큰 단점은 보안 측면, 주로 chroot를 고려하지 않은 것입니다. +1
Rui F Ribeiro

1
Chroot는 일반 % h에서 작동하지 않습니다. 놀랍게도, 당신은해야 chown root:root하고chmod og-w
kubanczyk

1

기본 쉘을 / sbin / nologin으로 변경하십시오. 대부분의 Linux를 가정 할 때 :

# usermod -s /sbin/nologin username

나는 그것을 시도했지만 사용자는 sftp를 통해 로그인 할 수 없습니다. 왜 그런지 모르겠습니다. 나는 centos btw를 사용하고 있습니다.
솔로 사

@Sollosa 아마도 sftp chroot의 권한 문제이거나 sshd_config에 문제가있을 것입니다. chroot 디렉토리의 권한과 수정 된 중요한 정보가 포함 된 sshd_config를 포함하도록 질문을 업데이트해야합니다.
Kefka

나는 (내가 지금 그것을 테스트 할 수 있지만) 또한있을 경우에만이 SFTP를 할 수 있다고 생각 Subsystem sftp internal-sftp) (아니면 ForceCommand internal-sftp). 일반이 있다면 Subsystem sftp /path/to/sftp-server, nologin심지어 SFTP를 방지 할 수 있습니다.
Martin Prikryl

@MartinPrikryl 나는 기능이없는 sftp 서버에서 사용자의 쉘 ​​액세스를 비활성화하는 방법을 묻는 원래의 편집되지 않은 질문을 오해했습니다. 나는 당시에 약 10 분 동안 깨어 있었기 때문에 생각했던 것만 큼 분명하지 않았습니다. sftp-server를 사용하려면 사용자에게 유효한 쉘이 있어야 작동한다는 것을 몰랐지만 잠재적으로 위험한 것 같습니다. 나는 항상 습관을 잃어 버린 내부 FTP를 사용합니다.
Kefka

내 대답을 참조하십시오 내부 SFTP 및 SFTP 서버의 차이 : OpenSSH를 (끝 특히 섹션)
마틴 Prikryl

0

tftp를 사용할 수 있습니다. ssh 이상의 것은 인증 (key | pass)이 필요합니다.

tftp는 보안이 유지되지만 인증 없이는 무엇이든 액세스 할 수 있도록 결정을 다시 검토하는 것이 좋습니다.

http://manpages.ubuntu.com/manpages/bionic/man1/tftp.1.html


2
OP는 사용자 (아마도 사용자 이름과 암호가있는 사용자)가 일반 SSH 클라이언트를 사용하여 서버에 연결하고 임의의 명령을 실행할 수 있기를 원했지만 동일한 사용자는 SFTP를 통해 파일을 업로드 할 수 있다고 생각합니다.
John_ReinstateMonica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.