일부 사용자의 경우 sftp를 비활성화하고 ssh를 활성화 된 상태로 유지하는 방법은 무엇입니까?


12

내 프로젝트에서 일부 사용자의 경우 sftp를 비활성화해야하지만 해당 사용자는 여전히 ssh를 통해 연결해야합니다. 누구든지 이것을 구현하는 방법을 알고 있습니까?

에서 파일을 변경하라는 제안을 보았지만 /etc/ssh/sshd_config무엇을 변경할지 잘 모르겠습니다.


내가 이것을 상상할 수있는 유일한 방법은 SELinux에서 MLS 정책을 사용하고 사람이 액세스하고 실행할 수있는 파일, 디렉토리 및 소켓을 정확하게 제한하는 것입니다. owner아웃 바운드 액세스를위한 모듈 . 이것은 당신이 빨간 팀에 의해 펜 테스트 될 것이라고 가정합니다. 시스템에 액세스하는 모든 사람이 항상 규칙을 준수하고 악의적 의도가 없다면, 나의 접근 방식은 무겁고 지나치게 복잡 할 것입니다.
Aaron

답변:


7

일반적으로이 작업은 다른 사람이 나열한 이유로 잘못된 보안 관행입니다. 그러나 과제의 핵심은 다양한 기준에 따라 조건부 구성 섹션을 가질 수 있다는 것을 가르치는 것입니다.

이를 수행하는 방법은 Match조건부 블록 *을 사용하는 것 입니다.

Match User bob
Subsystem   sftp  /bin/false

자세한 내용 및 일치하는 섹션 sshd_config(5)아래를 참조하십시오 .MatchGroup

* 여러 가지 방법이 있습니다.


7
그것은 나를 위해 작동하지 않습니다. 오류 : 일치 블록 내에서 '서브 시스템'지시문이 허용되지 않음
chrw

일치 블록에서 하위 시스템을 사용할 수 없으므로 잘못된 답변
mikep

6

이것은 말이되지 않습니다. 쓸모없는 모호함을 통한 보안입니다. SSH를 사용할 수있는 모든 사용자는 SSH 세션을 통해 읽을 수있는 모든 파일을 전송할 수 있습니다. 권한이 있으면 쓸 수도 있습니다.

예를 들어, 다음 방법을 사용하여 ssh를 통해 / etc / passwd를 다운로드 할 수 있습니다 (scp / sftp 세션 필요 없음). ssh foo@bar.com "cat / etc / passwd"> passwdcopy

SSH를 통해 화면에서 볼 수 있으면 파일로 쉽게 복사 할 수 있습니다.

이것이 의미가있는 유일한 방법은 보안 정책을 시행하는 사용자 정의 제한 쉘이있는 경우입니다.

그러나 ssh 셸을 통해 수행 할 수있는 sftp / scp를 통해 임의의 명령을 실행할 수 없기 때문에 이것의 역은 의미가 있습니다 (ssh 쉘은 비활성화하지만 scp / sftp는 활성화 됨).

추신 : 귀하가 부여하는 SSH 쉘이 임의의 실행을 허용하는 표준 쉘이라고 가정합니다. 그렇지 않은 경우 다음을 참조하십시오. 특정 사용자 또는 그룹에 대해 sftp 하위 시스템을 비활성화하는 방법은 무엇입니까? sshd_config의 서브 시스템 구성 옵션을 살펴보십시오.


4
Match Group nosft
Subsystem   sftp  /bin/false

나는 이것을 위해 그룹을 사용하는 것을 선호합니다.

쉘을 제한 한 사용자와 함께 사용하면 유용합니다. 때로는 ssh가 클라이언트에 액세스하여 쉘을 데이터를 덤프하는 스크립트로 설정하여 데이터베이스의 sql 덤프에 액세스 할 수 있도록합니다. scp에서 잘라내는 것도 현명한 아이디어 인 것 같습니다. 그들은 catssh를 통해 파일을 전송 하기 위해 실행 에 액세스 할 수 없습니다 .


3
Directive 'Subsystem' is not allowed within a Match block
Patryk

일치 블록에서 하위 시스템을 사용할 수 없으므로 잘못된 답변
mikep

4

SFTP를 전체적으로 활성화하고 일부 사용자에 대해서만 SFTP를 비활성화 할 수 있습니다.

사용자에게 일반 쉘 프롬프트를 표시하려는 경우에는 작동하지 않습니다. 쉘 액세스 권한이 있으면 대부분의 항목을 우회 할 수 있으므로 의미가 없습니다. 특정 프로그램에 대한 액세스 권한 만 부여하려는 경우에만 작동합니다.

SSH를 통해 일부 자식 리포지토리에 액세스하고 싶기 때문에 개인적으로 필요하며 필요하지 않은 시스템을 비활성화하고 싶습니다. 이 경우 SFTP가 필요하지 않습니다.

어울리는

사용자 세트와 일치시키기 위해 Match키워드를 사용하여 SSH를 구성 할 수 있습니다 . 로부터 sshd_config(5)수동 :

