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

사용자가 특정 포트 (예 : 5000)의 특정 컴퓨터에 SSH 터널을 설정하도록 허용하고 싶지만이 사용자를 가능한 한 많이 제한하고 싶습니다. (인증은 공개 / 개인 키 쌍으로 이루어집니다).

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



답변

우분투 11.10에서 -T를 사용하거나 사용하지 않고 전송되는 ssh 명령을 차단하고 scp 복사를 차단하면서 포트 포워딩을 허용 할 수 있음을 발견했습니다.

특히 나는 localhost : 6379에 바인딩 된 “somehost”에 redis-server가 있는데, ssh 터널을 통해 키 파일이 있고 ssh를 사용하는 다른 호스트와 안전하게 공유하고 싶습니다.

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

이렇게하면 “somehost”의 redis-server “localhost”포트 6379가 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 시도를 수행합니다.

permitopen은 전달이 허용되는 포트를 설명합니다.이 경우 포트 6379는 전달하려는 redis-server 포트입니다.

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

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

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

scp 보안 파일 복사를 사용하려는 시도는 “do-not-send-commands”라는 에코와 함께 실패합니다. sftp도이 구성에서 실패합니다.

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


답변

사용자의 셸을 제한된 셸로 설정하고 싶을 것입니다 . 사용자의 ~ / .bashrc 또는 ~ / .bash_profile에서 PATH 변수를 설정 해제하면 명령을 실행할 수 없습니다. 나중에, 당신은 당신처럼, 제한된 명령을 실행하기 위해 사용자를 허용 할 결정하는 경우 less또는 tail예를 들어, 당신은 (예 : 별도의 디렉토리에 허용 된 명령을 복사 할 수 있습니다 /home/restricted-commands)와에 지점의 경로를 업데이트 그 디렉토리.


답변

no-X11-forwarding과 같은 authorized_keys 옵션 외에 실제로 요청하는 옵션이 정확히 하나 있습니다 : permitopen = “host : port”. 이 옵션을 사용하면 사용자는 지정된 호스트 및 포트에 대한 터널 만 설정할 수 있습니다.

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/


답변

로그인을위한 공개 키를 사용하여 authorized_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를 아무것도 편집 하지 않습니다. 이는 bash가 실행할 명령을 찾지 못하도록 만드는 트릭입니다.

PATH=""

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

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