한 가지만 할 수있는 사용자를 만들고 싶습니다 .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를 사용하도록 허용하면 로컬로 로그인 할 수 있으므로 다른 메커니즘이 필요할 수 있습니다.
답변
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
편집 : 더 많은 제한 옵션을 추가하고 로컬 액세스를 제거하는 방법을 명확히하십시오.
답변
이것을 사용자의 로그인 쉘로 사용해보십시오.
#!/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_keys
Coren의 답변과 같이 파일에 명시 적으로 추가 하고 싶을 것입니다 . 그러나 ‘… / foo; 여기에 프로그램과 함께. 즉 같은 SSH에서 명령을 방지 할 수 있습니다 sftp
, scp
하고 ssh hostname command
.
답변
오프 기회에 그들은 하나의 스크립트에만 액세스하면됩니다. 이것은 저에게 정말 효과적입니다. 사용자를 추가하고 기본 쉘을 스크립트 경로로 변경하십시오. 그들이 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