SSH authorized_keys opção de comando: vários comandos?

11

O authorized_keys tem uma opção command="..." que restringe uma chave a um único comando. Existe uma maneira de restringir uma chave a comandos múltiplos ? Por exemplo. por ter um regex lá, ou editando algum outro arquivo de configuração?

    
por dkaeae 15.01.2016 / 19:46

4 respostas

5

Não. Não é o comando "permitido", mas o comando "forçado" (como ForceCommand option).

A única possibilidade é usar chaves diferentes para comandos diferentes ou ler parâmetros de stdin .

    
por 15.01.2016 / 20:20
15

Você pode ter apenas um comando por chave, porque o comando é "forçado".

Mas você pode usar um script de wrapper. O comando chamado obtém a linha de comando original como variável de ambiente $SSH_ORIGINAL_COMMAND , que pode avaliar.

Por exemplo coloque isso em ~/.ssh/allowed-commands.sh :

#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.

case "$SSH_ORIGINAL_COMMAND" in
    "systemctl restart cups")
        systemctl restart cups
        ;;
    "shutdown -r now")
        shutdown -r now
        ;;
    *)
        echo "Access denied"
        exit 1
        ;;
esac

Em seguida, referencie-o em ~/.ssh/authorized_keys com

command="/home/user/.ssh/allowed-commands.sh",…
    
por 18.09.2016 / 22:55
5

No excelente livro SSH, O Secure Shell: The Definitive Guide de O'Reilly, no capítulo oito , há um bom exemplo dado usando um script como o seguinte:

#!/bin/sh

/bin/echo "Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit"

/bin/echo "Your choice:"

read ans

while [ "$ans" != "q" ]
do
   case "$ans" in
      1)
         /bin/date
         ;;
      2)
         /usr/bin/who
         ;;
      3)
         /usr/bin/top
         ;;
      q)
         /bin/echo "Goodbye"
         exit 0
         ;;
      *)
         /bin/echo "Invalid choice '$ans': please try again"
         ;;
   esac
   /bin/echo "Your choice:"
   read ans
done
exit 0

Usando isso no seu arquivo .authorized_keys como:

command="/path/to/your/script.sh" <ssh-key>

... dá-lhe isto quando faz ssh :

Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit
Your choice:
    
por 15.01.2016 / 20:31
0

Outras abordagens utilizam, e. um shell restrito para o usuário especificado ou use um wrapper que restringe comandos a todos os arquivos / scripts encontrados em um diretório específico, permitindo assim aumentar a lista de comandos sem alterar o wrapper.

Outro artigo descreve um script genérico, que também permite que argumentos de linha de comando sejam permitidos comandos, mas permite bloqueá-los com regras expressas como expressões regulares.

Este exemplo seria expresso da seguinte maneira:

command="only systemctl shutdown"

E um .onlyrules arquivos seriam criados com este conteúdo:

\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}

A vantagem dessa abordagem 'única' é que não há necessidade de escrever scripts individuais para cada usuário e situação.

    
por 12.03.2017 / 22:50

Tags