Gostaria de criar um usuário que possa fazer apenas uma coisa: via ssh, especifique um script (e argumentos de linha de comando para o script) que reside em uma pasta específica (para os fins desta pergunta, vamos chamá-lo /local/remote_only_scripts/foo
) e fazer com que o script seja executado e retornar sua saída.
Para esclarecer alguns exemplos de coisas que não quero que o usuário possa fazer:
- Faça login localmente na conta. O aplicativo de login é
/bin/login
. Não é um script na/local/remote_only_scripts/foo
pasta, portanto, não deve ser chamado pelo usuário. - Faça login remotamente na conta. Novamente, o login (é o que é chamado pelo ssh?) Não é um script na pasta relevante.
- Listar o conteúdo do diretório. Está dentro
/bin/ls
. Não é um script no diretório apropriado. - Edite um arquivo nesse diretório. O emacs, vi, gedit, a maioria dos outros editores não são scripts nesse diretório.
- Veja o conteúdo de um arquivo nesse diretório.
- Execute um arquivo nesse diretório que ele não tem permissão para executar.
Observe que estes são exemplos. Existem muitas outras ações que eu não quero que o usuário possa executar. Ao considerar uma ação, pergunte "isso está sendo feito por um script /local/remote_only_scripts/foo
?" se a resposta for negativa, o usuário não poderá fazê-lo. Se a resposta for sim, o usuário deve ser capaz de fazê-lo.
PS: Deixe-me esclarecer o que quero dizer com "adicionando um usuário". Não quero adicionar um usuário a algum subsistema ssh. Em vez disso, quero dizer adicionar um usuário ao sistema do computador. Então, por exemplo, eu tenho um sistema executando o debian stable, chame-o pelo seu endereço, www.hg.bar.com. Eu quero adicionar um usuário (via kuser, users-admin ou useradd ou alguma maneira similar) chamá-lo de hg_guest. O hg_guest não pode fazer login localmente ou executar qualquer uma das ações da lista acima. Tudo o que o hg_guest pode fazer é executar scripts "remotamente". Eu disse que ele deveria ser capaz de fazê-lo via ssh, mas pensando nisso agora, talvez permitir que ele use o ssh pode permitir que ele efetue login localmente, portanto, pode ser necessário outro mecanismo.
fonte
command=
,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
são necessárias opções para realmente restringir a conta.Tente isso como o shell de logon para o usuário:
Você provavelmente também desejará incluir isso no
authorized_keys
arquivo explicitamente, como na resposta de Coren; mas substitua o '... / foo; com o programa aqui. Isso vai impedir que os comandos do SSH comosftp
,scp
, essh hostname command
.fonte
Na hipótese de eles precisarem acessar apenas um script, isso funciona muito bem para mim. Adicione o usuário e altere seu shell padrão para o caminho do script. Quando eles se conectam via ssh, ele executa o script e fecha a sessão.
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
fonte