원격으로 만 스크립트를 실행할 수있는 사용자 추가


14

한 가지만 할 수있는 사용자를 만들고 싶습니다 .ssh를 통해 하나의 특정 폴더에있는 스크립트 (및 스크립트에 대한 명령 줄 인수)를 지정하고 (이 질문의 목적으로 호출하십시오 /local/remote_only_scripts/foo) 해당 스크립트를 실행하십시오 출력을 반환합니다.

사용자가 할 수 있기를 원하지 않는 것들의 예를 분명히하기 위해 :

  • 계정에 로컬로 로그인하십시오. 로그인 응용 프로그램은 /bin/login입니다. /local/remote_only_scripts/foo폴더 의 스크립트 가 아니므로 사용자가 호출해서는 안됩니다.
  • 계정에 원격으로 로그인하십시오. 다시 로그인하십시오 (ssh?라고하는 것입니다)는 관련 폴더의 스크립트가 아닙니다.
  • 디렉토리의 내용을 나열하십시오. ls에 /bin/ls있습니다. 적절한 디렉토리에있는 스크립트가 아닙니다.
  • 해당 디렉토리에서 파일을 편집하십시오. emacs, vi, gedit 대부분의 다른 편집자는 해당 디렉토리의 스크립트가 아닙니다.
  • 해당 디렉토리의 파일 내용을보십시오.
  • 해당 디렉토리에서 실행 권한이없는 파일을 실행하십시오.

이들은 사용자가 할 수없는 많은 다른 행동 이있는 입니다. 조치를 고려할 때 "이것이 스크립트로 수행 /local/remote_only_scripts/foo됩니까?" 대답이 없으면 사용자가 할 수 없어야합니다. 대답이 예이면 사용자가 그렇게 할 수 있어야합니다.

추신 : "사용자 추가"를 통해 내가 의미하는 바를 명확히하겠습니다. ssh 하위 시스템에 사용자를 추가한다는 의미는 아닙니다. 오히려 컴퓨터 시스템에 사용자를 추가하는 것을 의미합니다. 예를 들어, 데비안 안정적인 시스템을 운영하고 있습니다. 주소는 www.hg.bar.com입니다. kuser, users-admin 또는 useradd 또는 유사한 방법을 통해 사용자를 hg_guest라고 부르고 싶습니다. hg_guest는 로컬로 로그인하거나 위의 목록에있는 작업을 수행 할 수 없습니다. hg_guest가 할 수있는 모든 것은 "원격으로"스크립트를 실행하는 것입니다. 나는 그가 ssh를 통해 그렇게 할 수 있어야한다고 말했지만 지금 그것에 대해 생각하면 아마도 ssh를 사용하도록 허용하면 로컬로 로그인 할 수 있으므로 다른 메커니즘이 필요할 수 있습니다.

답변:


12

certified_keys 파일 에는 명령 옵션이 있습니다. 이 옵션은 원하는 것을 정확하게 수행하는 것 같습니다.

chroot 또는 제한된 쉘이 아닙니다. ssh를 통해 해당 명령 만 실행할 수 있습니다. 귀하의 예를 들면 다음과 같습니다.

ssh somehost /local/remote_only_scripts/foo

이 authorized_keys 파일의 경우 :

command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key... 

사용자가 로컬로 로그인 할 수 없도록하려면 많은 방법이 있습니다. 다음 중 하나를 수행 할 수 있습니다.

  • 쉘을 / bin / false 로 설정하기 만하면됩니다 ( / bin / true 가 필요할 수도 있습니다) ssh에 유효한 로그인이 필요하기 때문에 )
  • 암호를 잠그십시오. 참조 passwd -l

편집 : 더 많은 제한 옵션을 추가하고 로컬 액세스를 제거하는 방법을 명확히하십시오.


클라이언트 측의 ssh에서 해당 명령을 지정할 필요가 없다고 생각합니다. 'forced'명령이므로 항상 실행됩니다.) 원격 사이트의 사용자는 여전히 / etc / passwd에 정의 된 유효한 쉘이 필요합니다.
jirib

1
옆에 command=, 옵션은 no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty정말 계정을 제한 할 필요가있다.
jofel

확인. 나는 한밤중에 일어 났고 답을 확인하기로 결정했습니다. 나는 졸리 기 때문에 전체 답변을 동화 시키지는 않지만 혼란 스러울 수있는 것을 요구합니다. 이것은 hg_quest가 tty에서 로그인하는 것을 어떻게 방지합니까?
HandyGandy

@HandyGandy 가장 간단한 부분입니다. 나는 그것을하는 두 가지 방법을 추가했지만 더 많은 것이 있다고 생각합니다
Coren

0

이것을 사용자의 로그인 쉘로 사용해보십시오.

#!/bin/sh
basedir=/local/remote_only_scripts
while read -p '$ ' prog args; do
    if [ ! -x "$basedir/$prog" ]; then
        echo "Invalid program: $prog"
    else
        case "$prog $args" in
            *\**|*\?*|*\^*|*\&*|*\<*|*\>*|*\|*|*\;*|*\`*|*\[*|*\]*)
                echo "Invalid character in command";;
            *)
                eval "$prog $args"
                echo;; # force a trailing newline after the program
        esac
    fi
done

authorized_keysCoren의 답변과 같이 파일에 명시 적으로 추가 하고 싶을 것입니다 . 그러나 '... / foo; 여기에 프로그램과 함께. 즉 같은 SSH에서 명령을 방지 할 수 있습니다 sftp, scp하고 ssh hostname command.


사용자가 디렉토리에서 명령을 실행할 수만 있고 너무 많지 않은 경우 위의 읽기에서 "prog"를 가져 와서 select 문을 사용하여 선택할 수있는 텍스트 메뉴를 제공 할 수 있습니다. 그 프로그램의 다음 인수에 대한 읽기를 수행하십시오. 또한 스크립트의 다양한 지점에서 여러 Ctrl-C를 입력하면 어떻게되는지 확인하기 위해 이것을 테스트합니다. 거기에 트랩 명령이 필요할 수도 있습니다.
Joe

0

오프 기회에 그들은 하나의 스크립트에만 액세스하면됩니다. 이것은 저에게 정말 효과적입니다. 사용자를 추가하고 기본 쉘을 스크립트 경로로 변경하십시오. 그들이 ssh를 통해 연결하면 스크립트를 실행하고 세션을 닫습니다.

server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest

server1:/ # grep hg_guest /etc/passwd

hg_guest : x : 2002 : 100 :: / home / hg_guest : /local/remote_only_scripts/foo/script.sh

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