SSH TUNNELING에 대한 권한 만 허용하도록 SSH 서버의 사용자를 어떻게 제한 할 수 있습니까? 즉, SSH를 통해 로그인하더라도 명령을 실행할 수 없습니다.
내 Linux 서버는 Ubuntu 11.04 및 OpenWrt입니다.
SSH TUNNELING에 대한 권한 만 허용하도록 SSH 서버의 사용자를 어떻게 제한 할 수 있습니까? 즉, SSH를 통해 로그인하더라도 명령을 실행할 수 없습니다.
내 Linux 서버는 Ubuntu 11.04 및 OpenWrt입니다.
답변:
서버 측에서 사용자 쉘을로 설정하여이를 제한 할 수 있습니다 /bin/true
. 이렇게하면 인증을받을 수 있지만 쉘을 실행할 수 없기 때문에 실제로는 아무것도 실행할 수 없습니다. 이는 SSH가 제공 할 수있는 것의 일부로 제한됩니다. 포트 포워딩을 제공하더라도 여전히 그렇게 할 수 있습니다.
클라이언트 쪽에서와 연결하고 싶을 것입니다 -N
. 이것은 클라이언트가 쉘과 같은 원격 명령을 요구하지 못하게하고 인증 부분이 완료된 후에 중지됩니다. 이것을 지적 해주신 의견에 감사드립니다.
useradd sshtunnel -m -d /home/sshtunnel -s /bin/true
.
다음은 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
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 및 이전 버전에서 매우 제한됩니다.