SSH 터널링 만 허용하도록 SSH 사용자를 제한하는 방법은 무엇입니까?


31

SSH TUNNELING에 대한 권한 허용하도록 SSH 서버의 사용자를 어떻게 제한 할 수 있습니까? 즉, SSH를 통해 로그인하더라도 명령을 실행할 수 없습니다.

내 Linux 서버는 Ubuntu 11.04 및 OpenWrt입니다.

답변:


34

서버 측에서 사용자 쉘을로 설정하여이를 제한 할 수 있습니다 /bin/true. 이렇게하면 인증을받을 수 있지만 쉘을 실행할 수 없기 때문에 실제로는 아무것도 실행할 수 없습니다. 이는 SSH가 제공 할 수있는 것의 일부로 제한됩니다. 포트 포워딩을 제공하더라도 여전히 그렇게 할 수 있습니다.

클라이언트 쪽에서와 연결하고 싶을 것입니다 -N. 이것은 클라이언트가 쉘과 같은 원격 명령을 요구하지 못하게하고 인증 부분이 완료된 후에 중지됩니다. 이것을 지적 해주신 의견에 감사드립니다.


나는 이것을 시도 할 것이다 : P thx!
LanceBaynes

2
Caleb의 답변에 추가하려면 클라이언트에게 쉘을 실행하지 않도록 지시해야 할 수도 있습니다. openssh 명령 행을 사용하면 -N 플래그를 사용하여 수행됩니다. PuTTY에도 비슷한 옵션이 있지만 정확한 이름은 기억 나지 않습니다.
Bill B

흠, 그것은 기본적으로 클라이언트 측 보안입니다. 서버 측 보안 설정을 찾고 있는데 감사합니다!
LanceBaynes

2
죄송합니다. 확실하지 않습니다. 서버 설정과 함께 사용했습니다. 쉘에서 쉘이 아닌 다른 것으로 쉘을 설정하면 쉘을 열려고 시도 할 수 없기 때문에 전혀 연결할 수 없습니다. 따라서 보안은 Caleb의 방법을 사용하여 서버 측에서 시행되지만 그 후에 연결하는 데 문제가 있으면 클라이언트 측 스위치를 설정해야 할 수도 있습니다.
Bill B

3
를 사용하여 해당 사용자를 만듭니다 useradd sshtunnel -m -d /home/sshtunnel -s /bin/true.
fracz

13

다음은 X11 및 SSH 에이전트 소켓 전달도 허용되지 않으며 여전히 Calebs 방식으로 허용 될 수 있다는 이점이 있습니다. 다른 장점은 사용자가 다른 방법으로 기본 셸을 변경할 수있는 경우에도 SSH 액세스가 TCP 전달로만 제한된다는 것입니다.

당신의 다음을 넣어 /etc/ssh/sshd_config:

Match User that-restricted-guy
  AllowTcpForwarding yes
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

사용자 that-restricted-guy가 SSH 사용 가능 시스템 (이 시스템에 localhost연결 및이 시스템에서 다른 시스템으로의 연결)을 통해 TCP 연결을 전달할 수 있습니다.

더 제한적이기를 원한다면 (좋은 생각입니다) 다음을 수행 할 수도 있습니다.

Match User even-more-restricted-guy
  PermitOpen 127.0.0.1:12345
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

이를 통해 사용자 even-more-restricted-guy는 127.0.0.1 TCP 포트 12345 로의 연결 만 전달할 수 있습니다 (SSH 지원 시스템을 통해 볼 수 있음).

사용자가 정상적으로 연결하면 /bin/false명령이 트리거되어 코드 1로 즉시 종료 되므로 즉시 연결이 끊어집니다 .이를 피하고 전달 연결을 열린 상태로 유지 -N하려면 ssh명령에 플래그를 추가하십시오 . 이것은 명령을 실행하려고 시도하지 않지만 여전히 TCP 전달 설정을 허용합니다.

후자의 설정에서 작동해야하는 forward 명령의 예 :

ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine

1
나는 Calebs 답변에 대한 개선 된 솔루션으로 답변을 다시 표현했습니다.
aef

확실한. 나도 청소 했어요 오해가 해결 된 것을보고 반갑습니다. 안녕히 주무세요.
Jakuje

1

ssh 버전이이를 지원할만큼 충분히 새롭다 고 가정하면 그룹을 일치시켜 ssh에서 사람들이 수행 할 수있는 작업을 제어 할 수 있습니다 (openssh 5.x +).

기본적으로 우리는 그것들을 sftp 사용자 인 것처럼 취급하지만 tcp 전달을 허용하고 선택적으로 전달할 목적지를 지정합니다. 홈 디렉토리를 제공하지만 그 아래에 디렉토리를 작성하지 않으면 파일을 전송할 수있는 권한이 없으므로 파일을 전송할 수 없습니다.

Match Group                     nicepeople
    PubkeyAuthentication        yes
    PasswordAuthentication      yes
    PermitEmptyPasswords        no
    GatewayPorts                no
    ChrootDirectory             /opt/dummy_location/%u
    ForceCommand                internal-sftp
    AllowTcpForwarding          yes
        PermitOpen              192.168.0.8:22
        PermitOpen              192.168.0.5:8080
    # Or leave out the PermitOpen to allow forwarding to anywhere.
    HostbasedAuthentication     no
    RhostsRSAAuthentication     no
    AllowAgentForwarding        no
    Banner                      none

다른 동작이나 제한을 제공하려는 각 그룹에 대해 이러한 일치 그룹 블록을 반복 할 수 있습니다 .

iptables를 사용하여이 사람이 네트워크에서 갈 수있는 곳을 추가로 제어 할 수 있습니다.

/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT

"nicepeople"그룹 GID가 500이라고 가정합니다.

위의 ssh 옵션 중 일부는 이전 버전의 openssh에서 사용할 수 있지만 일치 그룹 섹션에서는 사용할 수 없습니다. 일치 그룹은 OpenSSH 4.x 및 이전 버전에서 매우 제한됩니다.

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