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

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

SSH 서버에서 사용자를 제한하여 허용하는 방법오직특권SSH 터널? 즉, SSH를 통해 로그인하더라도 명령을 실행할 수 없습니다.

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

답변1

서버 측에서는 사용자 셸을 /bin/true. 이를 통해 인증할 수는 있지만 실행할 셸이 없기 때문에 실제로 아무것도 실행할 수 없습니다. 즉, SSH가 제공할 수 있는 하위 집합으로 제한됩니다. 포트 포워딩을 제공하는 경우에도 여전히 그렇게 할 수 있습니다.

클라이언트 측에서는 를 사용하여 이 작업을 수행할 수 있습니다 -N. 이렇게 하면 클라이언트가 원격 명령(예: 셸)을 요청하는 것을 방지할 수 있으며 인증 부분이 완료된 후에만 중지됩니다. 이를 지적해주신 댓글 작성자에게 감사드립니다.

답변2

아래의 장점은 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-guySSH 지원 컴퓨터를 통해(해당 컴퓨터로 또는 localhost해당 컴퓨터에서 다른 컴퓨터로) 모든 TCP 연결을 전달할 수 있습니다.

더 제한적으로 적용하려면(좋은 생각임) 다음을 수행할 수도 있습니다.

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

이렇게 하면 사용자는 127.0.0.1 TCP 포트 12345로만 연결을 전달할 수 있습니다 even-more-restricted-guy(SSH 지원 시스템을 통해 볼 수 있기 때문입니다).

사용자가 정상적으로 연결하면 /bin/false명령이 실행되어 아무 작업도 수행하지 않고 코드 1로 즉시 종료되므로 즉시 연결이 끊어집니다. 이를 방지하고 전달 연결을 열어두려면 해당 플래그를 명령에 추가하세요 -N. ssh이는 명령 실행을 시도하지 않지만 여전히 TCP 전달 설정을 허용합니다.

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

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

답변3

SSH 버전이 이를 지원할 만큼 충분히 새로운 경우(openssh 5.x+) 일치 그룹을 통해 사람들이 SSH에서 수행할 수 있는 작업을 제어할 수 있습니다.

기본적으로 우리는 그들을 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 및 이전 버전에서는 일치 그룹이 매우 제한되어 있습니다.

관련 정보