Match
        ...

        The arguments to Match are one or more criteria-pattern pairs or the
        single token All which matches all criteria.  The available criteria
        are User, Group, Host, LocalAddress, LocalPort, and Address.  The
        match patterns may consist of single entries or comma-separated
        lists and may use the wildcard and negation operators described in
        the PATTERNS section of ssh_config(5).

        ...

몇 가지 예 :

  • Match User eva "eva"사용자와 일치
  • Match User stephen,maria "stephen"및 "maria"사용자와 일치
  • Match Group wheel,adams,simpsons "바퀴", "아담", "심슨"그룹과 일치

자세한 정보가 필요하면 sshd_config(5)매뉴얼에 로드가 있습니다.

강제 명령

일반적으로 SSH를 통해 연결할 때 사용자의 로그인 쉘이 표시되지만 특정 명령을 강제 실행하도록 SSH를 구성 할 수 있습니다. SFTP를 포함한 모든 SSH 연결에 대해 명령이 강제 실행되므로 원하는 명령을 강제 실행하는 옵션이있을 수 있습니다.

ForceCommand키워드 로 강제 명령을 구성 할 수 있습니다 . 로부터 sshd_config(5)수동 :

ForceCommand
        Forces the execution of the command specified by ForceCommand,
        ignoring any command supplied by the client and ~/.ssh/rc if
        present.  The command is invoked by using the user's login shell
        with the -c option.  This applies to shell, command, or subsystem
        execution.  It is most useful inside a Match block.  The command
        originally supplied by the client is available in the
        SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of
        “internal-sftp” will force the use of an in-process sftp server that
        requires no support files when used with ChrootDirectory.  The
        default is “none”.

따라서 원하는 제한 명령을 사용할 수 ForceCommand <your command>있습니다. 예를 들면 다음과 같습니다.

Match User kim
        ForceCommand echo 'successful login man, congrats'

git 액세스 권한을 부여하려는 경우 사용자에게만 액세스 권한이 필요합니다 git-shell. 다음은 일부 보안 옵션과 함께 내 git 사용자에 대해 SFTP를 비활성화하는 섹션입니다.

Match Group git

        # have to do this instead of setting the login shell to `git-shell`,
        # to disable SFTP
        ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"

        # disable stuff we don't need
        AllowAgentForwarding no
        AllowTcpForwarding no
        AllowStreamLocalForwarding no
        PermitOpen none
        PermitTunnel no
        PermitTTY no
        X11Forwarding no

1
이는 영업 이익의 질문에 대답하지 않습니다, 그러나 그것은 이었다 내가 내 자신의 사용 사례에 달성하기 위해 원하는 것을 달성하기 위해 매우 도움이
Kidburla

동의하지 않습니다. OP의 질문은 "일부 사용자의 경우 sftp를 비활성화하는 방법이지만 ssh를 활성화 된 상태로 유지하는 방법"입니다.이 답변은이를 수행하는 한 가지 방법을 설명합니다. 어쨌든 도움이되었다 니 다행입니다.
aude may

자신의 승인으로 "사용자가 일반 쉘 프롬프트를 표시하도록하려면 작동하지 않습니다". 따라서 이것은 OP의 "ssh 사용 유지"에 대한 OP의 요구 사항을 충족하지 못합니다.
Kidburla

그건 좋은 지적이야. "이것은 쉘 접근 권한이 있다면 대부분의 것을 우회 할 수 있기 때문에 말도 안된다"고 생각하기 때문에이 솔루션에 대해 언급 한 것 같습니다. 그러나 OP가 요구하는 것을 정확하게 찾을 수있는 방법을 찾지 못했습니다. 지금 동의합니다.
오드

이 답변의 전체 버전은 다음과 같습니다. serverfault.com/a/817482
aude

1
Match User bob
MaxSessions 0

CentOS 6.6에서 테스트하고 작업했습니다. 하위 시스템은 최신 CentOS 버전에서는 일치로 사용할 수 없습니다. sshd_config의 맨 페이지에는 일치 조건에 허용되는 제한된 키워드가 나열되어 있습니다.


0

당신은 볼 수 scponly의 유일한 SCP / SFTP를하지만 쉘 액세스를 허용하지, 반대를 할 수 있습니다.

위의 @Nathan에 동의합니다. 이는 말이되지 않습니다. 불완전한 설정 인 경우 / etc / ssh / sshd_config 파일을 편집하고 다음 줄을 제거 / 설명해보십시오.

서브 시스템 sftp / usr / libexec / openssh / sftp-server


0

사용자에게 홈 디렉토리를 제공하지 않습니다

usermod username -d /bin/false

/ etc / ssh / sshd_config 파일의 서브 시스템 sftp / usr / libexec / openssh / sftp-server를 서브 시스템 sftp / dev / null / usr / libexec / openssh / sftp-server로 변경하십시오.

그런 다음 ssh를 다시 시작하십시오.

service ssh restart

그것은 나를 위해 일한다, 데비안.


-2

다음과 ~/authorized_key같이 사용자 키를 구성하십시오.

command="/bin/bash" ssh-rsa AAAAB3Nz.........
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.