사용자가 SSH 터널을 설정하도록 허용하지만 다른 것은 허용하지 않습니다.

StackOverflow https://stackoverflow.com/questions/8021

  •  08-06-2019
  •  | 
  •  

문제

사용자가 특정 포트(예: 5000)의 특정 시스템에 대한 SSH 터널을 설정하도록 허용하고 싶지만 이 사용자를 최대한 제한하고 싶습니다.(인증은 공개/개인 키 쌍을 사용하여 이루어집니다).

관련 ~/.ssh/authorized_keys 파일을 편집해야 한다는 것은 알고 있지만 거기에 어떤 콘텐츠(공개 키 제외)를 넣어야 할지 정확히 모르겠습니다.

도움이 되었습니까?

해결책

Ubuntu 11.10에서는 -T를 사용하거나 사용하지 않고 전송되는 ssh 명령을 차단하고 scp 복사를 차단하는 동시에 포트 전달을 허용할 수 있다는 사실을 발견했습니다.

특히 SSH 터널을 통해 키 파일이 있고 SSH로 연결할 다른 호스트와 안전하게 공유하려는 localhost:6379에 바인딩된 "somehost"에 redis-server가 있습니다.

$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost

이로 인해 "somehost"의 "localhost" 포트 6379인 redis-server가 ssh 명령을 실행하는 호스트에 로컬로 나타나고 "localhost" 포트 16379에 다시 매핑됩니다.

원격 "somehost"에서 Authorized_keys에 사용한 것은 다음과 같습니다.

cat .ssh/authorized_keys   (portions redacted)

no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost

no-pty는 터미널을 열려고 하는 대부분의 SSH 시도를 방해합니다.

allowedopen은 어떤 포트가 전달되도록 허용되는지 설명합니다. 이 경우 포트 6379는 제가 전달하려는 redis-server 포트입니다.

누군가 또는 무언가가 ssh -T 등을 통해 호스트에 명령을 보내는 경우 command="/bin/echo do-not-send-commands"는 "do-not-send-commands"를 다시 에코합니다.

최근 우분투에서 man sshd,authorized_keys / 명령은 다음과 같이 설명됩니다.

명령 = "명령"이 키가 인증에 사용될 때마다 명령이 실행되도록 지정합니다.사용자가 제공 한 명령 (있는 경우)은 무시됩니다.

scp 보안 파일 복사를 사용하려는 시도도 "do-not-send-commands" 에코와 함께 실패합니다. 이 구성에서는 sftp도 실패하는 것으로 나타났습니다.

이전 답변에서 제한된 쉘 제안도 좋은 생각이라고 생각합니다.또한 여기에 자세히 설명된 모든 내용은 "man sshd"를 읽고 "authorized_keys"를 검색하여 확인할 수 있다는 데 동의합니다.

다른 팁

아마도 사용자의 쉘을 다음과 같이 설정하고 싶을 것입니다. 제한된 껍질.사용자의 ~/.bashrc 또는 ~/.bash_profile에서 PATH 변수를 설정 해제하면 어떤 명령도 실행할 수 없습니다.나중에 사용자가 다음과 같은 제한된 명령 집합을 실행하도록 허용하려는 경우 less 또는 tail 예를 들어, 허용된 명령을 별도의 디렉터리(예: /home/restricted-commands) 해당 디렉터리를 가리키도록 PATH를 업데이트합니다.

no-X11-forwarding과 같은 Authorized_keys 옵션 외에도 실제로 요구하는 옵션이 정확히 하나 있습니다.허가오픈="호스트:포트".이 옵션을 사용하면 사용자는 지정된 호스트와 포트에만 터널을 설정할 수 있습니다.

AUTHORIZED_KEYS 파일 형식에 대한 자세한 내용은 man sshd를 참조하세요.

내 솔루션은 터널링만 가능한 사용자에게 대화형 쉘 없이, 해당 쉘을 설정하려면 /etc/passwd 에게 /usr/bin/tunnel_shell.

실행파일을 만들어주시면 됩니다 /usr/bin/tunnel_shell무한 루프.

#!/bin/bash
trap '' 2 20 24
clear
echo -e "\r\n\033[32mSSH tunnel started, shell disabled by the system administrator\r\n"
while [ true ] ; do
sleep 1000
done
exit 0

여기에 완전히 설명되어 있습니다. http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/

공개 키가 포함 된 공개 _keys 파일을 설정하여 로그인 할 수 있습니다.내가 확실하지 않은 것은 해당 계정이 허용되는 일을 제한하는 데 필요한 추가 정보입니다.예를 들어, 다음과 같은 명령을 넣을 수 있다는 것을 알고 있습니다.

no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding

Authorized_keys 파일에 다음과 같은 줄이 필요합니다.

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 

svn과 같은 특정 명령에 대해서만 액세스를 허용하려면 인증된 키 파일에 해당 명령을 지정할 수도 있습니다.

command="svnserve -t",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding [KEY TYPE] [KEY] [KEY COMMENT]

에서 http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks

여기에 제가 유용하다고 생각하는 좋은 게시물이 있습니다.http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/

아이디어는 다음과 같습니다.(새로 제한된 사용자 이름을 "sshtunnel"로 사용)

useradd sshtunnel -m -d /home/sshtunnel -s /bin/rbash
passwd sshtunnel

사용자가 수행할 수 있는 작업을 제한하기 위해 rbash(restricted-bash)를 사용한다는 점에 유의하세요.사용자는 cd(디렉터리 변경)를 수행할 수 없으며 환경 변수를 설정할 수 없습니다.

그런 다음 사용자의 PATH 환경 변수를 편집합니다. /home/sshtunnel/.profile to Nothing - bash가 실행할 명령을 찾지 못하게 만드는 트릭입니다.

PATH=""

마지막으로 다음 권한을 설정하여 사용자가 파일을 편집하는 것을 허용하지 않습니다.

chmod 555 /home/sshtunnel/
cd /home/sshtunnel/
chmod 444 .bash_logout .bashrc .profile

나는 다음과 같은 C 프로그램을 만들었습니다.

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void sig_handler(int signo)
{
    if (signo == SIGHUP)
        exit(0);
}

int main()
{
    signal(SIGINT, &sig_handler);
    signal(SIGTSTP, &sig_handler);

    printf("OK\n");
    while(1)
        sleep(1);
    exit(0);
}

제한된 사용자의 쉘을 이 프로그램으로 설정했습니다.

제한된 사용자는 아무것도 실행할 수 없다고 생각합니다. ssh server command, 명령은 쉘을 사용하여 실행되고 이 쉘은 아무것도 실행하지 않기 때문입니다.

보다 공개 키 인증에 대한 이 게시물.

기억해야 할 두 가지 주요 사항은 다음과 같습니다.

  1. 당신을 확인하십시오 chmod 700 ~/.ssh
  2. 공개 키 블록을 인증된 키에 추가

사용자가 사용하는 SSH 클라이언트를 통해 사용자 컴퓨터에 키를 생성합니다.예를 들어 pUTTY에는 이 정확한 작업을 수행하는 유틸리티가 있습니다.개인 키와 공개 키를 모두 생성합니다.

생성된 공개 키 파일의 내용은authorized_keys 파일에 저장됩니다.

다음으로 SSH 클라이언트가 공개 키를 생성한 개인 키를 사용하도록 구성되어 있는지 확인해야 합니다.상당히 간단하지만 사용 중인 클라이언트에 따라 약간 다릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top